MyKings: 一个大规模多重僵尸网络

【更新记录】

2018-01-24  原始文档首次公开，原先基于新浪blog的所有上联通道均已切断
2018-01-29  12:00  MyKings的上联通道开始使用新的blog url http://test886.hatenablog.com/entry/2018/01/26/002449，我们通过 https://twitter.com/360Netlab 发布了这一消息
2018-01-29  15:00  我们注意到上述 BLOG URL 已经被封
2018-01-29  05:00  https://twitter.com/ninoseki 告知，上述被封动作是 hantena 博客安全团队处理的。


以下是原始文章

作者 netlab.360.com

MyKings 是一个由多个子僵尸网络构成的多重僵尸网络，2017 年 4 月底以来，该僵尸网络一直积极地扫描互联网上 1433 及其他多个端口，并在渗透进入受害者主机后传播包括 DDoS、Proxy、RAT、Miner 在内的多种不同用途的恶意代码。我们将其命名为 MyKings，原因之一来自该僵尸网络的一个主控域名 *.mykings[.]pw。

MyKings 并不是一个新的僵尸网络，在我们之前有若干对该僵尸网络组件的分析（详见 <友商披露情况> 一节），但在本次批露之前，各家分析都没有形成完整的拼图，也未见有效行动遏制该僵尸网络的扩散。

2017 年 5 月 23 日，我们第一次联系到新浪安全团队，并随后采取了多轮联合行动。新浪安全团队关闭了 MyKings 的上联 URL，并向我们提供了相关的访问日志。联合行动有效遏制了该僵尸网络的扩散，也希望能为后续其他联合行动扫清障碍。被关闭的这些上联 URL 如下：

hxxp://blog.sina.com.cn/s/blog_16****tv.html --> new, blog post title: down  
hxxp://blog.sina.com.cn/s/blog_16****s0.html --> new, blog post title: xmrok  
hxxp://blog.sina.com.cn/s/blog_16****rz.html --> new, blog post title: xmr64  
hxxp://blog.sina.com.cn/s/blog_16*****w.html  
hxxp://blog.sina.com.cn/s/blog_16*****x.html  
hxxp://blog.sina.com.cn/s/blog_16*****4.html  
hxxp://blog.sina.com.cn/s/blog_16*****v.html  
hxxp://blog.sina.com.cn/s/blog_16*****u.html  
hxxp://blog.sina.com.cn/s/blog_16*****2.html  


Mykings 本身模块化，构成很复杂, 本 Blog 是个概述，具体技术分析的内容见文末的 2 份 PDF 文档。


MyKings 的感染范围和流行程度

统计 2017 年 5 月底前述被关闭的上联 URL 的访问来源 IP 数可知，独立来源 IP 总数 1,183,911 个，分布在遍布全球 198 个国家和地区。其中来源 IP 超过 100,000 的国家和地区有四个，分别是俄罗斯、印度、巴西和中国。

另外，在域名流行程度方面，最为流行的域名是 up.f4321y.com ：

 * 该域名DNS被请求频率超过 2.5m/每日
 * 该域名流行程度排行，历史最高 79753 名，目前稳定在8万～9万之间。


MyKings的组成

MyKings 是一组多个子僵尸网络的混合体，其简要结构如下图所示。

如上两图：

 * 攻击者使用 Scanner(msinfo.exe) 扫描渗透进入受害者主机后，会自动尝试下载恶意代码。下载 URL 中的IP 部分被编码在受控的 Blog 页面中；
 * Blog 页面中编码的 IP 地址是指向 Dropper(ups.rar) 的，这个配置项可以由攻击者在云端动态调整；部分 Blog 页面已经被前述联合行动关闭；
 * Dropper 服务器上提供了恶意代码和对应的启动脚本的下载，这些内容同样可以由攻击者在云端动态调整；
 * 我们观察到所下载的恶意代码有 Mirai, Proxy，RAT 和 Miner。

明确上述结构以后，使得我们可以将整个 MyKings 划分为多个子僵尸网络，并逐一标记各子僵尸网络的特征如下表：

