我的云服務(wù)器被植入挖礦木馬,CPU飆升200%
原文鏈接:https://bbs.pediy.com/thread-268197.htm
一、什么是挖礦木馬
部分挖礦木馬還具備蠕蟲化的特點(diǎn),在主機(jī)被成功入侵之后,挖礦木馬還會(huì)向內(nèi)網(wǎng)滲透,并在被入侵的服務(wù)器上持久化駐留以獲取最大收益。
挖礦木馬的整體攻擊流程大致如下圖所示:

二、挖礦木馬中招特征
挖礦木馬會(huì)在用戶不知情的情況下利用主機(jī)的算力進(jìn)行挖礦,最明顯的特征就是主機(jī)的CPU被大量消耗,查看云主機(jī)CPU占用率的方法有兩種:
控制臺(tái)實(shí)例監(jiān)控

主機(jī)執(zhí)行TOP命令
如下圖所示,通過執(zhí)行top命令,即可在返回結(jié)果中看到當(dāng)時(shí)系統(tǒng)的CPU占用率。
top -c
如果云主機(jī)CPU占用率居高不下,那么主機(jī)很有可能已經(jīng)被植入了挖礦木馬,會(huì)影響服務(wù)器上的其他應(yīng)用的正常運(yùn)行,需要立刻上機(jī)排查。
記一次 Linux 被入侵,服務(wù)器變 “礦機(jī)”~
三、清理挖礦木馬
及時(shí)隔離主機(jī)
部分帶有蠕蟲功能的挖礦木馬在取得主機(jī)的控制權(quán)后,會(huì)繼續(xù)對(duì)公網(wǎng)的其他主機(jī),或者以當(dāng)前主機(jī)作為跳板機(jī)對(duì)同一局域網(wǎng)內(nèi)的其他主機(jī)進(jìn)行橫向滲透,所以在發(fā)現(xiàn)主機(jī)被植入挖礦木馬后,在不影響業(yè)務(wù)正常運(yùn)行的前提下,應(yīng)該及時(shí)隔離受感染的主機(jī),然后進(jìn)行下一步分析和清除工作。
騰訊云主機(jī)可以通過設(shè)置安全組隔離主機(jī),具體參考如下鏈接:https://cloud.tencent.com/document/product/215/20089
挖礦木馬不僅會(huì)連接礦池,還有可能會(huì)連接黑客的C2服務(wù)器,接收并執(zhí)行C2指令、投遞其他惡意木馬,所以需要及時(shí)進(jìn)行網(wǎng)絡(luò)阻斷。
(1)檢查主機(jī)防火墻當(dāng)前生效的iptables規(guī)則中是否存在業(yè)務(wù)范圍之外的可疑地址和端口,它們可能是挖礦木馬的礦池或C2地址
iptables -L -n(2)從iptables規(guī)則中清除可疑地址和端口
vi /etc/sysconfig/iptables(3)阻斷挖礦木馬的網(wǎng)絡(luò)通信
iptables -A INPUT -s 可疑地址 -j DROPiptables -A OUTPUT -d 可疑地址 -j DROP
大部分挖礦木馬會(huì)通過在受感染主機(jī)中寫入計(jì)劃任務(wù)實(shí)現(xiàn)持久化,如果僅僅只是清除挖礦進(jìn)程,無法將其根除,到了預(yù)設(shè)的時(shí)間點(diǎn),系統(tǒng)會(huì)通過計(jì)劃任務(wù)從黑客的C2服務(wù)器重新下載并執(zhí)行挖礦木馬。
挖礦木馬常見的計(jì)劃任務(wù)通常是下載并執(zhí)行sh腳本,如下圖所示:

