基于主被动测量的 IoT 安全情报

工作来源

DSN 2021

工作背景

随着 IoT 设备在家庭、公司、关键信息基础设施和城市中的广泛应用,IoT 安全确实已经渗透到社会生活的方方面面。与此同时,因为各种原因,IoT 设备的安全性目前仍然是落后的。

与两个主题紧密相关,失陷 IoT 设备的指纹识别、监控网络的可运营情报。

失陷 IoT 设备的指纹识别

  • 蜜罐:通常来说,蜜罐只能模拟部分设备、固件和服务,且复杂的恶意软件还会规避蜜罐。

  • 观测:一般需要额外的处理才能识别 IoT 恶意软件的特定特征,如数据包中的 TCP seq 等于目的 IP 地址可归因于 Mirai 感染了设备等特征,但并不是所有恶意软件都有如此明显的特征。

  • 扫描:通过 Shodan 等扫描的方式发现也存在局限性,如恶意软件可能为避免被竞争对手再次感染就关闭端口和服务、设备在防火墙后导致访问受限、一些设备的 Banner 并不明显等。

  • ISP 级流量:利用骨干网流量来识别僵尸网络活动和失陷主机通常需要密集的计算,且准确性可能相对较低。

  • 内部流量:利用内部流量发现失陷 IoT 设备的异常流量,但相对规模较小且视角不大。

监控网络的可运营情报

  • GreyNoise 提供了互联网范围内 Scanner 的列表。

  • Dshield 根据众包 IDS 数据提供有关每个端口的日常合并统计数据。

  • Shodan 是第一个持续监控网络空间以检索所有面向互联网的搜索引擎。

网络望远镜是一组可路由、已分配但未使用的 IP 地址,这些 IP 地址只接收数据包而不作出响应。由于没有正常服务,不应该有任何 IP 向其发送数据包。

可以利用被动网络望远镜流量收集恶意活动的数据,因为接收到的数据包:(1)网络故障(2)DDoS的反射流量(3)互联网范围扫描。

工作设计

失陷主机会不断扫描互联网以发现更多易受攻击的设备,根据包头部分字段过滤反射数据包后,再使用阈值随机游走(TRW)扫描检测算法检测扫描行为。

核心方法如下所示:

检测到扫描行为后,会立刻探测该 IP 上是否存在开放端口和应用程序 Banner。根据 IoT 设备的指纹库匹配 Banner 判断主机是否为 IoT 设备。主机相关的流量和标签用于训练机器学习模型,该模型还应用于新发现的流量以预测标签。

此前的研究表明,不同的僵尸网络在扫描数据包中表现出的行为确实存在不同。例如扫描数据包到达间隔时间、目标端口以及每个端口的相应权重等。

更宏观的整体架构如下所示:

工作前端利用来自 CAIDA 的网络望远镜(1600万+IP地址),其每小时收集到的被动流量超过 150GB,平均每秒超过一百万个包。每小时的数据集使用 OpenStack Swift 进行压缩和存储,通过位于 UCSD 的集群提供对外访问。

流检测和数据包采样在 CAIDA 的集群上进行,采样包通过安全信道回传至本地服务器进行进一步处理。

eX-IoT 的处理流水线被拆分成了几个可单独运行的模块,以此实现实时高吞吐的并行处理。

后端数据主要存储在三个数据库中:用于存储与失陷 IoT 设备相关威胁信息的 MongoDB 数据库、用于存储过去两周内失陷 IoT 设备信息的 MongoDB 数据库、用于存储仍在活跃的失陷 IoT 设备信息的 Redis 数据库。

前端处理

流检测与数据包采样模块使用 C++ 开发,使用 Libtrace 实现实时处理。该程序将每小时的数据文件解压并分析,将那些与反射放大攻击无关的数据包(如仅设置了 TCP ACK 的数据包等)视为潜在扫描数据包。其状态将会被保存在 GLib Hashtable 中:以源 IP 地址为关键字,源 IP 的状态为值(开始时间戳、来自源 IP 的最新到达数据包的时间戳,来自源 IP 的数据包数量,是否为 Scanner)。

