来源:360 网络安全研究院
作者:Rootkiter
从 "81 端口的异常流量"中,我们发现了一个新的僵尸网络家族,它和 MRIAI 存在一定的联系,本文将介绍一些对比结果,同时介绍一下我们从这个 botnet 中发现的一种依赖SSDP协议的感染机制。
*注:如无特殊声明,MIRAI的分析将以github源码为基础;新botnet 将以其中的9584B6AEC418A2AF4EFAC24867A8C7EC样本的逆向结果为基础。
众所周知,MIRAI在传播过程中用到了SYN端口探测的技巧,来提高传播效率。新Botnet 也使用了该技巧并将其用在了81端口扫描中。随着研究的深入我们发现它和MIRAI有着相同的扫描规则。 在 MIRAI 中,被扫描IP是通过一系列随机函数生成的,但他有个黑名单机制,用于跳过一些IP地址范围(代码来自scanner.c),相关截图如下:
而在我们发现的 新Botnet 中(截图选自sub_A7C4函数),也有完全相同的黑名单机制(上下两图红框中是三行比对样例,实际上整个 while 循环体都是完全一致的)。
当我们将 新Botnet 和 MIRAI 进行汇编指令级别对比时,可以很清晰的发现,它们之间的少部分函数具有高度的一致性。
在公开的 MIRAI 源码中,用了 一个异或加密算法 来保护 C2 域名,并将 C2 以密文形式编码在原始代码之中,相关代码可参考 table.c 的 table_init 函数,其截图如下:
而在 该 Botnet 中,却是直接的明文字符串编码,相关截图如下:
值得一提的是,域名 ntp.gtpnet.ir
现阶段的解析目标为一个内网地址。 在此种情况下,攻击者是无法对僵尸网络进行正常控制的,且解析方式也不同于BlackHole(即域名的控制权仍然掌握在管理者手中)。 我们推测产生这种状态的原因有两种可能:
在所有公开的 MIRAI 源码中,只有弱口令扫描一种传播方式,在 MIRAI 的已知变种中,出现过利用7547/5555/6789/37777等端口传播的情况,关于 MIRAI 更多的跟踪细节可以参考 Mirai Scanner主页。
而 81 端口却从未发现过传播的 MIRAI 的先例,这是 新Botnet 独有的传播方式,“新威胁报告:一个新IoT僵尸网络正在 HTTP 81上大范围传播” 记录了和其有关的更多内容。
MIRAI 的通讯协议可以从 attack.c 文件的 attack_parse 函数获取到。
而在 新Botnet 中却采取了一套全新的指令系统,相关内容可以用下表来表示:
在原版 MIRAI 中,拥有包括 GRE 攻击在内的 10 种 ddos 攻击向量可供选择,相关证据可以参考 attack.h 文件中的相关定义,下面是一张截图证明:
而在 新Botnet 中,只存在两种 UDP-flood 攻击向量,可供选择,具体证据可参阅“通讯协议的区别”章节提供的表格。
虽然 新Botnet 是从 81 端口上被披露出来的,但其内部还包含有一个备份的传播方案,它似乎还没有被使用过。
00 04 02
是该传播方案对应的指令码。这是一个基于 “SSDP协议+UPnP实现漏洞利用” 的传播方案,传播将基于 1900 端口。其发送的第一个探测包内容如下:
M-SEARCH * HTTP/1.1
HOST:239.255.255.250:1900
ST:upnp:rootdevice
MAN:"ssdp:discover"
MX:3
这是 SSDP 协议的第一个请求包(函数地址 0x0000A918
),当目标可以处理 SSDP 时,则进入 SSDP 交互逻辑,进而获得更多的智能设备信息及相应控制方法,当发现潜在 CVE-2014-8361 漏洞(Realtek SDK Miniigd UPnP SOAP Command Execution)的设备时(识别关键字:52869/picsdesc.xml
),尝试发送 CVE-2014-8361 对应的 payload 完成一次试探性传播(函数地址 0x0000A458
)。
当存在漏洞的服务无法从外网直接访问时,扫描器将会通过调用拥有“AddPortMapping” 功能的函数(函数地址 0x0000AE20
)建立一个端口映射,并通过新映射的端口来完成试探性payload投递。
该样本支持两种UDP-flood 攻击,分别为 00 06
和 00 08
。
其中 00 06
对应的 flood 内容同 SSDP 探测包相同,截图证明如下:
而 00 08
对应的 flood 内容为:
本文从逆向样本出发,详细阐述了 新Botnet 和 MIRAI 之间的2个相同点和4个不同点。
相同点
不同点
虽然 新Botnet 和 MIRAI 之间存在一定的共同点,但从 Botnet 识别的角度来看,这些不同点均为识别 Botnet 的重要指标,我们没有理由将其归类为 MIRAI 的变种,而应当把它当做一个全新的 Botnet 家族。