可以通過執(zhí)行如下命令查看是否存在可疑定時(shí)任務(wù),若有,則先保存相關(guān)記錄用于后續(xù)分析,再進(jìn)行刪除:
查看系統(tǒng)當(dāng)前用戶的計(jì)劃任務(wù):
crontab -l查看系統(tǒng)特定用戶的計(jì)劃任務(wù):
crontab -u username -l查看其他計(jì)劃任務(wù)文件:
cat /etc/crontabcat /var/spool/croncat /etc/anacrontabcat /etc/cron.d/cat /etc/cron.daily/cat /etc/cron.hourly/cat /etc/cron.weekly/cat /etc/cron.monthly/cat /var/spool/cron/
清除啟動(dòng)項(xiàng)
除了計(jì)劃任務(wù),挖礦木馬通過添加啟動(dòng)項(xiàng)同樣能實(shí)現(xiàn)持久化??梢允褂萌缦旅畈榭撮_機(jī)啟動(dòng)項(xiàng)中是否有異常的啟動(dòng)服務(wù)。
CentOS7以下版本:
chkconfig –listCentOS7及以上版本:
systemctl list-unit-files如果發(fā)現(xiàn)有惡意啟動(dòng)項(xiàng),可以通過如下命令進(jìn)行關(guān)閉:
CentOS7以下版本:
chkconfig 服務(wù)名 offCentOS7及以上版本:
systemctl disable 服務(wù)名另外,還需要仔細(xì)排查以下目錄及文件,及時(shí)刪除可疑的啟動(dòng)項(xiàng):
/usr/lib/systemd/system/usr/lib/systemd/system/multi-user.target.wants/etc/rc.local/etc/inittab/etc/rc0.d//etc/rc1.d//etc/rc2.d//etc/rc3.d//etc/rc4.d//etc/rc5.d//etc/rc6.d//etc/rc.d/
排查的時(shí)候,可以按照文件修改時(shí)間來排序,重點(diǎn)排查近期被創(chuàng)建服務(wù)項(xiàng)。如下圖所示,系統(tǒng)近期被創(chuàng)建了一個(gè)名為bot.service的服務(wù),該服務(wù)在系統(tǒng)啟動(dòng)時(shí)會(huì)啟動(dòng)/etc/kinsing這個(gè)木馬文件,需要關(guān)閉bot服務(wù),并刪除/etc/kinsing文件。


檢查/etc/ld.so.preload(該文件默認(rèn)為空),清除異常的動(dòng)態(tài)鏈接庫(kù)??梢詧?zhí)行`> /etc/ld.so.preload`命令進(jìn)行清除。

挖礦木馬通常還會(huì)在~/.ssh/authoruzed_keys文件中寫入黑客的SSH公鑰,這樣子就算用戶將挖礦木馬清除得一干二凈,黑客還是可以免密登陸該主機(jī),這也是常見的保持服務(wù)器控制權(quán)的手段。
排查~/.ssh/authorized_keys文件,如果發(fā)現(xiàn)可疑的SSH公鑰,直接刪除。
清除挖礦木馬
(1)清除挖礦進(jìn)程
挖礦木馬最大的特點(diǎn)就是會(huì)在用戶不知情的情況下,利用主機(jī)的算力進(jìn)行挖礦,從而消耗主機(jī)大量的CPU資源,所以,通過執(zhí)行如下命令排查系統(tǒng)中占用大量CPU資源的進(jìn)程。
top -cps -ef

確認(rèn)相關(guān)進(jìn)程為挖礦進(jìn)程后,按照如下步驟將其清除:
獲取并記錄挖礦進(jìn)程的文件路徑:
ls -l /proc/$PID/exe殺死挖礦進(jìn)程:
kill -9 $PID
(2)清除其它相關(guān)惡意進(jìn)程
惡意進(jìn)程與外部的C2服務(wù)器進(jìn)行通信時(shí),往往會(huì)開啟端口進(jìn)行監(jiān)聽。執(zhí)行如下命令,查看服務(wù)器是否有未被授權(quán)的端口被監(jiān)聽。
netstat -antp
若有未授權(quán)進(jìn)程,按照如下步驟將其清除:
獲取并記錄未授權(quán)進(jìn)程的文件路徑:
ls -l /proc/$PID/exe殺死未授權(quán)進(jìn)程:
kill -9 $PID
還可以通過如下命令排查近期新增的文件,清除相關(guān)木馬
find /etc -ctime -2 (這里指定目錄為/etc,獲取近2天內(nèi)的新增文件)lsof -c kinsing (這里要查看文件名為kinsing的相關(guān)進(jìn)程信息)

風(fēng)險(xiǎn)排查、安全加固
對(duì)系統(tǒng)進(jìn)行風(fēng)險(xiǎn)排查和安全加固,避免挖礦木馬卷土重來,詳情可參考如下鏈接:https://cloud.tencent.com/document/product/296/9604
四. 常見問題
明明剛剛清理了挖礦木馬,沒過多久就又卷土重來?
很多用戶會(huì)反饋挖礦木馬老是清理不干凈,明明已經(jīng)Kill了進(jìn)程,刪除了木馬文件,沒過多久,CPU占用率又上來了。究其根本,還是因?yàn)榍宄貌粔驈氐?。大部分用戶都只是Kill掉挖礦進(jìn)程和對(duì)應(yīng)文件,卻沒有清理計(jì)劃任務(wù)和守護(hù)進(jìn)程。
一般建議先清除計(jì)劃任務(wù)、啟動(dòng)項(xiàng)、守護(hù)進(jìn)程,再清除挖礦進(jìn)程和其他惡意進(jìn)程。