基于 TRW 进行 Scanner 检测,如果源 IP 收到至少 100个没有过期的数据包(连续数据包间到达间隔不超过300秒),则将源 IP 视为 Sacnner。此外,通过持续时间不低于 1 分钟排除由于错误配置产生的网络流。在判断源 IP 为 Sanner 时,将接收到的数据包数量重置为零开始数据包采样。

对于来自源 IP 的下一批传入数据包,程序将会忽略只更新最新时间戳。由于处理批次一小时一次,如果最新时间戳在 1 小时前,则认为扫描已结束。程序还会每秒统计处理的包数、TCP/ICMP/UDP 包数、新检测到扫描数、特定端口的数据包数。

每个小时的数据,大约需要处理 20 分钟。程序使用 Socat 将数据回传到本地服务器。

后端处理

  • Receiver:接收来自 CAIDA 的数据并将信息存入 MongoDB。

  • Packet Organizer:接收来自不同来源的采样数据包,根据源 IP 和到达时间重新整理打包分发到后续模块,忽略掉不能应用于模型的数据。模块通过管道以JSON格式输出到缓冲区。

  • Buffer:缓冲区是利用 mbuffer 在内存中开辟的大 FIFO(15GB)。

  • Scan Module:对已识别的 Scanner 记录 10 万条/1 小时的缓存,以每秒 5 千个的速率运行 Zmap 扫描目标端口(50个端口)、运行 Zgrab 处理 16 个协议。其支持的端口和协议如下所示,这些端口/协议都是响应速度较快的。

  • Scan Module 还根据 Recog 和 Ztag 整理了一个 Banner 指纹库,并使用 Beautifulsoup 与 regex 处理返回的 Banner 提取有关供应商、设备型号、固件版本等信息。该模块还会保存满足 [az]+[-]?[az!]*[0-9]+[-]?[-]?[a-z09] 正则表达式的未知 Banner,扩展未知的新设备再生成规则。
  • 该模块还会输出根据 IoT 恶意软件(如Mirai)扫描模块的包级指纹匹配与互联网扫描工具(如ZMap、MASSCAN、Unicorn、Nmap)的结果。

  • Anootate Module:预处理识别出的 Scanner 流量:(1)计算到达间隔时间、处理 TCP 可选字段、使用 MinMax 标准化每个字段,字段的最终列表如下所示:

  • (2)计算来自每个源 IP 所有数据包中每个字段的最小值、第一分位数、中位数、第三分位数和最大值。这是一个 24×5=120 维的特征向量。

  • 此模块利用 MaxMind、IP WHOIS、rDNS 等各种数据扩展每个已识别 IP 地址的维度信息,包括地理位置、ISP、ASN、域名、电子邮件等信息。

  • Update:在 Scan 中标记的流量传递到此,估算每个流的目标端口列表及其分布、扫描速率和地址重复率。根据 rDNS 数据可判断为合法目的扫描的标记为良性,应用最新的分类器确定是否由失陷 IoT 设备生成。模型每天更新一次,使用最近14天的数据确保模型可以处理最新的信息。

工作准备

设备环境

CAIDA 的集群运行 Intel 8 核处理器(Skylake,IBRS)、频率为 2.20GHz,内存 32GB。

Intel Xeon W-2145(16 核 3.70GHz)处理器、128 GB DDR4 内存、Intel 850 Pro 1TB SSD 硬盘。

基本方案

训练数据与测试数据“二八分”,算法迭代次数 1000 次,算法选择随机森林。用数据测试对比随机森林(RF)、SVM、高斯朴素贝叶斯(GNB)后,确认还是随机森林效果好。

数据访问

  • 提供 Web 界面与 RESTful API 两种方式访问数据,

  • 通过 DHS IMPACT 数据共享协议,可提供给其他人员使用

API 返回 JSON 对象,便于与第三方应用程序集成。想要使用可进一步查看细节: 

API 文档

https://github.com/eX-IoTsubmission/eX_IoT_API

工作评估

功能验证

