背景

360NETLAB于2019年12月首次披露了Mozi僵尸网络,到现在已有将近2年时间,在这段时间中,我们见证了它从一个小规模僵尸网络发展为巅峰时占据了极高比例IOT流量巨无霸的过程。

现在Mozi的作者已经被执法机关处置,其中我们也全程提供了技术协助,因此我们认为后续在相当长的一段时间内它都不会继续更新。但我们知道,Mozi采用了P2P网络结构,而P2P网络的一大“优点”是健壮性好, 即使部分节点瘫痪,整个网络仍然能工作。所以即使Mozi作者不再发布新的更新,它仍然会存活一段时间,残余的节点仍然会去感染其它存在漏洞的设备,所以我们现在仍然能看到Mozi在传播,正可谓“百足之虫,死而不僵”。

许多安全厂商都对Mozi进行了跟踪分析,但从我们的角度而言,或多或少有些遗漏,甚至有错误。今天我们将对Mozi的看法总结在下面这篇文章里,以补充安全社区的分析;同时也为我们对Mozi僵尸网络的持续关注画上一个句号。

本文将回答以下问题:

1:Mozi除Bot节点外还有别的功能节点吗?

2:Mozi Bot模块有新功能吗?

3:Mozi僵尸网络还在更新吗?

Mozi僵尸网络中除了Bot还有哪些功能节点?

众所周知,Mozi僵尸网络中的各个节点被Botnet Master下发的名为Config的配置文件驱动,执行具体任务。下图就是一个经典的Config文件,其中[ss]字段说明了节点的功能,此处即为Bot节点,主要功能是DDoS攻击。

令我们疑惑的是,在跟踪过程中,除了Bot节点的Config,还收到了下面这些形式的Config文件,这说明Mozi僵尸网络中还存在着名为sk,ftp,sns,ssh的节点。

[ss]sk[/ss][hp]88888888[/hp][count]http://ia.51.la/go1?id
[ss]ftp[/ss][hp]88888888[/hp][count]http://ia.51.la/go1?id
[ss]sns[/ss][hp]88888888[/hp][count]http://ia.51.la/go1?id
[ss]ssh[/ss][hp]88888888[/hp]

那他们到底是什么呢?这一直困扰着我们,幸运的是,时间给了我们答案。

0x1:FTP节点

2020年1月20日,一个名为"photo.scr"的Windows PE文件(a9d4007c9419a6e8d55805b8f8f52de0)产生的网络流量命中了我们的Mozi特征。一开始我们以为这是一个误报,但经过分析之后,我们确定这正是我们心心念念的Mozi ftp节点样本。为了区分Mozi僵尸网络中不同功能节点的样本,我们内部开始使用Mozi_"ss value"这种命名方式,因此这个样本被命名为Mozi_ftp。

简单来说,Mozi_ftp是一个pyinstaller打包的挖矿木马,通过FTP弱口令爆破实现蠕虫式传播,同时它也会加入Mozi的P2P网络中,等待执行Botnet Master下发的Config。钱包地址如下所示:

47BD6QNfkWf8ZMQSdqp2tY1AdG8ofsEPf4mcDp1YB4AX32hUjoLjuDaNrYzXk7cQcoPBzAuQrmQTgNgpo6XPqSBLCnfsjaV

其中名为back.jpg的模块负责加入Mozi网络以及拉取Config文件,它的基本信息如下所示:

Filename:back.jpg

MD5:4ae078dd5085e97d3605f20dc079412a

PE32 executable for MS Windows (DLL) (console) Intel 80386

Packer: upx

在脱壳后的样本中,可以很清楚的看到Mozi_ftp Config支持的的一些标签。

同Mozi_bot一样,Mozi_ftp也内嵌了一个加密的原始Config文件,通过XOR解密后如下所示:

同Mozi_bot一样,Mozi_ftp通过下面的代码片段对Config进行签名校验

其中用到的XOR密钥,以及2个public_key如下所示:

 xor key:4E 66 5A 8F 80 C8 AC 23 8D AC 47 06 D5 4F 6F 7E
------------------------------------------------------------------
xored publickey A 
	4C B3 8F 68 C1 26 70 EB 9D C1 68 4E D8 4B 7D 5F 
	69 5F 9D CA 8D E2 7D 63 FF AD 96 8D 18 8B 79 1B 
	38 31 9B 12 69 73 A9 2E B6 63 29 76 AC 2F 9E 94 A1	
after decryption: 
	02 d5 d5 e7 41 ee dc c8 10 6d 2f 48 0d 04 12 21 
	27 39 c7 45 0d 2a d1 40 72 01 d1 8b cd c4 16 65 
	76 57 c1 9d e9 bb 05 0d 3b cf 6e 70 79 60 f1 ea ef
