HNS Botnet 最近活动更新
<!--kg-card-begin: markdown--><p>作者：Rootkiter, yegenshen</p>
<p>HNS 僵尸网络（Hide and Seek） 是最初由 BitDefender 于今年 1月 <a href="https://labs.bitdefender.com/2018/01/new-hide-n-seek-iot-botnet-using-custom-built-peer-to-peer-communication-spotted-in-the-wild/">报告</a> 的一个IoT僵尸网络。在那份报告中研究人员指出，HNS 会利用CVE-2016-10401、其他漏洞以及Telnet弱口令投入恶意代码，有执行任意指令和盗取用户信息的恶意行为，传播方式类似蠕虫，感染规模在1月23日至1月24期间快速增长到超过32k。并且，HNS内部通过P2P 机制通信，这是我们所知继 hajime之后第二个利用P2P通信的IoT僵尸网络。</p>
<p>P2P类的僵尸网络很难被根除，HNS 僵尸网络也是如此。在过去的几个月中 HNS 僵尸网络一直在持续更新，我们看到其更新活动包括：</p>
<ul>
<li>增加了对 AVTECH全部设备（网络摄像头、网络录像设备）、CISCO Linksys路由器、JAWS/1.0 Web服务器、Apache CouchDB、OrientDB的漏洞利用；加上原始报告中提到的2种，目前HNS已经支持7种漏洞利用方式；</li>
<li>内置的P2P节点地址增加到了171 条；</li>
<li>另外，我们观察到HNS 僵尸网络增加了 cpuminer 挖矿程序的下载，但是尚未观察到其正常运行。结合HNS在针对couchDB和OrientDB，给人感觉 HNS 僵尸网络的作者正在工作，以谋求通过挖矿获利。</li>
</ul>
<p>特别值得一提的是，随着失陷的 OrientDB 和 CouchDB 数据库服务器加入其僵尸军团，HNS已经不再仅仅是 IoT 僵尸网络，而是一个跨平台的僵尸网络了。</p>
<h4 id="">核心样本</h4>
<p>我们分析了以下样本：</p>
<pre><code>c1816d141321276cd4621abcd280ee40    #hns x86
0770ff1a6e90eb5d083c16452e45abd5    #hns arm
30ebaaeb61a4ecae3ade7d1d4e5c7adb    #hns_miner
</code></pre>
<h4 id="">网络扫描和漏洞利用</h4>
<p>HNS 僵尸网络通过网络扫描寻找潜在受害者。HNS在扫描过程中借鉴了Mirai的扫描机制，也共享了mirai僵尸网络的一些扫描特点。</p>
<p>扫描的目标端口包括：固定的 80/8080/2480/5984/23，以及随机端口。</p>
<p><img src="__GHOST_URL__/content/images/2018/07/scanning-ports.png" alt="" loading="lazy"></p>
<p>这些端口上常见运行的服务是：</p>
<pre><code>23    Telnet
80    HTTP Web Service
2480  OrientDB
5984  CouchDB
8080  HTTP Web Service
RandomPort   NA
</code></pre>
<p>在上述端口上，HNS会尝试利用下面的漏洞利用将其自身投入。其中 1 和 2 是最初BitDefender报告中提及的，其它的利用均为HNS后续增加：</p>
<ol>
<li><a href="https://sekurak.pl/tp-link-httptftp-backdoor/">TPLink-Routers RCE</a></li>
<li><a href="https://www.exploit-db.com/exploits/43055/">Netgear RCE</a></li>
<li><strong>新增</strong>：<a href="https://www.exploit-db.com/exploits/40500/">AVTECH RCE</a></li>
<li><strong>新增</strong>：<a href="https://vuldb.com/?id.12362">CISCO Linksys Router RCE</a></li>
<li><strong>新增</strong>：<a href="https://www.pentestpartners.com/security-blog/pwning-cctv-cameras/">JAW/1.0 RCE</a></li>
<li><strong>新增</strong>：<a href="https://www.exploit-db.com/exploits/42965/">OrientDB RCE</a></li>
<li><strong>新增</strong>：<a href="https://www.exploit-db.com/exploits/44913/">CouchDB RCE</a></li>
</ol>
<h4 id="171p2p">171个内置的P2P节点</h4>
<p>作为P2P 型僵尸网络，HNS获取通信对端节点的方式下面 3 种。其中第 2、3 两项在 bitdefender 的文章中已经有介绍。</p>
<ol>
<li>样本内置：内置了 171 个对端节点信息；</li>
<li>运行参数传递；</li>
<li>询问对端节点；</li>
</ol>
<p>上述 171个节点，在 HNS 的上线和交互过程中均会参与。</p>
<h6 id="">上线过程</h6>
<p>HNS 无参数启动后会出现大量的 UDP 上线请求包。观察这些请求包的目标IP地址可知，大部分是随机生成的，少量是由内置节点列表决定的。样本中内置节点的部分信息如下图所示，全部171个节点的信息见 IoC 部分。</p>
<p><img src="__GHOST_URL__/content/images/2018/07/hard-coded-peer.png" alt="" loading="lazy"></p>
<h6 id="">交互过程</h6>
<p>HNS 在节点之间的交互过程中有以下特征：</p>
<ul>
<li>HNS 的上线包是一个长度和内容均随机的 UDP 请求包，这个包特征并不明显。明显的点在<br>
于上游节点的回包是一个长度为 2 且首字节为大写字母’O’的回包。另外回包的第二字节，其实是从请求包计算出的一个校验值，所以该方法也可用于 HNS 感染判定。详细校验算法见附录。</li>
<li>HNS 在加入 P2P 网络后，需要较频繁的进行地址同步操作，以确保不会出现节点走失的情况。<br>
这个同步操作具有较强的网络特征。首先，下游节点会向上游节点发送一个长度 1 内容为“~”的请求包，随后上游节点会回复一个长度为 8 首字母为“^”的回包。</li>
<li>HNS 在指令获取及文件获取过程中，会出现大量的交互数据包。请求包长度 69 首字母“y”，<br>
回复包（满载拆包分发状态）长度 261 首字母“Y”。</li>
</ul>
<p>服务请求包的回包算法如下，基于 python 2.7</p>
<p>当发送如下请求包时：</p>
<pre><code>data_pointer = &quot;5b 02 d7 ff 52 02 61 e9 a5 7e 0b 07 c5 43 5b&quot;.replace(&quot;&quot;,&quot;&quot;).decode('hex')
</code></pre>
<p>上游节点的回包应为：</p>
<pre><code>ack=&quot;4f b6&quot;.replace(&quot; &quot;,&quot;&quot;).decode('hex')
</code></pre>
<p>其中 chr(0x4f) 固定，chr(0xb6)的计算方法如下:</p>
<pre><code>def calc_crc(data_pointer):
    data_len_1 = len(data_pointer)-1
    tmp = 88
    for i in range(0,data_len_1):
        tmp += ord(data_pointer[i])
        tmp = tmp &amp;0xff
    tmp2 = tmp^0x3d
    print hex(tmp2),hex(ord(data_pointer[data_len_1]))
    if(tmp2 == ord(data_pointer[data_len_1])):
        return (2*tmp2&amp;0xfe)
    return -1;
