返回 TI 主页

概述

近期我们注意到一个新兴的DDoS僵尸网络,该家族移植了部分Mirai代码,但是修改了上线方式与载荷结构,同时加入了OpenNIC域名作为C2。根据初始版本的C2字符串特征,我们将此家族称为CatDDoS 。

CatDDoS处在“创业初期”阶段,活跃度并不稳定,其每天的指令从几百到几千不等。不过自9月份发布了最新“2.0.4”版本,利用多个 N-Day 漏洞发起了新一轮传播,攻击指令数量随之也出现了一轮暴增,单日指令数超过 6000 条:

根据我们的威胁监控系统统计,CatDDoS 近期传播趋势如下:

下文将对CatDDoS僵尸网络的样本关键细节、传播手段和版本演进深入分析。


上线请求

CatDDoS上线阶段分为明文和密文两部分.明文部分首先发送字节流”\x00\x00\x00\x04”,这种上线头来源Mirai家族,而其中第四个字节原本用来标识Bot版本,但是CatDDoS自定义了版本部分,并和Bot架构一起追加发送,至此明文部分结束。

密文部分由CPU数量、内存大小、上线参数三部分构成,加密算法同样本静态字符串的加密方式一致,使用相同Key和nonce的chacha20算法。


攻击指令结构

在攻击指令结构方面,在Mirai的载荷结构基础上交换了攻击向量与攻击持续时间字段的位置,且攻击持续时间的字段长度缩短为2字节。以下是我们捕获到的真实攻击指令:

上图的攻击指令表示对目标IP(203.107.xx.140/32)发起“flood_tcp_bypass”类型的ddos攻击,单次攻击时长为30秒。在可选字段中,7号可选字段比较关键,其对应的是攻击目标端口号,这里的7号字段为“\x38\x30”也就是字符串“80”。

在9月6日,我们捕获到CatDDos对twitter的网站发起了多次“flood_tcp_ack”类型攻击:


字符串解密

CatDDoS的字符串使用了chacha20算法(一种流加密算法)进行加密,样本在运行的初始化阶段,使用以下结构体进行解密后的存储:

在使用时仅需提供索引号即找到对应的字符串,如下是在进行C2域名选择时,使用3号与4号字符串,对应的明文如下:

为了方便进行分析,我们使用IDA-Python实现了对应的解密代码,解密效果:

代码如下:

 import idc
 import idaapi
 import ida\_hexrays
 from Crypto\.Cipher import ChaCha20
 def get\_all\_cfunc\(eas\):
     ref = \{\}
     for ea in eas:
         cfunc = idaapi\.decompile\(ea\)
         if cfunc and hex\(cfunc\.entry\_ea\) not in ref:
             ref\[hex\(cfunc\.entry\_ea\)\] = cfunc\.body\.cblock
     return ref\.keys\(\), ref\.values\(\)
 def find\_obj\_ea\(arg\):
     arg = arg\.x
     tp = arg\.op\_to\_typename\[arg\.op\]
     if tp == "obj":
         return arg\.obj\_ea
     elif tp == "cast" or tp == "ref":
         return find\_obj\_ea\(arg\)
 def parse\_arg\(block\):
     if hasattr\(block, "operands"\):
         if "a" in block\.operands:
             for arg in block\.operands\["a"\]:
                 tp = arg\.op\_to\_typename\[arg\.op\]
                 if tp == "num":
                     yield \{"type": tp, "value": arg\.numval\(\)\}
                 elif tp == "cast" or tp == "ref":
                     yield \{"type": tp, "value": find\_obj\_ea\(arg\)\}
                 else:
                     yield \{"type": tp, "value": arg\.operands\}
 def parse\_expr\(expr\):
     if expr\.op\_to\_typename\[expr\.op\] == "call":
         if expr\.ea in eas:
             call\_info\[hex\(expr\.ea\)\] = \[\]
             for arg in parse\_arg\(expr\):
                 call\_info\[hex\(expr\.ea\)\]\.append\(arg\)
     else:
         for operands in expr\.operands\.values\(\):
             if type\(operands\) is ida\_hexrays\.cexpr\_t:
                 parse\_expr\(operands\)
 xor\_add\_func = 0x000000000403020
 key = 0x000000000051C0A0
 nonce = 0x000000000051C0C0
 call\_info = \{\}
 key = idc\.GetManyBytes\(key, 32\)
 nonce = idc\.GetManyBytes\(nonce, 12\)
 eas = list\(CodeRefsTo\(xor\_add\_func, False\)\)
 xrefs, cfunc = get\_all\_cfunc\(eas\)
 print\("found %s xrefs: %s" % \(len\(xrefs\), list\(xrefs\)\)\)
 for cblock in cfunc:
     for cinsn in cblock:
         op = cinsn\.details
         if issubclass\(type\(op\), ida\_hexrays\.ceinsn\_t\) and type\(op\.expr\) is ida\_hexrays\.cexpr\_t:
             parse\_expr\(op\.expr\)
         elif type\(op\) is ida\_hexrays\.cexpr\_t:
             parse\_expr\(op\)
 for k in call\_info\.keys\(\):
     if call\_info\[k\]\[0\]\["type"\] == "num" and call\_info\[k\]\[1\]\["type"\] in \["cast", "ref"\] and call\_info\[k\]\[2\]\["type"\] == "num":
         ciphertext = idc\.GetManyBytes\(call\_info\[k\]\[1\]\["value"\], call\_info\[k\]\[2\]\["value"\]\)
         cipher = ChaCha20\.new\(key=key, nonce=nonce\)
         cipher\.seek\(64\)
         text = cipher\.decrypt\(ciphertext\)
         print\("\[%s\]: %s" % \(call\_info\[k\]\[0\]\["value"\], text\)\)
     else:
         print\("%s未知参数,解析失败:%s" % \(k, call\_info\[k\]\)\) 

