MyKings: 一个大规模多重僵尸网络
作者:360网络安全研究院
MyKings 是一个由多个子僵尸网络构成的多重僵尸网络,2017 年 4 月底以来,该僵尸网络一直积极地扫描互联网上 1433 及其他多个端口,并在渗透进入受害者主机后传播包括 DDoS、Proxy、RAT、Miner 在内的多种不同用途的恶意代码。360网络安全研究院将其命名为 MyKings,原因之一来自该僵尸网络的一个主控域名 *.mykings[.]pw。
MyKings 并不是一个新的僵尸网络,在360网络安全研究院之前有若干对该僵尸网络组件的分析(详见 <友商披露情况> 一节),但在本次批露之前,各家分析都没有形成完整的拼图,也未见有效行动遏制该僵尸网络的扩散。
2017 年 5 月 23 日,360网络安全研究院第一次联系到新浪安全团队,并随后采取了多轮联合行动。新浪安全团队关闭了 MyKings 的上联 URL,并向360网络安全研究院提供了相关的访问日志。联合行动有效遏制了该僵尸网络的扩散,也希望能为后续其他联合行动扫清障碍。被关闭的这些上联 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
图1
Mykings 本身模块化,构成很复杂, 本 Blog 是个概述,具体技术分析的内容见文末的 2 份 PDF 文档。
MyKings 的感染范围和流行程度
统计 2017 年 5 月底前述被关闭的上联 URL 的访问来源 IP 数可知,独立来源 IP 总数 1,183,911 个,分布在遍布全球 198 个国家和地区。其中来源 IP 超过 100,000 的国家和地区有四个,分别是俄罗斯、印度、巴西和中国。
图2
图3
另外,在域名流行程度方面,最为流行的域名是 up.f4321y.com :
· 该域名DNS被请求频率超过 2.5m/每日
· 该域名流行程度排行,历史最高 79753 名,目前稳定在8万~9万之间。
图4
MyKings的组成
MyKings 是一组多个子僵尸网络的混合体,其简要结构如下图所示。
图5
Mykings 详细的构建过程与结构图如下所示:
图6
如上两图:
· 攻击者使用 Scanner(msinfo.exe) 扫描渗透进入受害者主机后,会自动尝试下载恶意代码。下载 URL 中的IP 部分被编码在受控的 Blog 页面中;
· Blog 页面中编码的 IP 地址是指向 Dropper(ups.rar) 的,这个配置项可以由攻击者在云端动态调整;部分 Blog 页面已经被前述联合行动关闭;
· Dropper 服务器上提供了恶意代码和对应的启动脚本的下载,这些内容同样可以由攻击者在云端动态调整;
· 360网络安全研究院观察到所下载的恶意代码有 Mirai, Proxy,RAT 和 Miner。
明确上述结构以后,使得360网络安全研究院可以将整个 MyKings 划分为多个子僵尸网络,并逐一标记各子僵尸网络的特征如下表:
图7
各子僵尸网络相互之间的构建关系如下表所示:
图8
从上述两个表中360网络安全研究院可以得出以下结论:
· botnet.-1/1/2/3/4 各自拥有独立的上联控制端,仅在构建过程中需要 botnet.0 支撑,构建完成后的运营阶段可以各自独立、不再相互依赖;
· botnet.0 支撑了多数其他子僵尸网络的构建过程。再考虑到360网络安全研究院在 botnet.0 的所有代码中没有看到其他任何恶意行为,360网络安全研究院倾向认为 botnet.0 是一个专注做恶意代码推广的网络 。
· botnet.1.proxy 的推广者不是 botnet.0,而是 botnet.-1,这是个例外。不过,上述推广行为仅在早期持续了很少一段时间,主要的恶意代码推广仍然由 botnet.0 完成。
MyKings.botnet.0.spreader
botnet.0 是居于核心地位的一个僵尸网络,除了传播其他僵尸网络以外,该僵尸网络并没有其他恶意行为,聚焦在扫描资源建设和建立后续其他僵尸网络上。该僵尸网络有以下特点:
· 服务器基础设施规模庞大
· 积极改进感染代码和能力
· 向后继僵尸网络的投入提供了定义良好的编程接口
botnet.0 的基础设施能力
botnet.0 拥有在几个小时动员 2400 个主机IP地址发起扫描的能力。如果360网络安全研究院假定每个主机 IP 地址需要 30
元人民币(5美元),这就意味着botnet.0一次性投入了超过7万元人民币(12,000美元)。
基于如此强大的服务器基础设施,当前 botnet.0 贡献了整个互联网范围内 1433 端口扫描的主要部分。而全部 1433 端口上的扫描,根据360网络安全研究院的 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个
360网络安全研究院检测到上述主机集中发起扫描的时间在 2017.04.25 08:00:00 附近,当时在 scan.netlab.360.com 上能看到的 1433 端口的扫描情况如下。
图9
可以观察到当天上午8:00开始,1433端口上的扫描有了一个巨大的暴增。暴增前每日扫描事件约为5m/d,之后突增到30~40m/d。
观察这些活跃IP在C类段(/24)中的排名,前100的C类段中有99个来自前述两个B类段。考虑到这些IP地址段行为规律一致、时间窗口集中,360网络安全研究院将这些IP地址归入 MyKings 的资源池。
图10
botnet.0 的扫描和渗透能力
botnet.0 的扫描行为是由于其 msinfo.exe 进程发起的。该进程会拉取云端的 wpd.dat 配置文件,配合云端机制发起扫描,并且随着版本更迭不断改进自身扫描能力。
· 扫描的端口和服务如下:
o 1433 MSSQL
o 3306 MySQL
o 135 WMI
o 22 SSH
o 445 IPC
o 23 Telnet, mirai 僵尸网络
o 80 Web, CCTV设备
o 3389 RDP, Windows远程桌面
· 扫描目标IP地址:生成机制越来越复杂
o 早期版本中, msinfo.exe 用来扫描的目标 IP 只有两种:从云端配置文件 wpd.dat 获取、在本地根据外网出口 IP 随机生成;
o 最新样本中,增加了一种更复杂的本地随机生成算法,并且会避开一批保留地址段。
· 扫描方式:不断演化,直至集成 Masscan
o 早期版本中,支持 TCP Connect 和 TCP SYN 两种扫描方式,分别对应木马中实现的两个扫描模块;
o 早期版本的 msinfo.exe 中,两种扫描方式都是自己编写的,其中 TCP Connect 模块用到了The Ultimate TCP/IP 函数库中的 CUT_WSClient 类,而 TCP SYN 扫描模块则用到了 RAW Socket 相关的 DLL 文件并自己手动构造数据包;
o 最新样本中,在 TCP SYN 模块集成了知名全网端口扫描器 Masscan ,并且把目标 IP 配置成 0.0.0.0/0 ,发起对全网的高速扫描。
· 扫描载荷
o 弱口令字典比较丰富,近百条是针对 Telnet 和 MSSQL Server;
o 获得服务权限后,进行进一步攻击入侵的 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
360网络安全研究院使用序号来标记首次发现的顺序、后缀标识给子僵尸网络的用途。
botnet.-1.mirai
cnc.f321y.com (123.51.208.155:23) 是一个 mirai 僵尸网络,它与 MyKings 的同源关系在卡巴斯基的早期文章中已经论证。
360网络安全研究院追溯到该C2发出的第一条攻击指令,是在2016-12-20发出的。
· 图11
· 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 间接建立的。360网络安全研究院观察到以上建立过程发生在 2017.05.05-2017.05.17 之间
这个建立关系可以从以下样本之间的关系示意:
· 图12
· 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 网络会被利用,360网络安全研究院模拟了一个 bot 向 botnet.2.proxy C2 提供了一个密码。之后,botnet.2.proxy 向360网络安全研究院模拟的 bot 发出测试请求,要求利用 proxy 获取www.baidu.com 网页。
图13
图中显示,botnet.2.proxy 执行的动作包括:
· 提供了用户名: 固定为admin
· 提供了口令:???????? 。这个口令是360网络安全研究院之前随机生成、并提供给 botnet.2.proxy 的。这里口令做了掩码处理,以减少360网络安全研究院工作IP的暴露风险
· 要求访问 http://www.baidu.com
· 在得到了回应的页面后, botnet.2.proxy 沉寂不再与360网络安全研究院控制的bot联系。
botnet.2.rat 一个RAT僵尸网络
botnet.2.rat 在 Cyphort 的文档中已经批露,概要信息如下:
· 是由 botnet.0.spreader 直接建立的
· 投递样本 sha256sum: e6fc79a24d40aea81afdc7886a05f008385661a518422b22873d34496c3fb36b
· 样本中包含C2 pc.5b6b7b.info
上述情况与360网络安全研究院的观察一致。
botnet.3.miner 一个挖矿网络
360网络安全研究院观察到的botbet.3.miner 的特征包括:
· MinerPool:pool.minexmr.com:5555
· WalletID:
1. 47Tscy1QuJn1fxHiBRjWFtgHmvqkW71YZCQL33LeunfH4rsGEHx5UGTPdfXNJtMMATMz8bmaykGVuDFGWP3KyufBSdzxBb2 –> Total Paid: 2000+ xmr
2. 45bbP2muiJHD8Fd5tZyPAfC2RsajyEcsRVVMZ7Tm5qJjdTMprexz6yQ5DVQ1BbmjkMYm9nMid2QSbiGLvvfau7At5V18FzQ –> Total Paid: 6000+ xmr
· &n