-------------------------------------------------------------------
xored publickey B
	4C A6 FB CC F8 9B 12 1F 49 64 4D 2F 3C 17 D0 B8 
	E9 7D 24 24 F2 DD B1 47 E9 34 D2 C2 BF 07 AC 53 
	22 5F D8 92 FE ED 5F A3 C9 5B 6A 16 BE 84 40 77 88
after decryption:
	02 c0 a1 43 78 53 be 3c c4 c8 0a 29 e9 58 bf c6 
	a7 1b 7e ab 72 15 1d 64 64 98 95 c4 6a 48 c3 2d 
	6c 39 82 1d 7e 25 f3 80 44 f7 2d 10 6b cb 2f 09 c6

它们的值和Mozi_bot所使用的值相同,根据ECDSA384椭圆算法的特性,这说明Mozi_ftp和Mozi_bot使用的相同的私钥,排除私钥泄露的可能性,可以断定它们是出自同一个团伙。

在back.jpg中可以看出Mozi_ftp的Config支持以下基本标签:

[hp]
[cpu]
[cpux]
[ss]
[ssx]
[nd]

在ftpcrack.py的脚本中,有下的代码片段,

这说明Mozi_ftp还实现以下4个自有的特殊标签

[mdf]
[mdr]
[mud]
[mrn]

0x2:SSH节点

Mozi借用了51la平台来统计其自身规模,这是僵尸网络作者使用的统计工具,其精度和时间延迟远胜于外部探测。2020年9月,我们拿到了Mozi的后台统计数据,在上面,我们除了看到了Mozi_bot节点的统计数据外,还看到下图所示的一组不曾见过的上报入口。

2021年8月18附近,安全产商深信服,奇安信发布威胁预警,一个名为WorkMiner的挖矿木马正在通过SSH口令爆破传播,有P2P网络行为,这引起了我们的兴趣。经过分析,我们惊奇的发现这正是Mozi僵尸网络中的SSH节点,51la那组特别上报入口正是源自于它,依照旧例,我们将它称之为Mozi_ssh。

我们选取分析的样本基本信息如下所示:

Filename:work64
MD5:429258270068966813aa77efd5834a94
ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, stripped
Packer:upx

简单来说,Mozi_ssh是一个通过SSH弱口令爆破实现蠕虫式传播的挖矿木马,大约于2020年10月开始活动(基于样本在VT的时间,未必准确),钱包地址如下所示,可以看出Mozi_ssh和Mozi_ftp使用相同的钱包。

47BD6QNfkWf8ZMQSdqp2tY1AdG8ofsEPf4mcDp1YB4AX32hUjoLjuDaNrYzXk7cQcoPBzAuQrmQTgNgpo6XPqSBLCnfsjaV

Mozi_ssh是由GO代码和C代码混合编译而来。其中GO代码负责SSH相关的爆破传播,以及对Config的处理,C代码则负责处理加入Mozi P2P网络,拉取Config。

Mozi_ssh通过以下代码片段实现调用C代码(dht_task)加到P2P网络中。

函数dht_task的处理逻辑和Mozi_bot一样,内嵌的Config解密后如下所示:

和Mozi_ftp一样,用于解密的Config的XOR密钥,以及用于Config签名检验的2个public_key和Mozi_bot中所用的是一样的,这说明Mozi_ssh与Mozi_bot出自于同一个团伙。

在dht_task函数中,可以看到,Mozi_ssh的Config支持以下基本标签:

[hp]
[ver]
[cpu]
[ss]
[sv]
[nd]

对于通过检验后的Config,Mozi_ssh用通过函数main_deal_conf来处理,比如下面的代码片段就是在处理swan标签。相较于Mozi_bot,Mozi_ssh除了支持基本标签,还实现了许多自有的特殊标签。

newmozi_confbot

Mozi_ssh支持的自有的特殊标签如下所示:

[slan]
[swan]
[spl]
[sdf]
[sud]
[ssh]
[srn]
[sdr]
[scount]

0x3: 小结

Mozi_ftp,Mozi_ssh的发现,使得我们有明确的证据证明Mozi僵尸网络也在试图从挖矿中牟利。从bot,ftp,ssh这3种节点的样本上,可以看出其作者已经将"DHT+Config"这种模型作为一个基本模块来使用,通过复用这个模块,再为不同的功能节点设计不同的特殊标签命令,就能快速的开发出新功能节点所需的程序,十分方便,这种便利性是Mozi僵尸网络能快速膨胀的原因之一。

Mozi bot v2s有哪些变化?