各子僵尸网络相互之间的构建关系如下表所示：

从上述两个表中我们可以得出以下结论：

 * botnet.-1/1/2/3/4 各自拥有独立的上联控制端，仅在构建过程中需要 botnet.0 支撑，构建完成后的运营阶段可以各自独立、不再相互依赖；
 * botnet.0 支撑了多数其他子僵尸网络的构建过程。再考虑到我们在 botnet.0 的所有代码中没有看到其他任何恶意行为，我们倾向认为 botnet.0 是一个专注做恶意代码推广的网络 。
 * botnet.1.proxy 的推广者不是 botnet.0，而是 botnet.-1，这是个例外。不过，上述推广行为仅在早期持续了很少一段时间，主要的恶意代码推广仍然由 botnet.0 完成。


MyKings.botnet.0.spreader

botnet.0 是居于核心地位的一个僵尸网络，除了传播其他僵尸网络以外，该僵尸网络并没有其他恶意行为，聚焦在扫描资源建设和建立后续其他僵尸网络上。该僵尸网络有以下特点：

 * 服务器基础设施规模庞大
 * 积极改进感染代码和能力
 * 向后继僵尸网络的投入提供了定义良好的编程接口

botnet.0 的基础设施能力

botnet.0 拥有在几个小时动员 2400 个主机IP地址发起扫描的能力。如果我们假定每个主机 IP 地址需要 30
元人民币（5美元），这就意味着botnet.0一次性投入了超过7万元人民币（12,000美元）。

基于如此强大的服务器基础设施，当前 botnet.0 贡献了整个互联网范围内 1433 端口扫描的主要部分。而全部 1433 端口上的扫描，根据我们的 scanmon系统(scan.netlab.360.com)显示的数据，高峰时期在 30~40m/d，目前稳定在 1.5m/d，与 23 端口（Mirai / Hajime）在伯仲之间。

前面提到一次性动员的 2400+ 个主机IP地址包括：

 * 123.207.0.0/16 1150个
 * 122.114.0.0/16 1255个

我们检测到上述主机集中发起扫描的时间在 2017.04.25 08:00:00 附近，当时在 scan.netlab.360.com 上能看到的 1433 端口的扫描情况如下。

可以观察到当天上午8：00开始，1433端口上的扫描有了一个巨大的暴增。暴增前每日扫描事件约为5m/d，之后突增到30～40m/d。

观察这些活跃IP在C类段（/24）中的排名，前100的C类段中有99个来自前述两个B类段。考虑到这些IP地址段行为规律一致、时间窗口集中，我们将这些IP地址归入 MyKings 的资源池。

botnet.0 的扫描和渗透能力

botnet.0 的扫描行为是由于其 msinfo.exe 进程发起的。该进程会拉取云端的 wpd.dat 配置文件，配合云端机制发起扫描，并且随着版本更迭不断改进自身扫描能力。

 * 扫描的端口和服务如下：1433 MSSQL3306 MySQL135 WMI22 SSH445 IPC23 Telnet, mirai 僵尸网络80 Web, CCTV设备3389 RDP, Windows远程桌面
 * 扫描目标IP地址：生成机制越来越复杂早期版本中， msinfo.exe 用来扫描的目标 IP 只有两种：从云端配置文件 wpd.dat 获取、在本地根据外网出口 IP 随机生成；最新样本中，增加了一种更复杂的本地随机生成算法，并且会避开一批保留地址段。
 * 扫描方式：不断演化，直至集成 Masscan早期版本中，支持 TCP Connect 和 TCP SYN 两种扫描方式，分别对应木马中实现的两个扫描模块；早期版本的 msinfo.exe 中，两种扫描方式都是自己编写的，其中 TCP Connect 模块用到了The Ultimate TCP/IP 函数库中的 CUT_WSClient 类，而 TCP SYN 扫描模块则用到了 RAW Socket 相关的 DLL 文件并自己手动构造数据包；最新样本中，在 TCP SYN 模块集成了知名全网端口扫描器 Masscan ，并且把目标 IP 配置成 0.0.0.0/0 ，发起对全网的高速扫描。
 * 扫描载荷弱口令字典比较丰富，近百条是针对 Telnet 和 MSSQL Server；获得服务权限后，进行进一步攻击入侵的 Palyload 也很强大，其中针对 MSSQL Server 进行注入利用的 SQL 语句格式化后有近千行。

