那些年我们一起追过的僵尸网络之Moobot

The Gafgyt variant vbot seen in its 31 campaigns
July 6, 2020
An Update for a Very Active DDos Botnet: Moobot
July 9, 2020

那些年我们一起追过的僵尸网络之Moobot

概述

Moobot是一个基于Mirai开发的僵尸网络,我们最早发现其活动在2019年7月,这里有一篇我们关于Moobot的文章,感兴趣的读者可以去阅读[0]。 2019年8月起我们开始对其进行跟踪,在这将近一年的时间其样本更新、DDoS攻击等活动从未间断过。其最近参加了一次我们不方便透露的重大DDoS攻击活动,又一次成功引起了我们的注意。所以决定来扒一扒它的前世今生。

样本传播

Moobot样本主要通过Telnet弱口令和利用nday,0day[1][2]漏洞传播,我们观察到的Moobot利用的漏洞如下:

VulnerabilityAffected Aevice
HiSilicon DVR/NVR BackdoorFirmware for Xiaongmai-based DVRs, NVRs and IP cameras
CVE-2020-8515DrayTek Vigor router
JAWS Webserver unauthenticated shell command executionMVPower DVR
LILIN DVRLILIN DVRs
GPON Router RCENetlink GPON Router 1.0.11
TVT OEM API RCETVT Digital Technology Co. Ltd & OEM {DVR/NVR/IPC} API RCE
ThinkPHP 5.0.23/5.1.31 RCE
Android Debug Bridge Remote Payload Execution
AVTECH Devices Multiple VulnerabilitiesAVTECH IP Camera / NVR / DVR Devices
CVE-2017-17215Huawei Router HG532
Netcore Router Udp 53413 BackdoorNetcore Router
CVE-2014-8361Devices using the Realtek SDK
CVE_2020_5722Grandstream UCM6202
CVE-2017-8225The Wireless IP Camera (P2P) WIFICAM
DVRIP backdoor

样本分析

在之前的文章中介绍了Moobot的诸多变种,我们认为其作者相较与简单的改改C2,更倾向开发使用新的技术。Moobot的作者在样本二进制层面&网络流量层面做了许多尝试,一般样本都会采用下述方法中的多种组合,来和安全研究人员进行对抗。

  • 使用DNS TXT存储C2/手动构建DNS TXT请求
  • 使用新的UPX幻数进行加壳
  • 使用码表替换的加密方法的隐藏敏感资源
  • 使用SOCKS PROXY,TOR PROXY

但是在2020年1月起活跃至今的名为Moobot_xor的变种中,情况出现了变化。Moobot_xor是Moobot大家族中少见的只是修改了上线协议的变种,或许是因为Moobot的作者在长达1年的运营中,发现只需要做这样简单的修改,再加上不停的更换C2,就能达到非常好的收益,没必要再投入新技术的研究了。

样本信息

MD5:98c8326b28163fdaeeb0b056f940ed72
ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, stripped
Packer:None
Lib:uclibc
Verdict: Moobot_xor

Mirai已经是安全社区非常熟悉的老朋友了,而Moobot_xor与Mirai很接近,因此下文只从加密方法以及通信协议俩个方面介绍Moobot_xor,别的方面就不再细述。了解加密方法可以提取bot的配制信息,了解通信 协议可以跟踪C2以获取最新的攻击指令,希望这些内容能帮助社区更好的打击Moobot家族。

加密方法

Moobot_xor采用Mirai经典的Xor加解密方法,key为0DEADBEEFh,

用这个key的加解密的效果等效于和0x22(0xDE ^ 0xAD ^ 0xBE ^ 0xEF == 0x22)做异或运算。在Mirai泄露的源码中,我们可以看到加密工具enc.c关于string类型的加密实现是这样的

void *x(void *_buf, int len)
{
    unsigned char *buf = (char *)_buf, *out = malloc(len);
    int i;
    uint8_t k1 = table_key & 0xff,
            k2 = (table_key >> 8) & 0xff,
            k3 = (table_key >> 16) & 0xff,
            k4 = (table_key >> 24) & 0xff;

    for (i = 0; i < len; i++)
    {
        char tmp = buf[i] ^ k1;

        tmp ^= k2;
        tmp ^= k3;
        tmp ^= k4;

        out[i] = tmp;
    }

    return out;
}
if (strcmp(args[1], "string") == 0)
    {
        data = args[2];
        len = strlen(args[2]) + 1;
    }
    data = x(data, len);