在Mozi僵尸网络中,占比最高的就是mozi_bot的节点。2020年1月07日,我们捕获了版本号为v2s的bot样本(1bd4f62fdad18b0c140dce9ad750f6de),随后此版本活跃至今。这个版本引起过安全社区的大量关注,虽然许多安全产商对其都有过分析,但是我们发现依然有遗漏的部分,我们将从补缺这个角度出发,向社区分享我们的发现。

据统计,mozi v2s bot样本主要为ARM,MIPS俩个CPU架构,下文选取ARM架构的样本为分析对象,样本信息如下

MD5:b9e122860983d035a21f6984a92bfb22

ELF 32-bit LSB executable, ARM, version 1 (ARM), statically linked, stripped

Lib: uclibc

Packer:UPX

v2s的bot样本与我们最初分析的v2样本有非常多的变化,其中最直观的体现在Config支持的标签上,v2s新增加了2个标签[cnc],[hj],除此之外,新增外网地址获取,upnp端口映射等功能,下面将一一分析这些功能给Mozi_bot带来的变化, 其中[hj]标签的功能,微软于2021年8月19日发表过这方面的文章,读者可自行参阅。

0x1:[cnc] 标签

Mozi僵尸网络的"DHT+Config"这种设计固然有其便利性,但同时也产生了一个缺陷,全部Bot节点在同步Config时存在效率低下的问题,这会间接的导致DDoS的效率低下。为了解决这个问题,Mozi作者设计了[cnc]这个标签,对应新的DDoS攻击子任务。

整个子任务复用了Mirai的代码,通过[cnc]关键字指定C2,Bot节点通过Mirai协议和C2建立通信后,等待C2下发的指令进行DDos攻击。增加了这个子任务后,Mozi要进行攻击时,不再需要通过一次一次同步Config获取攻击目标,只需同步一次Config,得到指定的C2即可,极大的提高了Bot节点的攻击效率,对应的网络结构如下所示:

以下是获取C2:PORT的代码片段

以下是发送上线包的代码片段

以下是发送心跳的代码片段

以下是支持的攻击向量,一共有12种方法,编号11被写了2次,因此Mozi的Bot节点只支持11种攻击方法。

对Mirai熟悉的朋友看到此处想必会会心一笑,正是因为大量使用Mirai代码,这批Mozi样本被大量杀软产商标记为Mirai,我们推荐杀软产商根据子功能的名称编写查杀特征以正确的标识Mozi_bot样本。

0x2:外网地址获取

通过http://ipinfo.io/ip获取外网IP以便在在Telnet,Exploit的payload使用。

加入这个特性之后不会再有下面内网ip出现在传播payload的情况了。

0x3:upnp端口映射

当被感染的设备是通过NAT访问网络时,Mozi_bot通过监听端口在设备上开启的HTTP样本下载服务是无法被外网直接访问的,新版本的Mozi通过upnp的AddPortMapping在路由器上实现端口映射,以保证服务的正常访问。

0x4:小结

我们可以看出Mozi bot的这些更新都是为了提高效率:DDoS攻击的效率,传播感染的效率。弃用Gafgyt的攻击代码,转向更有效率的Mirai。通过[cnc]子任务,重构DDoS攻击功能,实现控制节点与业务节点的分离,极大的增加了Mozi的网络弹性,这种分离意味着僵尸网络的控制功能和实际业务解耦,使得Mozi的作者不仅可以自己进行DDos攻击,也能很方便的将整个网络租赁给别的团伙。

Mozi bots还在更新吗?

Mozi僵尸网络的样本已经在相当长一段时间内停止更新了,然而这并不意味着Mozi带来的威胁就此终止,由于其已经散布在互联网上的部分有着持续感染的能力,每天都会有新的设备被感染成为僵尸网络的一部分,也每天都会有设备因为升级或者离线从而脱离该僵尸网络的控制。总体我们预期其规模会以周为周期震荡下行,并在互联网上存活数年。既往已经有若干被各国执法机构终结的僵尸网络走上了这条道路,Mozi僵尸网络也已经一步一步走向它的坟墓

总结

Ftp,SSH结点的相继被发现,让我们对Mozi僵尸网络有了更深的认知。Mozi僵尸网络是一个混杂的,影响Windows,Linux,IOT 多平台的大型僵尸网络,通过TELNET,SSH,FTP弱口令爆破,以及Nday漏洞的方式实现蠕虫式扩张,它由不同类型的功能结点组成,现已知的节点有进行DDoS攻击的Bot节点,进行Miner的Ftp,SSH结点。网络结构的清楚,不代表掌握了它所有的细节,我们相信还有许多信息可以填充到Mozi僵尸网络这张图上,由于视野有限,目前只能向安全社区分享这么多。如果社区有相关的线索,欢迎与我们联系,让我们一起Make Cyber Security Great Again