botnet.0 提供的后继僵尸网络接入界面

botnet.0 向后继僵尸网络提供的接入界面简明清晰，以至于从后继其他僵尸网络的角度来看，只需要按照接入界面要求配置安装包下载地址，以及安装包被下载后需要执行的脚本，安装包就会被下载执行。至于扫描和投入阶段的各种技术细节，可以交由 botnet.0 处理，自己完全不用关注。

上述接入界面包括：

 * 灵活的云端配置文件：botnet.0.spreader 的核心木马 msinfo.exe 用到的云端配置文件 wpd.dat ，是一个加密的 XML 文档，其中指定了暴破 Telnet 成功后用到来下载 Mirai 样本的 C2 地址、需要扫描的网络服务端口、暴破各个端口所需的口令、入侵各个网络服务时执行的部分命令以及需要扫描的目标 IP 范围等配置。这些配置都可以根据后继僵尸网络的要求灵活更改。
 * 模块化编程架构的 msinfo.exe : 主要是其 Crack 模块中通过继承一个基类 Task_Crack ，实现其中定义好的一组连接、暴破、执行命令等功能的函数接口即可定义一个 Task_Crack_XXX 子类，继而实现针对一个新的网络服务的攻击模块。Crack 模块与 wpd.dat 配置文件中定义的待扫描网络服务端口相对应，可以灵活更改针对不同网络服务的 Crack 功能。
 * 其他辅助云端配置文件：msinfo.exe 与 botnet.0.spreader 用到的另外一个辅助木马 ups.exe ，会涉及其它云端配置文件，如 update.txt、ver.txt、my1.html、test.html、kill.html、clr.txt 等。这些也都可以灵活配置，方便攻击者控制在下一阶段需要下载什么样本、执行什么样的命令。


被推广的其他子僵尸网络

botnet.0 推广的其他僵尸网络包括：

 * botnet.-1.mirai
 * botnet.1.proxy
 * botnet.2.rat
 * botnet.3.miner
 * botnet.4.rat

我们使用序号来标记首次发现的顺序、后缀标识给子僵尸网络的用途。

botnet.-1.mirai

cnc.f321y.com (123.51.208.155:23) 是一个 mirai 僵尸网络，它与 MyKings 的同源关系在卡巴斯基的早期文章中已经论证。

我们追溯到该C2发出的第一条攻击指令，是在2016-12-20发出的。

 * 2016-12-20 20:36 123.51.208.155:23|http_flood|118.193.139.184:54321

值得一提的是指令中受害者IP地址118.193.139.184 上，曾经有若干 C2 域名同属 MyKings 控制：

 * 2016-04-01 15:55:56 2016-12-27 19:14:42 pc.kill1234.com 118.193.139.184
 * 2016-04-24 13:07:50 2016-12-27 19:02:22 xq.kill1234.com 118.193.139.184

botnet.1.proxy

botnet.1.proxy 是一个代理网络。这个网络不是由botnet.0.spreader直接创建，而是通过 botnet.-1.mirai 间接建立的。我们观察到以上建立过程发生在 2017.05.05-2017.05.17 之间

这个建立关系可以从以下样本之间的关系示意：

 * botnet.0.spreader 在投递一组特殊的 mirai 样本，建立botnet.-1.mirai
 * botnet.-1.mirai 除了运行mirai自身的行为，还会下载得到 do.arm 系列样本
 * do.arm 系列样本运行起来以后，会在本机建立socks proxy，并将所生成的随机密码发回给 211.23.167.180:9999
 * 至此，以 211.23.167.180:9999 为核心的 botnet.2.proxy 就建立起来了。