如何判定可疑進(jìn)程是否為惡意進(jìn)程?
如下圖所示,未知進(jìn)程kinsing監(jiān)聽本地31458端口,非??梢?,可通過如下方法判定:
(1)執(zhí)行`ls -al /proc/$PID/exe`確認(rèn)可疑進(jìn)程對(duì)應(yīng)的文件;
(2)若文件未被刪除,則直接上傳文件到Virustotal進(jìn)行檢測(cè),或者計(jì)算出文件對(duì)應(yīng)的md5,使用md5去Virustotal進(jìn)行查詢;若文件已被刪除,可執(zhí)行`cat /proc/$PID/exe > /tmp/t.bin`將進(jìn)程dump到特定目錄,再上傳文件到Virustotal或者計(jì)算dump文件對(duì)應(yīng)的md5到Virustotal進(jìn)行查詢。如果有多款殺毒引擎同時(shí)檢出,那基本可以判定該進(jìn)程為惡意進(jìn)程。


Virustotal地址:https://www.virustotal.com/gui/s
為什么系統(tǒng)CPU占用率接近100%,卻看不到是哪個(gè)進(jìn)程導(dǎo)致的?

(1)top源文件被篡改,惡意進(jìn)程信息被過濾后返回

通過執(zhí)行如下命令即可復(fù)原:
rm -rf /usr/bin/top && mv /usr/bin/top.original /usr/bin/top【相關(guān)文章】
https://blog.csdn.net/chenmozhe22/article/details/112578057
(2)篡改預(yù)加載so文件,ls、top、ps等命令已經(jīng)被木馬的動(dòng)態(tài)鏈接庫(kù)劫持,無法獲得木馬進(jìn)程相關(guān)的信息

通過執(zhí)行如下命令即可復(fù)原:
> /etc/ld.so.preload && rm -rf 惡意so文件路徑(3)通過其他未知手段篡改系統(tǒng)命令
可分別嘗試如下兩種方案解決:
i.從其他相同版本系統(tǒng)中拷貝命令源文件到當(dāng)前系統(tǒng)中進(jìn)行覆蓋;可使用uname -a命令查看當(dāng)前系統(tǒng)版本;
ii.或者安裝busybox來對(duì)系統(tǒng)進(jìn)行排查。
busybox是一個(gè)集成了300多個(gè)最常用Linux命令和工具的軟件,可以使用busybox替代系統(tǒng)命令對(duì)系統(tǒng)進(jìn)行排查;
yum -y install wget make gcc perl glibc-static ncurses-devel libgcrypt-develwget http://busybox.net/downloads/busybox-1.33.0.tar.bz2tar -jxvf busybox-1.33.0.tar.bz2cd busybox-1.33.0 && make && make install
【相關(guān)文章】
https://www.cnblogs.com/angryprogrammer/p/13456681.html
- END -
?推薦閱讀? 31天拿下 K8s 含金量最高的CKA+CKS證書!? Kubernetes與分布式系統(tǒng),容器化背后的故事 一名運(yùn)維小哥對(duì)運(yùn)維規(guī)則的10個(gè)總結(jié),收藏起來 運(yùn)維工程師不得不看的經(jīng)驗(yàn)教訓(xùn)和注意事項(xiàng) Kubernetes上生產(chǎn)環(huán)境后,99%都會(huì)遇到這2個(gè)故障 如何用 Kubernetes 實(shí)現(xiàn) CI/CD 發(fā)布流程?| 漫畫 K8s kubectl 常用命令總結(jié)(建議收藏) Kubernetes 的這些核心資源原理,你一定要了解 終于明白了 DevOps 與 SRE 的區(qū)別! 我在創(chuàng)業(yè)公司的 “云原生” 之旅 基于Nginx實(shí)現(xiàn)灰度發(fā)布與AB測(cè)試 編寫 Dockerfile 最佳實(shí)踐 搭建一套完整的企業(yè)級(jí)高可用 K8s 集群(二進(jìn)制方式)
點(diǎn)亮,服務(wù)器三年不宕機(jī)