可以看出string类型的结束标志x00将和key进行xor动算,因此这种加密方法产生密文的最后一个字节就是加密的key。

这个特性可以帮助我们快速地得到key,进而解密。

every byte xor 0x22
-----------------------------------------------------------------
ciphertext
52 43 50 49 0C 41 5B 40 47 50 4B 57 4F 0C 41 41 22

plaintext
park.cyberium.cc

另外yara支持xor关键字,如果我们按下面的方式写规则,那么无论key如何变化都能匹配到”some string”字串,非常适合用于检查使用了mirai原生加密方式的malware。

rule testxor
{
    strings:
    $test1="some string" xor
    $test2=.....
    condition:
    all of them
}

通信协议

Mobot_xor在Mirai通信协议的基础上做了微小的修改,下文将从上线,心跳,功击指令等方面介绍其具体的变化。

  • 上线包
msg parsing
----------------------------------------------------------------
33 66 99 					-----> hardcoded magic
06							-----> group string length
67 6c 61 69 76 65			-----> group string,here it is "glaive"
  • 心跳包
msg parsing
----------------------------------------------------------------
00 00 					-----> hardcoded msg from bot
00 00					-----> hardcoded msg from c2	
  • 攻击指令包

msg parsing
----------------------------------------------------------------
similar to mirai

01 						-----> number of targets

	77 a7 B5 CB 20		----->target/mask, 119.167.181.203/32

02						-----> number of flags

	00					-----> flag type
	02					-----> flag length
	32 30				-----> flag data
	
	
	07					-----> flag type
	02					-----> flag length
	38 30				-----> flag data
	
	

Moobot DDoS活动

自从我们开始跟踪Moobot,其攻击活动从未停止过。根据我们的观察,其日活C2始终保持个位数,但是C2存活时间较长。攻击目标遍布全球,每日攻击目标100个左右。

Moobot的攻击目标

Moobot的每日攻击目标趋势如下图所示:

从上图可以看出Moobot的DDoS攻击活动在2020年3月末至2020年5月初出现明显的异常点,Moobot的日攻击目标从平常的几百暴增到将近2万。经过分析我们发现Moobot攻击目标暴增是因为在这段期间Moobot攻击了大约48k左右的巴西的IP。我们不清楚Moobot盯着巴西往死里打打奇怪攻击行为的目的是什么。去除地理位置在巴西的攻击目标。Moobot的日活攻击目标如下,每天100左右的攻击目标:

Moobot攻击目标地理位置分布

Moobot的攻击目标遍布全球,被攻击的目标主要分布在中国,美国,德国,俄罗斯等地。其攻击目标地理位置分布如下:

Moobot攻击受影响的域名

通过我们的PDNS数据反查被Moobot攻击的IP,发现至少3k以上的域名被影响,之前我们也观察到Moobot攻击了很多流行站点/重要服务。包括DNS ROOT,Twitter, Facebook, Pornhub, Wikimedia, Twitch, World of Warcraft Server, Google,Baidu, Alibaba,Krebs on Security等。当时据一名为UKDrillas的黑客或客户组织称攻击这些流行站点的目的是为了测试该Botnet的攻击效果。部分Moobot攻击目标对应的域名如下图所示:

IOC

C2

190.115.18.238  AS262254|DANCOM_LTD                             Russian_Federation|Moscow|Unknown
31.13.195.56    AS34224|Neterra_Ltd.                            Bulgaria|Sofia|Unknown
37.49.226.216   AS208666|Estro_Web_Services_Private_Limited     Netherlands|Overijssel|Enschede
45.95.168.90    AS42864|Giganet_Internet_Szolgaltato_Kft        Hungary|Szabolcs-Szatmar-Bereg_County|Nyiregyhaza
abcdefg.elrooted.com
audi.n1gger.com
botnetisharam.com
cykablyat.raiseyourdongers.pw
dbkjbueuvmf5hh7z.onion
frsaxhta.elrooted.com
gcc.cyberium.cc
n1gger.com
nd3rwzslqhxibkl7.onion
nlocalhost.wordtheminer.com
park.cyberium.cc
park.elrooted.com
proxy.2u0apcm6ylhdy7s.com
rr442myy7yz4.osrq.xyz
sisuugde7gzpef2d.onion
typicalniggerdayatthecoolaidparty.n1gger.com
wor.wordtheminer.com
zrqq.xyz
tbpsboy.com
News Reporter
News Reporter
Head of Operations (Banking), Director IT Governance, Teamlead Microsoft, Service Delivery Manager. Interested in Office 365, LAMP, IT Security and much more!