</code></pre>
<h4 id="">联系我们</h4>
<p>感兴趣的读者，可以在 <a href="https://twitter.com/360netlab">twitter</a> 或者在微信公众号 360Netlab 上联系我们。</p>
<h4 id="ioc">IoC</h4>
<p>Malware Sample md5</p>
<pre><code>c1816d141321276cd4621abcd280ee40    #hns x86
0770ff1a6e90eb5d083c16452e45abd5    #hns arm
30ebaaeb61a4ecae3ade7d1d4e5c7adb    #hns_miner
</code></pre>
<p>All 171 hard coded P2P peer address list is <a href="__GHOST_URL__/file/hns_hardcoded_peer_list.txt">here</a>.</p>
<!--kg-card-end: markdown-->
作者：Rootkiter, yegenshen


HNS 僵尸网络（Hide and Seek） 是最初由 BitDefender 于今年 1月 报告 的一个IoT僵尸网络。在那份报告中研究人员指出，HNS 会利用CVE-2016-10401、其他漏洞以及Telnet弱口令投入恶意代码，有执行任意指令和盗取用户信息的恶意行为，传播方式类似蠕虫，感染规模在1月23日至1月24期间快速增长到超过32k。并且，HNS内部通过P2P 机制通信，这是我们所知继 hajime之后第二个利用P2P通信的IoT僵尸网络。


