什么是挖礦木馬
挖礦木馬會占用CPU進行超頻運算,從而占用主機大量的CPU資源,嚴重影響服務器上的其他應用的正常運行。黑客為了得到更多的算力資源,一般都會對全網進行無差別掃描,同時利用SSH爆破和漏洞利用等手段攻擊主機。部分挖礦木馬還具備蠕蟲化的特點,在主機被成功入侵之后,挖礦木馬還會向內網滲透,並在被入侵的服務器上持久化駐留以獲取最大收益。整體的攻擊流程大致如下圖所示:

二. 挖礦木馬中招特征
挖礦木馬會在用戶不知情的情況下利用主機的算力進行挖礦,最明顯的特征就是主機的CPU被大量消耗,查看雲主機CPU占用率的方法有兩種:
1. 控制台實例監控

2. 主機執行TOP命令
如下圖所示,通過執行top命令,即可在返回結果中看到當時系統的CPU占用率。
top -c

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

可以通過執行如下命令查看是否存在可疑定時任務,若有,則先保存相關記錄用於后續分析,再進行刪除:
查看系統當前用戶的計划任務:
crontab -l
查看系統特定用戶的計划任務:
crontab -u username -l
查看其他計划任務文件:
cat /etc/crontab cat /var/spool/cron cat /etc/anacrontab cat /etc/cron.d/ cat /etc/cron.daily/ cat /etc/cron.hourly/ cat /etc/cron.weekly/ cat /etc/cron.monthly/ cat /var/spool/cron/
4. 清除啟動項
除了計划任務,挖礦木馬通過添加啟動項同樣能實現持久化。可以使用如下命令查看開機啟動項中是否有異常的啟動服務。
CentOS7以下版本:
chkconfig –list
CentOS7及以上版本:
systemctl list-unit-files
如果發現有惡意啟動項,可以通過如下命令進行關閉:
CentOS7以下版本:
chkconfig 服務名 off
CentOS7及以上版本:
systemctl disable 服務名
另外,還需要仔細排查以下目錄及文件,及時刪除可疑的啟動項:
/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/
排查的時候,可以按照文件修改時間來排序,重點排查近期被創建服務項。如下圖所示,系統近期被創建了一個名為bot.service的服務,該服務在系統啟動時會啟動/etc/kinsing這個木馬文件,需要關閉bot服務,並刪除/etc/kinsing文件。


5. 清除預加載so
通過配置/etc/ld.so.preload,可以自定義程序運行前優先加載的動態鏈接庫,部分木馬通過修改該文件,添加惡意so文件,從而實現挖礦進程的隱藏等惡意功能。
檢查/etc/ld.so.preload(該文件默認為空),清除異常的動態鏈接庫。可以執行`> /etc/ld.so.preload`命令進行清除。

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

確認相關進程為挖礦進程后,按照如下步驟將其清除:
獲取並記錄挖礦進程的文件路徑:
ls -l /proc/$PID/exe
殺死挖礦進程:
kill -9 $PID
刪除挖礦進程對應的文件

(2)清除其它相關惡意進程
惡意進程與外部的C2服務器進行通信時,往往會開啟端口進行監聽。執行如下命令,查看服務器是否有未被授權的端口被監聽。
netstat -antp
若有未授權進程,按照如下步驟將其清除:
獲取並記錄未授權進程的文件路徑:
ls -l /proc/$PID/exe
殺死未授權進程:
kill -9 $PID
刪除未授權進程對應的文件
還可以通過如下命令排查近期新增的文件,清除相關木馬
find /etc -ctime -2 (這里指定目錄為/etc,獲取近2天內的新增文件) lsof -c kinsing (這里要查看文件名為kinsing的相關進程信息)

8. 風險排查、安全加固
對系統進行風險排查和安全加固,避免挖礦木馬卷土重來,詳情可參考如下鏈接:https://cloud.tencent.com/document/product/296/9604
四. 常見問題
1. 明明剛剛清理了挖礦木馬,沒過多久就又卷土重來?
很多用戶會反饋挖礦木馬老是清理不干凈,明明已經Kill了進程,刪除了木馬文件,沒過多久,CPU占用率又上來了。究其根本,還是因為清除得不夠徹底。大部分用戶都只是Kill掉挖礦進程和對應文件,卻沒有清理計划任務和守護進程。
一般建議先清除計划任務、啟動項、守護進程,再清除挖礦進程和其他惡意進程。

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


Virustotal地址:https://www.virustotal.com/gui/s
3. 為什么系統CPU占用率接近100%,卻看不到是哪個進程導致的?
如下圖所示,系統CPU占用率接近100%,卻看不到是哪個進程導致的,這種情況一般是因為系統命令被木馬篡改了,從而隱藏了木馬進程的蹤跡,讓用戶無法進行溯源分析。

命令篡改有多種方式,分別如下:
(1)top源文件被篡改,惡意進程信息被過濾后返回

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

通過執行如下命令即可復原:
> /etc/ld.so.preload && rm -rf 惡意so文件路徑
【相關文章】https://cloud.tencent.com/developer/article/1744547
(3)通過其他未知手段篡改系統命令
可分別嘗試如下兩種方案解決:
i.從其他相同版本系統中拷貝命令源文件到當前系統中進行覆蓋;可使用uname -a命令查看當前系統版本;
ii.或者安裝busybox來對系統進行排查。busybox是一個集成了300多個最常用Linux命令和工具的軟件,可以使用busybox替代系統命令對系統進行排查;
yum -y install wget make gcc perl glibc-static ncurses-devel libgcrypt-devel wget http://busybox.net/downloads/busybox-1.33.0.tar.bz2 tar -jxvf busybox-1.33.0.tar.bz2 cd busybox-1.33.0 && make && make install
【相關文章】https://www.cnblogs.com/angryprogrammer/p/13456681.html
持續更新中...