为了确认上述proxy 网络会被利用，我们模拟了一个 bot 向 botnet.2.proxy C2 提供了一个密码。之后，botnet.2.proxy 向我们模拟的 bot 发出测试请求，要求利用 proxy 获取www.baidu.com 网页。

图中显示，botnet.2.proxy 执行的动作包括：

 * 提供了用户名： 固定为admin
 * 提供了口令：???????? 。这个口令是我们之前随机生成、并提供给 botnet.2.proxy 的。这里口令做了掩码处理，以减少我们工作IP的暴露风险
 * 要求访问 http://www.baidu.com
 * 在得到了回应的页面后， botnet.2.proxy 沉寂不再与我们控制的bot联系。

botnet.2.rat 一个RAT僵尸网络

botnet.2.rat 在 Cyphort 的文档中已经批露，概要信息如下：

 * 是由 botnet.0.spreader 直接建立的
 * 投递样本 sha256sum: e6fc79a24d40aea81afdc7886a05f008385661a518422b22873d34496c3fb36b
 * 样本中包含C2 pc.5b6b7b.info

上述情况与我们的观察一致。

botnet.3.miner 一个挖矿网络

我们观察到的botbet.3.miner 的特征包括：

 * MinerPool：pool.minexmr.com:5555
 * WalletID：47Tscy1QuJn1fxHiBRjWFtgHmvqkW71YZCQL33LeunfH4rsGEHx5UGTPdfXNJtMMATMz8bmaykGVuDFGWP3KyufBSdzxBb2 --> Total Paid: 2000+ xmr45bbP2muiJHD8Fd5tZyPAfC2RsajyEcsRVVMZ7Tm5qJjdTMprexz6yQ5DVQ1BbmjkMYm9nMid2QSbiGLvvfau7At5V18FzQ --> Total Paid: 6000+ xmr
 * MinerPoolPass：x

在火绒实验室的文档里提及了挖矿僵尸网络，但是未给出特征细节，无法判定是否 botnet.0 仅推广了一个挖矿网络。

botnet.4.rat 另一个RAT僵尸网络

botnet.4.rat 没有被其他安全厂商批露过。概要信息如下：

 * 下载链接：http://104.37.245.82:8888/nb.dat
 * 样本中包含C2 nb.ruisgood.ru


近况

2018.1.17 开始，针对 1433 端口的扫描流量有明显的下降趋势，从我们对此 Botnet 的跟踪来看，此前支撑该 Botnet 的主要 C2 之一 67.229.144.218 停止服务。随后，2018.1.23 凌晨我们发现一个新的 C2 IP 上线： 67.229.99.82。

另外，我们发现该团伙还在陆续更新 Botnet 后面其他的基础设施

 * 新的样本下载 FTP 服务器 ftp://ftp.ftp0118.info/，口令 test:1433 ；
 * 新的样本&云端配置文件服务器 down.down0116.info；
 * 新的新浪博客账号以及 3 篇新的新浪博客 Post。

在 2018.1.17~2018.1.21 这段时间，针对 1433 端口的扫描流量有一个明显的波谷，我们怀疑这与该团伙的基础设施变动有直接关系：


友商披露情况

已经有多家友商披露了 MyKings 的部分内容，按照我们观察到的报告时间顺序分别是

 * GReAt, Kaspersky, New(ish) Mirai Spreader Poses New Risks, 2017.02
 * Cyphort, EternalBlue Exploit Actively Used to Deliver Remote Access Trojans, 2017.05
 * 东巽科技：Mirai木马“借道”新浪博客攻击windows服务器, 2017.07
 * 火绒实验室：彻底曝光黑客“隐匿者” 目前作最多的网络攻击团伙 2017.07
 * 360安全卫士：悄然崛起的挖矿机僵尸网络：打服务器挖价值百万门罗币 2017.9


特别致谢