其他

CatDDoS团队似乎对猫情有独钟,其不仅C2域名以CatDDoS命名,在样本的加密字符串中,还留下了“meow”字眼。

鉴于这些CatDDoS僵尸网络的特征,我们认为它与 Fodcha家族有一定相似。

当然,上图只是鉴于这两个家族特征相似的一个玩笑图,目前并没有证据表明CatDDoS和fodcha是同个团伙。


传播手段

CatDDoS的传播模块并未集成在Bot样本中,所使用扫描器具有“python-requests”与“python-aiohttp”的user_agent,我们推测其基于Python语言编写。主要通过N-Day漏洞传播,用到的漏洞有以下几个:

ExifTool 任意代码执行漏洞(CVE-2021-22205)

Linksys路由器远程命令执行漏洞

Hadoop未授权命令执行漏洞

CatDDoS在9月份发布了“2.0.4”版本,利用这些漏洞大肆传播,从传播趋势和攻击指令数量来看,CatDDoS可能进入了一个新的比较成熟的阶段。


版本演进

我们追溯到的早起CatDDoS的版本号是从“2.0.0”开始,目前的最新版本为“2.0.4”,相比初始版本主要在C2的选择、攻击向量方面进行了改动。

在早期的版本“2.0.0”中,样本对于C2的选择分为两种模式,包括硬编码的IP地址与OpenNIC域名。

而“2.0.4”版本仅保留了一个OpenNIC域名作为C2

在“2.0.4”版本中,版本号后还连着“socks5”字符串,实际上表示的是在此版本新增加了针对socks5服务的DDoS 攻击模式。与初始版本对比,此版本新增了两种攻击模式,攻击向量从14个提升到了16个。


总结

CatDDoS目前虽位于起步初期,但从攻击指令数量来看并不像一个刚入行的初学者,样本的加密手法、C2服务器的设置都较为老道,其团队可能在此前就有较稳定的DDoS 业务,目前该家族正在持续升级与扩张,后续我们也将继续进行监控。


IOC

扫描源(Loader)

45.89.127.173

193.34.212.110

194.180.48.50

Download Server

194.153.216.164:80

62.113.113.168:80

C2

catddos.pirate

i-like-dicks.pirate

chinks-eat-dogs.africa

139.177.196.154:35342

212.118.43.167:35342

77.105.138.202:35342

84.54.47.93:35342

88.218.62.22:35342

Md5

v2.0.0

2ab78374d7ab2fb3c5dddcbe6d714856

V2.0.4

2ab78374d7ab2fb3c5dddcbe6d714856

0f434c3b72e275d05ab302c40469e018

僵尸网络 CATDDOS