問題描述:
一台阿里雲服務器,收到連續告警CPU使用量已經大於95%。但這台機器上面使用中的業務只有一個不常使用的MySQL,其他就沒有了,正常情況下CPU是不可能達到這么高的。查看告警信息,發現有被植入挖礦程序,可疑程序文件路徑為 /usr/lib/libiacpkmn.so.3。
排查過程:
1、top查看,找占CPU高的進程:
通過按照CPU占比降序查看,除了少數幾個進程占CPU,並沒有發現可疑程序
占用CPU高的挖礦程序應該是隱藏在某個地方了,
2、使用命令ps -aux --sort=-pcpu|head -10查找,果然找到了這個程序:
[root@dbserver ~]# ps -aux --sort=-pcpu|head -10 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 14454 179 0.0 6780 740 ? Ssl 08:00 708:24 [xfsdatad]

解決過程:
1、首先殺掉上面這個占CPU高的xfsdatad進程:
[root@dbserver ~]# kill -9 14454
再使用top查看CPU,馬上就降下來了:
2、清理定時任務
挖礦程序一般都設置了定時任務啟動腳本程序,查看定時任務,crontab -l查看是找不到的。得看/etc/crontab文件。果然有任務在啟動程序腳本 /usr/lib/libiacpkmn.so.3
[root@dbserver bin]# cat /etc/crontab SHELL=/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # run-parts 01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly 0/8 00 * * * /bin/bash /usr/lib/libiacpkmn.so.3 >/dev/null 2>&1 [root@dbserver bin]#
刪除掉定時任務,防止再次啟動腳本
3、刪除腳本文件/usr/lib/libiacpkmn.so.3
根據定時任務中暴露的可疑文件所在路徑/usr/lib/libiacpkmn.so.3,徹底刪除該腳本文件 rm -f /usr/lib/libiacpkmn.so.3 。
結果顯示文件是被加了鎖的,使用root用戶去刪除、mv、chmo/chown改權限,或者清空文件,任何操作都會報Permission denied(沒權限):
[root@dbserver lib]# cd /usr/lib [root@dbserver lib]# rm -rf libiacpkmn.so.3 rm: cannot remove ‘libiacpkmn.so.3’: Operation not permitted [root@dbserver lib]# >libiacpkmn.so.3 -bash: libiacpkmn.so.3: Permission denied
因此需要確認文件是否枷鎖,lsattr命令查看,發現有一個 i 權限:
lsattr 命令介紹
發現 I 權限如下:
不能被刪除、改名、設定連結、寫入或新增數據;
[root@dbserver lib]# lsattr libiacpkmn.so.3 ----i--------e-- libiacpkmn.so.3
使用命令撤銷i權限:
[root@dbserver lib]# chattr -i libiacpkmn.so.3
注意:如果不能使用chattr命令,就使用yum -y install e2fsprogs命令安裝即可。
然后再檢查文件權限,就沒有i權限了。再刪除文件成功:
[root@dbserver lib]# lsattr libiacpkmn.so.3 -------------e-- libiacpkmn.so.3 [root@dbserver lib]# rm -f libiacpkmn.so.3 [root@dbserver lib]# [root@dbserver ~]# find / -name "libiacpkmn.so.3" #查找文件,確認已經刪除OK [root@dbserver ~]#
4、同樣的方法刪除殘留文件nfstruncate
查找挖礦程序根源所在地 已知 PID 14454。同時根據 ps -anx查詢到的端口號查詢端口14454,
cd /proc/14454
ls -a 查詢到/etc/ 目錄存在啟動文件nfstruncate
exe -> /etc/rc.d/init.d/nfstruncate #這個nfstruncate 文件,也需要刪除
[root@dbserver lib]# find / -name "nfstruncate" #查找出來這個文件有兩個,都刪除 /etc/rc.d/init.d/nfstruncate /usr/bin/nfstruncate [root@dbserver lib]# cd /etc/rc.d/init.d/ [root@dbserver init.d]# chattr -i nfstruncate [root@dbserver init.d]# rm -rf nfstruncate [root@dbserver bin]# [root@dbserver init.d]# cd /usr/bin/ [root@dbserver bin]# chattr -i nfstruncate [root@dbserver bin]# rm -rf nfstruncate [root@dbserver bin]# [root@dbserver ~]# find / -name "nfstruncate" #查找文件,確認已經刪除OK [root@dbserver bin]#
補記:
在后面的一次殺毒中,/proc/pid/目錄下面的exe指向的是另一個文件:
exe -> /usr/lib/libiacpkmn.so.3 (deleted)
但是/etc/rc.d/init.d/目錄和/usr/bin/下面也都存在nfstruncate文件。因此不僅要刪除 /usr/lib/libiacpkmn.so.3,也要刪除/etc/rc.d/init.d/nfstruncate和/usr/bin/nfstruncate。三個文件都得清理干凈。
5、清除/etc/rc*.d/目錄下的S01nfstruncate文件鏈接,在rc0.d-rc6.d目錄下都存在S01nfstruncate文件,全部刪除。
查看/etc/rc0.d目錄下的文件鏈接S01nfstruncate:
[root@dbserver rc0.d]# ll total 0 lrwxrwxrwx 1 root root 20 May 3 2016 K01agentwatch -> ../init.d/agentwatch lrwxrwxrwx 1 root root 15 Mar 27 2017 K15nginx -> ../init.d/nginx lrwxrwxrwx 1 root root 19 Mar 27 2017 K25uwsgi9090 -> ../init.d/uwsgi9090 lrwxrwxrwx 1 root root 15 May 3 2016 K50aegis -> ../init.d/aegis lrwxrwxrwx 1 root root 20 May 3 2016 K50netconsole -> ../init.d/netconsole lrwxrwxrwx 1 root root 22 Jun 21 2017 K80cloudmonitor -> ../init.d/cloudmonitor lrwxrwxrwx 1 root root 17 May 3 2016 K90network -> ../init.d/network lrwxrwxrwx 1 root root 23 Oct 19 08:00 S01nfstruncate -> /etc/init.d/nfstruncate #需要刪除
找到所有的文件鏈接刪除:
[root@dbserver rc0.d]# find / -name "S01nfs*" /etc/rc.d/rc1.d/S01nfstruncate /etc/rc.d/rc2.d/S01nfstruncate /etc/rc.d/rc4.d/S01nfstruncate /etc/rc.d/rc3.d/S01nfstruncate /etc/rc.d/rc6.d/S01nfstruncate /etc/rc.d/rc5.d/S01nfstruncate /etc/rc.d/rc0.d/S01nfstruncate find: ‘/proc/4796’: No such file or directory find: ‘/proc/5488’: No such file or directory [root@dbserver rc0.d]# [root@dbserver rc0.d]# find / -name "S01nfs*"|xargs rm -f
6、再top觀察CPU,確認不再無故飆高,殺毒任務就完成了。