在整个事件处置过程中，我们得到了来自新浪安全团队(sec.sina.com.cn)的帮助，获得了原始访问数据，并联合关闭了该僵尸网络的上联通道，特此感谢。


详细技术分析

该 Botnet 相关的主要样本详细分析和具体样本相关的 IoC，可以查看以下两份详细技术分析文档：

 * Mykings-botnet.0 详细分析.pdf
 * Mykings-botnet.o__ups.rar 详细分析.pdf


IoC

Botnet.0.spreader Configuration
hxxp://down.mykings.pw:8888/my1.html
hxxp://down.mykings.pw:8888/ups.rar
hxxp://down.mykings.pw:8888/item.dat
hxxp://up.mykings.pw:8888/ver.txt
hxxp://up.mykings.pw:8888/ups.rar
hxxp://up.mykings.pw:8888/update.txt
hxxp://up.mykings.pw:8888/wpdmd5.txt
hxxp://up.mykings.pw:8888/wpd.dat
hxxp://down.f4321y.com:8888/kill.html
hxxp://down.f4321y.com:8888/test.html
hxxp://down.f4321y.com:8888/ups.rar
hxxp://down.f4321y.com
hxxp://down.f4321y.com:8888/my1.html
hxxp://js.f4321y.com:280/v.sct
hxxp://up.f4321y.com
hxxp://up.f4321y.com:8888/ver.txt
hxxp://up.f4321y.com:8888/ups.rar
hxxp://up.f4321y.com:8888/update.txt
hxxp://up.f4321y.com:8888/wpdmd5.txt
hxxp://up.f4321y.com:8888/wpd.dat
hxxp://up.f4321y.com:8888/ups.rar
hxxp://down.b591.com:8888/ups.exe
hxxp://down.b591.com:8888/ups.rar
hxxp://down.b591.com:8888/test.html
hxxp://down.b591.com:8888/ups.rar
hxxp://down.b591.com:8888/ups.exe
hxxp://down.b591.com:8888/cab.rar
hxxp://down.b591.com:8888/cacls.rar
hxxp://down.b591.com:8888/kill.html
hxxp://down2.b591.com:8888/ups.rar
hxxp://down2.b591.com:8888/wpd.dat
hxxp://down2.b591.com:8888/wpdmd5.txt
hxxp://down2.b591.com:8888/ver.txt
hxxp://dwon.kill1234.com:280/cao.exe
hxxps://down2.b5w91.com:8443
hxxp://down.mysking.info:8888/ok.txt
hxxp://23.27.127.254:8888/close.bat
hxxp://js.mykings.top:280/v.sct
hxxp://js.mykings.top:280/helloworld.msi
hxxp://wmi.mykings.top:8888/kill.html
hxxp://wmi.mykings.top:8888/test.html
hxxp://209.58.186.145:8888/close2.bat
hxxp://67.229.144.218:8888/update.txt
hxxp://67.229.144.218:8888/ps.jpg
hxxp://67.229.144.218:8888/update.txt
hxxp://67.229.144.218:8888/my1.html
hxxp://67.229.144.218:8888/ver.txt
hxxp://67.229.144.218:8888/test.dat
hxxp://down.down0116.info --> new
hxxp://down.down0116.info/up.rar --> new
hxxp://down.down0116.info/down.txt --> new
fxp://ftp.ftp0118.info/a.exe --> new

botnet.-1.mirai
hxxp://100.43.155.171:280/mirai/

botnet.1.proxy
hxxp://100.43.155.171:280/do/

botnet.2.rat
hxxp://67.229.144.218:8888/test1.dat
hxxp://47.88.216.68:8888/test.dat
hxxp://47.52.0.176:8888/item.dat
hxxp://118.190.50.141:8888/test.dat

botnet.3.miner
hxxp://104.37.245.82:8888/32.rar
fxp://fxp.oo000oo.me/s.rar
hxxp://198.148.80.194:8888/0121.rar --> new
fxp://ftp.ftp0118.info/s.rar --> new

botnet.4.rat
hxxp://104.37.245.82:8888/nb.dat