P2P类的僵尸网络很难被根除，HNS 僵尸网络也是如此。在过去的几个月中 HNS 僵尸网络一直在持续更新，我们看到其更新活动包括：


 * 增加了对 AVTECH全部设备（网络摄像头、网络录像设备）、CISCO Linksys路由器、JAWS/1.0 Web服务器、Apache CouchDB、OrientDB的漏洞利用；加上原始报告中提到的2种，目前HNS已经支持7种漏洞利用方式；
 * 内置的P2P节点地址增加到了171 条；
 * 另外，我们观察到HNS 僵尸网络增加了 cpuminer 挖矿程序的下载，但是尚未观察到其正常运行。结合HNS在针对couchDB和OrientDB，给人感觉 HNS 僵尸网络的作者正在工作，以谋求通过挖矿获利。


特别值得一提的是，随着失陷的 OrientDB 和 CouchDB 数据库服务器加入其僵尸军团，HNS已经不再仅仅是 IoT 僵尸网络，而是一个跨平台的僵尸网络了。


核心样本


我们分析了以下样本：


c1816d141321276cd4621abcd280ee40    #hns x86
0770ff1a6e90eb5d083c16452e45abd5    #hns arm
30ebaaeb61a4ecae3ade7d1d4e5c7adb    #hns_miner



网络扫描和漏洞利用


HNS 僵尸网络通过网络扫描寻找潜在受害者。HNS在扫描过程中借鉴了Mirai的扫描机制，也共享了mirai僵尸网络的一些扫描特点。


扫描的目标端口包括：固定的 80/8080/2480/5984/23，以及随机端口。





这些端口上常见运行的服务是：


23    Telnet
80    HTTP Web Service
2480  OrientDB
5984  CouchDB
8080  HTTP Web Service
RandomPort   NA



在上述端口上，HNS会尝试利用下面的漏洞利用将其自身投入。其中 1 和 2 是最初BitDefender报告中提及的，其它的利用均为HNS后续增加：


 1. TPLink-Routers RCE
 2. Netgear RCE
 3. 新增：AVTECH RCE
 4. 新增：CISCO Linksys Router RCE
 5. 新增：JAW/1.0 RCE
 6. 新增：OrientDB RCE
 7. 新增：CouchDB RCE


171个内置的P2P节点


作为P2P 型僵尸网络，HNS获取通信对端节点的方式下面 3 种。其中第 2、3 两项在 bitdefender 的文章中已经有介绍。


 1. 样本内置：内置了 171 个对端节点信息；
 2. 运行参数传递；
 3. 询问对端节点；


上述 171个节点，在 HNS 的上线和交互过程中均会参与。


上线过程


HNS 无参数启动后会出现大量的 UDP 上线请求包。观察这些请求包的目标IP地址可知，大部分是随机生成的，少量是由内置节点列表决定的。样本中内置节点的部分信息如下图所示，全部171个节点的信息见 IoC 部分。





交互过程


HNS 在节点之间的交互过程中有以下特征：


 * HNS 的上线包是一个长度和内容均随机的 UDP 请求包，这个包特征并不明显。明显的点在
   
   于上游节点的回包是一个长度为 2 且首字节为大写字母’O’的回包。另外回包的第二字节，其实是从请求包计算出的一个校验值，所以该方法也可用于 HNS 感染判定。详细校验算法见附录。
 * HNS 在加入 P2P 网络后，需要较频繁的进行地址同步操作，以确保不会出现节点走失的情况。
   
   这个同步操作具有较强的网络特征。首先，下游节点会向上游节点发送一个长度 1 内容为“~”的请求包，随后上游节点会回复一个长度为 8 首字母为“^”的回包。
 * HNS 在指令获取及文件获取过程中，会出现大量的交互数据包。请求包长度 69 首字母“y”，
   
   回复包（满载拆包分发状态）长度 261 首字母“Y”。


服务请求包的回包算法如下，基于 python 2.7


当发送如下请求包时：


