前言
我又来消灭挖矿木马了,这次消灭的挖矿文件为config.json;zhihuatnail.so;sshd2这三个矿马。
本次的CASE特别有意思,往期我们碰到的大部分挖矿木马是以高占用CPU,GPU为主的矿马,而这次是一次全程同“薅羊毛”式矿马的斗智斗勇。 本次重要的是分析过程,分享给大家。
案例背景
1.发现在CentOS服务器进程中,出现大量config.sh进程,但每个CPU占用不高,每个config.sh进程占用7%~10%左右的,8个进程,整体已实现占用80%以上的CPU,影响服务器正常运行(可见矿马作者开始有分布式,无文件的逻辑编写矿马了)
被入侵原因
1.被植入挖矿进程的原因经最后的溯源分析,问题在于服务器对ssh服务(22端口)未配置访问源,直接暴露于公网。
2.服务器密码存在通用口令,容易被爆破入侵。
恶意进程定位
1.矿马位置:
(1)/usr/local/lib/路径下:
代码语言:javascript复制/usr/local/lib/zhihuatnail.so
病毒名:Linux.Rootkit.Processhider.Hnur
(2)tmp/javax路径下:
门罗币矿马watchdogs病毒分析:https://www.freebuf.com/articles/system/196515.html
也可以称它为XMRig挖矿木马,XMRig参数详情:https://www.kuangjiwan.com/news/news-2872.html
代码语言:javascript复制/tmp/javax/sshd2
/proc/(PID)/tmp/javax/sshd2
/tmp/javax/config.sh
/tmp/javax/config.json // watchdogs门罗币挖矿进程
/etc/cron.daily/tmpwatch
(3)/var/spool/cron/路径下:
代码语言:javascript复制/var/spool/cron/root
/var/spool/cron/root~
/var/spool/cron/roow~
/var/spool/cron/roox~
我们从11月这几天的自动任务日志中可以找到痕迹:
代码语言:javascript复制grep "Nov" /var/log/cron
(4)/etc/路径下:——触发进程
代码语言:javascript复制/etc/ld.so.preload
/etc/ld.so.preload~
/etc/ld.so.preloaz~
/etc/crontab
/etc/crontab~
/etc/ksoftirqds
/etc/watchdog
排查:
第一步:使用top命令查看当前进程占用情况(目的:快速定位高占CPU的进程)
代码语言:javascript复制top -c
定位出占用较高的恶意进程,这几个服务的PID分别为24768,32566,25639,25820,15711,24190,28157,25787
同时再读一下进程文件:
代码语言:javascript复制readlink /proc/24768/exe
readlink /proc/32566/exe
readlink /proc/25639/exe
readlink /proc/25820/exe
readlink /proc/15711/exe
readlink /proc/24190/exe
readlink /proc/28157/exe
readlink /proc/25787/exe
第二步:先停止对应恶意PID进程,为服务器CPU降压
代码语言:javascript复制kill -STOP 24768,32566,25639,25820,15711,24190,28157,25787
第三步:查看定时任务(目的:挖矿进程常有写入定时任务的习惯,所以从定时任务中去定位挖矿文件往往效率较高)
代码语言:javascript复制crontab -l
本次定时发现在定时任务里并没有写入,则极有可能矿马的定时任务创建是通过其他路径写入的。
清理
第四步:删除该恶意进程定时任务,再删除恶意进程文件
首先清理/tmp/javax/sshd2:
代码语言:javascript复制rm -rf /tmp/javax/sshd2
发现无法通过命令行直接清理,此时结合主机安全后台,隔离成功。
可以看看zhihuatnail.so的创建时间,作为参考:
代码语言:javascript复制stat /usr/local/lib/zhihuatnail.so
在清理的过程中可能会碰到文件只读不可写,这是在感染矿马的机器上常见的一种现象,我们可以借助chattr工具清除文件的特殊权限属性,再对文件进行修改操作。zhihuatnail.so无法清理的原因是存在文件特殊权限,因此清除其特殊权限,再进行删除操作就搞定了。
代码语言:javascript复制yum -y install e2fsprogs // CentOS安装chattr
chattr -ias /usr/local/lib/zhihuatnail.so // 删除文件特殊属性
chmod x zhihuatnail.so // 赋权后,即可正常执行
其他恶意文件的清理就不附图了,一次性全部清理
代码语言:javascript复制rm -rf /tmp/javax/sshd2
rm -rf /proc/(PID)/tmp/javax/sshd2
rm -rf /tmp/javax/config.sh
rm -rf /tmp/javax/config.json
rm -rf /etc/cron.daily/tmpwatch
rm -rf /var/spool/cron/root
rm -rf /var/spool/cron/root~
rm -rf /var/spool/cron/roow~
rm -rf /var/spool/cron/roox~
rm -rf /etc/ld.so.preload
rm -rf /etc/ld.so.preload~
rm -rf /etc/ld.so.preloaz~
rm -rf /etc/crontab
rm -rf /etc/crontab~
rm -rf /etc/ksoftirqds
rm -rf /etc/watchdog
第五步,kill 掉对应的进程PID,这里就可以删除进程了,因为挖矿源文件已经被删除
代码语言:javascript复制Kill -9 24768,32566,25639,25820,15711,24190,28157,25787
继续观察是否有新的异常进程和端口启动
第六步:验证
(1)验证
代码语言:javascript复制top -c
(2)查看自启动日志,看看是否还有新增任务,观察三个小时,无新增说明已经清理干净
代码语言:javascript复制grep "Nov" /var/log/cron
观察三小时没有新文件生成,已经清理完毕。
总结一下
一、config.sh文件的特点是不会将定时任务写入crontab -l中,而是通过/var/spool/cron/root 等作为定时脚本,向矿池定时curl更新挖矿文件,更新待进程起来后,再自动删除更新下来的文件。平均每2分钟执行一次进程更新动作。
二、XMRig核心挖矿程序是/tmp/javax/config.json,定义了挖矿的各个参数。
三、/etc/ld.so.preload等作为定时触发任务,定时触发/usr/local/lib/zhihuatnail.so进程,让每次若进程未清理干净,则会自动继续触发挖矿行为和文件更新行为。