起因
用户反馈服务器linux系统感染挖矿病毒,已通过人工方式清理了一部分,怕有残留,需要我们再检查一遍
由于感染服务器为业务服务器,为减少病毒对业务系统的影响,当务之急是先查找是否还有在运行中的病毒进程,以及对病毒的持久化进行排查。
进程排查
top
查看是否还有可疑的高资源消耗的程序,因为已确认是挖矿病毒,挖矿的特征就是高CPU占用,但并未发现异常
netstat
查看端口网络连接情况,未发现可疑网络连接,systemctl list-unit-files
查看系统服务也没有可疑服务
文件排查
查看root,home,/etc/init.d,/etc/systemd/system,/etc/rc.d/init.d
,/etc/profile.d等几个比较重要的目录,未发现异常文件
持久化排查
先检查系统的启动项和计划任务,到/etc/rc.d目录下看一下启动项,没发现什么问题,再检查计划任务ls /etc/cron*
看一下所有的计划任务脚本文件,发现cron.daily目录下存在xbash脚本文件,而这个文件的创建时间为04/21晚上6点(上机检查时间为04/21晚上八点),对xbash文件进行查看,注意到它会从自己的文件尾解压数据出来
把文件尾数据提取出来,明显是一个gz格式的压缩包
将gz文件解压后,得到一个名为cronman的脚本,代码足有近7000行
对cronman脚本进行沙箱加代码分析,对其功能大致分为以下几项:
1:清除日志文件
2:将smtphttp等服务配置到xinetd.d文件,以实现端口的转发,重定向至远程恶意C2服务器。
3:自身升级
4:对抗杀软及其他挖矿程序
5:修改SSH配置文件,降低系统安全性
6:开放防火墙端口
7:获取其他so模块
8:安装xinetd守护进程
9:创建/root/gcclib文件夹和spirit.sh脚本文件
10:创建计划任务,进行持久化
在脚本中发现一个可疑IP地址:5.133.65.53
,从该地址下载了多个文件,而该地址已经在相关威胁情报平台被标记为矿池,挖矿木马等
那接着就要对从该恶意IP地址下载来的几个so文件进行分析。
逆向分析
从cronman中,可疑看到它自5.133.65.53
下载了几个so文件并保存到/usr/local/lib/目录,之后把这几个so文件的路径写入了/etc/ld.so.preload文件,该文件是一个Linux执行环境预加载的配置文件,具体的信息可疑参加这篇文章linux ld.so.preload机制解析
但直接在/usr/local/lib/下执行ls
,ll
等命令是什么也没有的,但使用cp或cat等文件操作命令却都有返回,说明是有文件存在,但是被隐藏了。同样的在/etc/下ls也看不到ld.so.preload文件,但cat却能看到已经被修改的内容。把/usr/local/lib/打包后拷贝出来分析一下。
sshkit.so
通过hook掉readdir函数,过滤掉进程目录下的ssh文件,从而实现用户层隐藏ssh进程
sshpkit.so
隐藏sshpass进程。
skit.so
隐藏spirit进程
pkit.so
隐藏libgcc_a进程
fkit.so
隐藏多个文件及文件夹
分析完上述几个so文件后,预感到不妙,,这些被隐藏的文件也基本都在xbash中出现过,被隐藏的进程和文件应该都是恶意文件了,这也就是我前期排查没发现的原因吧。这几个so文件删除,恢复正常的ld.so.preload文件,再分析一下被隐藏的几个进程文件吧。
spirit.sh和sshpass都位于/usr/spirit/路径下,spirit.sh是由开源渗透测试工具修改而来。源项目地址:https://github.com/theaog/spirit
spirit.sh探测ip.txt内的活跃ip,之后调用sshpass进行ssh爆破。
sshpass是一个负责ssh爆破的程序
liggcc_a则位于root/gcclib目录下,是挖矿主程序。一看就知道是Xmrig的变种。还有很多的xmr字符串
截止到这一步差不多主要的恶意脚本和文件就分析完了,还有一些不是很紧要或功能重复的脚本就不展开讲了
自查方法
因为该版的程序会隐藏自身,所以查进程等方式是无法达到自查的目的的,以下是一些可以尝试的自查方法:
1.查看/etc/xinetd.d/配置文件,是否存在重定向至恶意服务器的配置,尤其是/etc/xinetd.d/smtp_forward
2。查看是否能cd进入root/gcclib,能进入再用cat看一下能否查看libgcc_a文件,能查看则代表存在
3.cat查看/etc/ld.so.preload,看是否有sshkit.so等项
4.排查目录/etc/lib是否存在adxintrin_b文件
5.排查目录/etc/init.d/是否存在modules及status
6.用cat查看是否存在usr/local/lib/sshpkit.so等文件
还有其他方式,就不一一赘述了,后文会提供cronman的Hash,感兴趣的可以下载后自己研究,
处理方案
处理其实就是把cronman等做的增改再删减回去,下面还是提供几个主要的删减方向:
1.preload清理
2.删除计划任务
3.进程清理
4.smtp_forward重定向取消
5.特定文件及文件夹清理
6./bashrc恢复
7.ssh配置文件还原
具体的脚本我放在了这里libgcc_a木马清理付费资源主要是怕被客户看到,理解一下,有需要的留言或者私信我可以免费发
IOC信息
IP及域名IOC:
5[.]133[.]65[.]53
5[.]133[.]65[.]54
5[.]133[.]65[.]55
5[.]133[.]65[.]56
45[.]67[.]229[.]147
94[.]131[.]13[.]32
185[.]65[.]105[.]35
45[.]142[.]212[.]30
185[.]74[.]222[.]72
77[.]247[.]243[.]43
randomx[.]xmrig[.]com
donate[.]ssl[.]xmrig[.]com
api[.]xmrig[.]com
donate[.]v2[.]xmrig[.]com
文件Hash
文件名 | Hash |
---|---|
libgcc_a | 721f883ecb7c6d1c3318aeeabbc57ed9 |
sshkitarm.so | B8C117DD3330C79761E7BA4E42C39B58 |
sshpkit.so | 4C13F207F9A3B7BB29AB48C41D56A20F |
sshpkitarm.so | E55590A300B6848CFADA4F69161AEC8F |
skit.so | 15E9CA6F6A4099EC718DCAB442C17770 |
fkit.so | EC125EAC1EF2A05C0A0A47B8296705AC |
pkit.so | 0DD164BDBE0943ABC139DC0D9943B787 |
sshkit.so | 8A81663A5E57FAA3E010021F336090A0 |
cronman | 5281FCABC35FCDE287BAA3E487066916 |
xbash | 2BC314DBBBEA1EC5A508E97BADF6644D |
spirit.sh | 6D0F54A3B97E7AE5DA898F73E32009BD |
sshpass | A84EF53884C08E4F5D6A07FCCF88207A |
后话
整个应急及分析事件其实在4.23就结束了,但因为自己以前没有做笔记的习惯,所以写得又慢,写到一半又去研究md本地图片上传等其他事情去了,又过了个五一,家里出了点事,耽误半个月回来已经忘了七七八八了。写得很浅薄,算是给自己写笔记做一个开端吧。
最开始分析Libgcc_a的时候,网上还没有多少相关资料,只有freebuff有篇类似的,但跟此次的样本还是有所区别,没有那几个用以隐藏的so文件,等我再写笔记的时候,就发现已经有报告提及skit,sshpkit等几个so文件了,但好像没人提及它们可以做到隐藏文件和隐藏进程的功能,好像没人去逆向看看?他们的难道没有被隐藏?我是真的很好奇。
反正乱七八糟写这么多吧,如果有遇到该木马的同行,但愿帮得上你。