data_pointer = "5b 02 d7 ff 52 02 61 e9 a5 7e 0b 07 c5 43 5b".replace("","").decode('hex')



上游节点的回包应为：


ack="4f b6".replace(" ","").decode('hex')



其中 chr(0x4f) 固定，chr(0xb6)的计算方法如下:


def calc_crc(data_pointer):
    data_len_1 = len(data_pointer)-1
    tmp = 88
    for i in range(0,data_len_1):
        tmp += ord(data_pointer[i])
        tmp = tmp &0xff
    tmp2 = tmp^0x3d
    print hex(tmp2),hex(ord(data_pointer[data_len_1]))
    if(tmp2 == ord(data_pointer[data_len_1])):
        return (2*tmp2&0xfe)
    return -1;



联系我们


感兴趣的读者，可以在 twitter 或者在微信公众号 360Netlab 上联系我们。


IoC


Malware Sample md5


c1816d141321276cd4621abcd280ee40    #hns x86
0770ff1a6e90eb5d083c16452e45abd5    #hns arm
30ebaaeb61a4ecae3ade7d1d4e5c7adb    #hns_miner



All 171 hard coded P2P peer address list is here.

{"version":"0.3.1","markups":[],"atoms":[],"cards":[["markdown",{"cardName":"card-markdown","markdown":"作者：Rootkiter, yegenshen\n\nHNS 僵尸网络（Hide and Seek） 是最初由 BitDefender 于今年 1月 [报告](https://labs.bitdefender.com/2018/01/new-hide-n-seek-iot-botnet-using-custom-built-peer-to-peer-communication-spotted-in-the-wild/) 的一个IoT僵尸网络。在那份报告中研究人员指出，HNS 会利用CVE-2016-10401、其他漏洞以及Telnet弱口令投入恶意代码，有执行任意指令和盗取用户信息的恶意行为，传播方式类似蠕虫，感染规模在1月23日至1月24期间快速增长到超过32k。并且，HNS内部通过P2P 机制通信，这是我们所知继 hajime之后第二个利用P2P通信的IoT僵尸网络。\n\nP2P类的僵尸网络很难被根除，HNS 僵尸网络也是如此。在过去的几个月中 HNS 僵尸网络一直在持续更新，我们看到其更新活动包括：\n\n - 增加了对 AVTECH全部设备（网络摄像头、网络录像设备）、CISCO Linksys路由器、JAWS/1.0 Web服务器、Apache CouchDB、OrientDB的漏洞利用；加上原始报告中提到的2种，目前HNS已经支持7种漏洞利用方式；\n - 内置的P2P节点地址增加到了171 条；\n - 另外，我们观察到HNS 僵尸网络增加了 cpuminer 挖矿程序的下载，但是尚未观察到其正常运行。结合HNS在针对couchDB和OrientDB，给人感觉 HNS 僵尸网络的作者正在工作，以谋求通过挖矿获利。\n\n特别值得一提的是，随着失陷的 OrientDB 和 CouchDB 数据库服务器加入其僵尸军团，HNS已经不再仅仅是 IoT 僵尸网络，而是一个跨平台的僵尸网络了。\n\n#### 核心样本\n我们分析了以下样本：\n\n```\nc1816d141321276cd4621abcd280ee40    #hns x86\n0770ff1a6e90eb5d083c16452e45abd5    #hns arm\n30ebaaeb61a4ecae3ade7d1d4e5c7adb    #hns_miner\n```\n\n#### 网络扫描和漏洞利用\n\nHNS 僵尸网络通过网络扫描寻找潜在受害者。HNS在扫描过程中借鉴了Mirai的扫描机制，也共享了mirai僵尸网络的一些扫描特点。\n\n扫描的目标端口包括：固定的 80/8080/2480/5984/23，以及随机端口。\n\n![](__GHOST_URL__/content/images/2018/07/scanning-ports.png)\n\n这些端口上常见运行的服务是：\n```\n23    Telnet\n80    HTTP Web Service\n2480  OrientDB\n5984  CouchDB\n8080  HTTP Web Service\nRandomPort   NA\n```\n\n在上述端口上，HNS会尝试利用下面的漏洞利用将其自身投入。其中 1 和 2 是最初BitDefender报告中提及的，其它的利用均为HNS后续增加：\n\n1. [TPLink-Routers RCE](https://sekurak.pl/tp-link-httptftp-backdoor/)\n2. [Netgear RCE](https://www.exploit-db.com/exploits/43055/)\n3. **新增**：[AVTECH RCE](https://www.exploit-db.com/exploits/40500/)\n4. **新增**：[CISCO Linksys Router RCE](https://vuldb.com/?id.12362)\n5. **新增**：[JAW/1.0 RCE](https://www.pentestpartners.com/security-blog/pwning-cctv-cameras/)\n6. **新增**：[OrientDB RCE](https://www.exploit-db.com/exploits/42965/)\n7. **新增**：[CouchDB RCE](https://www.exploit-db.com/exploits/44913/)\n\n#### 171个内置的P2P节点\n\n作为P2P 型僵尸网络，HNS获取通信对端节点的方式下面 3 种。其中第 2、3 两项在 bitdefender 的文章中已经有介绍。\n\n1. 样本内置：内置了 171 个对端节点信息；\n2. 运行参数传递；\n3. 询问对端节点；\n\n上述 171个节点，在 HNS 的上线和交互过程中均会参与。\n\n###### 上线过程\n\nHNS 无参数启动后会出现大量的 UDP 上线请求包。观察这些请求包的目标IP地址可知，大部分是随机生成的，少量是由内置节点列表决定的。样本中内置节点的部分信息如下图所示，全部171个节点的信息见 IoC 部分。\n\n![](__GHOST_URL__/content/images/2018/07/hard-coded-peer.png)\n\n###### 交互过程\n\nHNS 在节点之间的交互过程中有以下特征：\n\n - HNS 的上线包是一个长度和内容均随机的 UDP 请求包，这个包特征并不明显。明显的点在\n于上游节点的回包是一个长度为 2 且首字节为大写字母’O’的回包。另外回包的第二字节，其实是从请求包计算出的一个校验值，所以该方法也可用于 HNS 感染判定。详细校验算法见附录。\n - HNS 在加入 P2P 网络后，需要较频繁的进行地址同步操作，以确保不会出现节点走失的情况。\n这个同步操作具有较强的网络特征。首先，下游节点会向上游节点发送一个长度 1 内容为“~”的请求包，随后上游节点会回复一个长度为 8 首字母为“^”的回包。\n - HNS 在指令获取及文件获取过程中，会出现大量的交互数据包。请求包长度 69 首字母“y”，\n回复包（满载拆包分发状态）长度 261 首字母“Y”。\n\n\n服务请求包的回包算法如下，基于 python 2.7\n\n当发送如下请求包时：\n```\ndata_pointer = \"5b 02 d7 ff 52 02 61 e9 a5 7e 0b 07 c5 43 5b\".replace(\"\",\"\").decode('hex')\n```\n\n上游节点的回包应为：\n```\nack=\"4f b6\".replace(\" \",\"\").decode('hex')\n```\n其中 chr(0x4f) 固定，chr(0xb6)的计算方法如下:\n```\ndef calc_crc(data_pointer):\n    data_len_1 = len(data_pointer)-1\n    tmp = 88\n    for i in range(0,data_len_1):\n        tmp += ord(data_pointer[i])\n        tmp = tmp &0xff\n    tmp2 = tmp^0x3d\n    print hex(tmp2),hex(ord(data_pointer[data_len_1]))\n    if(tmp2 == ord(data_pointer[data_len_1])):\n        return (2*tmp2&0xfe)\n    return -1;\n```\n\n####联系我们\n感兴趣的读者，可以在 [twitter](https://twitter.com/360netlab) 或者在微信公众号 360Netlab 上联系我们。\n\n#### IoC\nMalware Sample md5\n```\nc1816d141321276cd4621abcd280ee40    #hns x86\n0770ff1a6e90eb5d083c16452e45abd5    #hns arm\n30ebaaeb61a4ecae3ade7d1d4e5c7adb    #hns_miner\n```\n\nAll 171 hard coded P2P peer address list is [here](__GHOST_URL__/file/hns_hardcoded_peer_list.txt).\n"}]],"sections":[[10,0]],"ghostVersion":"3.0"}