使用从 2021 年 3 月 14 日到 3 月 18 日这一周的数据进行测试。

  • 与 Bad Packets 合作,发现情报与美国 IoT Exploit的关联关系。

  • 与捷克的 CSIRT 合作,发现情报与捷克 IoT Exploit 的关联关系。

通过两个来源,能够验证近 70% 的 Exploit,在捷克几乎可以验证 83%。

横向比较

使用 eX-IoT 和 Dshield 以及 GreyNoise 进行比较。下表为一周内每天更新的平均数量:

GreyNoise 平均每天更新 215350 条情报,其中 85330 条为恶意,126018 条为未知,4002 条为良性。此外,GreyNoise 使用 Mirai 以及 Mirai 变种标记了 20557 条情报。DShield 则平均每天更新 214390 条情报。

从量上看,eX-IoT 发现的威胁是其他两个来源的四倍。发现的失陷 IoT 设备数,eX-IoT 比 GreyNoise 高约 7 倍。

相比数量,独家检测也是很重要的。使用 2020 年 12 月 9 日时 eX-IoT 发现的新失陷 IoT 设备,包含 134782 个唯一 IP 地址。GreyNoise 有其中 28338 个 IP 地址,其中 10460 个被标记为 Mirai。而 DShield 只包含 8559 个 IP 地址。

通过数据可以发现,大约 76% 都是独家发现,且 78.9% 的失陷 IoT 设备都没有被 GreyNoise 发现,说明可以有效弥补现有方案中对 IoT 的不足。

自我发现

利用 Zmap 在 2020 年 12 月 9 日 7:30:00 以 1000 个每秒的速率对端口 80 执行了 3 小时的互联网范围扫描。

在当天 12:42:04 被 eX-IoT 所捕获,标记为 Desktop(非 IoT) 和 工具为 Zmap,在扫描后五个小时被检测出来,其中仅 CAIDA 在收集、压缩、存储就需要三个半小时的延迟。

eX-IoT 判断扫描的起止时间为 7:30:24 和 17:48:59,误差为 24 秒和 13 分钟。而该 IP 没有被 DShield 给出判断,GreyNoise 在延迟十个小时后才给出结果且认定为是 Nmap。

数据评估

准确率为eX-IoT正确标记 IoT 设备的百分比,覆盖率类似于召回率。

对 2020 年 12 月 7 日、8 日和 9 日的所有 Banner 记录进行了检查,准确率(精度)为 94.63%,覆盖率(召回率)为 77.21%。

选择所有在 2020 年 12 月 7 日至 9 日期间处于活动状态的已发现失陷的 IoT 设备进行分析。(注:无法完全消除动态 IP 分配和 IP 流失对统计数据的影响)

发现 405875 个唯一 IP 地址相关的 488570 个实例,中国(43.46%)、印度(10.32%)、巴西(8.48%)、伊朗(5.51%)和墨西哥(3.52%)是受感染国家排名的 TOP5:

TOP5 的 ASN 为 4134 (21.28%)、4837 (16.45%)、9829 (5.38%)、27699 (4.96%) 和 58244 (3.30%)。

从行业分布来看,教育 (649)、制造 (240)、政府 (184)、银行 (80) 和医疗 (79)都是需要关注的重点行业。

从端口来看,23 [TELNET] (43.25%)、8080 [HTTP] (37.40%)、80 [HTTP] (37.16%)、81 [HTTP] (13.10%) 和 5555 [ADB] (12.92%)。

工作思考

不到 10% 的失陷 IoT 设备返回应用程序 Banner,其中大约 3% 包含能够确定的文本信息。对 Banner 的识别还是专业做网络空间搜索引擎的厂商更准确也更全面,实际上这个工作提供的思路远大于其效果。

中国数量如此高可能与 Mozi 僵尸网络有关,工作中有些值得商榷的地方暂且不表,主被动结合的方式实际上可以提供更完整的视角,这项研究工作可以在有数据来源的位置进行尝试,对效果的进一步挖掘应该能得到更有价值的运营情报。

免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。查看原文

为您推荐