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


从 "81 端口的异常流量"中，我们发现了一个新的僵尸网络家族，它和 MRIAI 存在一定的联系，本文将介绍一些对比结果，同时介绍一下我们从这个 botnet 中发现的一种依赖SSDP协议的感染机制。


****注：*如无特殊声明，MIRAI的分析将以github源码为基础；新botnet 将以其中的9584B6AEC418A2AF4EFAC24867A8C7EC样本的逆向结果为基础。



相同点



相同的扫描方案


众所周知，MIRAI在传播过程中用到了SYN端口探测的技巧，来提高传播效率。新Botnet 也使用了该技巧并将其用在了81端口扫描中。随着研究的深入我们发现它和MIRAI有着相同的扫描规则。

在 MIRAI 中，被扫描IP是通过一系列随机函数生成的，但他有个黑名单机制，用于跳过一些IP地址范围（代码来自scanner.c），相关截图如下：





而在我们发现的 新Botnet 中（截图选自sub_A7C4函数），也有完全相同的黑名单机制（上下两图红框中是三行比对样例，实际上整个 while 循环体都是完全一致的）。






部分util函数同源


当我们将 新Botnet 和 MIRAI 进行汇编指令级别对比时，可以很清晰的发现，它们之间的少部分函数具有高度的一致性。






不同点



配置C2的区别


在公开的 MIRAI 源码中，用了 一个异或加密算法 来保护 C2 域名，并将 C2 以密文形式编码在原始代码之中，相关代码可参考 table.c 的 table_init 函数，其截图如下：





而在 该 Botnet 中，却是直接的明文字符串编码，相关截图如下：





值得一提的是，域名 ntp.gtpnet.ir 现阶段的解析目标为一个内网地址。

在此种情况下，攻击者是无法对僵尸网络进行正常控制的，且解析方式也不同于BlackHole（即域名的控制权仍然掌握在管理者手中）。

我们推测产生这种状态的原因有两种可能：


 1. 管理者发现僵尸网络暴露了，切断了解析以防被追踪。
 2. 管理者正在进行新版本的研发和测试，而网络上有大量的被控端，它们会对测试造成干扰，把解析目标设置到自己可控的内网地址后，可以很方便的排除干扰。



传播方式的区别


在所有公开的 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 端口外还存在其他传播方案


虽然 新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 的网络特征


该样本支持两种UDP-flood 攻击，分别为 00 06 和 00 08。


其中 00 06 对应的 flood 内容同 SSDP 探测包相同，截图证明如下：





而 00 08 对应的 flood 内容为：






回顾


本文从逆向样本出发，详细阐述了 新Botnet 和 MIRAI 之间的2个相同点和4个不同点。


相同点


 1. 相同的扫描方案
 2. 部分util函数同源


不同点


 1. 配置C2的区别
 2. 传播方式的区别
 3. 通讯协议的区别
 4. 攻击向量的区别


虽然 新Botnet 和 MIRAI 之间存在一定的共同点，但从 Botnet 识别的角度来看，这些不同点均为识别 Botnet 的重要指标，我们没有理由将其归类为 MIRAI 的变种，而应当把它当做一个全新的 Botnet 家族。

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