【前言】通過排查挖礦病毒的一次“有趣”經歷,本文不僅展示了各種 Shell 命令的用法和作用,也能加深讀者對Linux 進程和文件系統的理解。
同時在本文中,還出現了各種不同的工具類網站,相信對于一些專業人士會很有幫助。
希望能對大家有所幫助。
CPU起飛了
最近有朋友在群里反饋,自己服務器的CPU一直處于高占用狀態,但用top、ps等命令卻一直找不到是哪個進程在占用,懷疑中了挖礦病毒,急的團團轉。
根據經驗,我趕緊讓他看一下當前服務器的網絡連接,看看有沒有可疑連接,果然發現了有點東西:
上Shodan查一下這IP地址:
反向查找,發現有諸多域名曾經解析到這個IP地址:
這是一個位于德國的IP地址,開放了4444,5555,7777等數個特殊的服務端口:
其中這位朋友服務器上發現的連接到的是7777端口,鐘馗之眼顯示,這是一個HTTP服務的端口,直接訪問返回的信息如下:
mining pool!,服務器正在挖礦實錘了!
但神奇的是,這個進程像是隱身了一般,找不到存在的任何痕跡。
進程如何隱藏
現在說回到本文的正題:Linux操作系統上,進程要隱藏起來,有哪些招數?
要回答這個問題,先來知道ps、top等命令枚舉系統的進程列表的原理。
Linux的設計哲學是:一切皆文件!
進程也不例外, Linux系統中有一個特殊的目錄:/proc/,這個目錄下的內容,不是硬盤上的文件系統,而是操作系統內核暴露出的內核中進程、線程相關的數據接口,也就是procfs,里面記錄了系統上正在運行的進程和線程信息,來查看一下:
這些以數字命名的目錄,就是一個進程的PID,里面記錄了該進程的詳細信息。
而ps、top等命令的工作原理,實質上就是遍歷這個目錄。
知道了原理,想實現隱藏就有以下幾個思路:
命令替換
直接替換系統中的ps、top命令工具。可以從GitHub上下載它們的源碼,加入對應的過濾邏輯,在遍歷進程的時候,剔除挖礦進程,實現隱藏的目的。
模塊注入
編寫一個動態鏈接庫so文件,在so中,HOOK遍歷相關的函數(readdir/readdir64),遍歷的時候,過濾挖礦進程。
通過修改LD_PRELOAD環境變量或/etc/ld.so.preload文件,配置動態鏈接庫,實現將其注入到目標進程中。
內核級隱藏
模塊注入的方式是在應用層執行函數HOOK,隱藏挖礦進程,更進一步,可以通過加載驅動程序的方式在內核空間HOOK相應的系統調用來實現隱藏。不過這對攻擊者的技術要求也更高,遇到這樣的病毒清理起來挑戰也更大了。
揪出挖礦進程
通過上面的進程隱藏原理看得住來,都是想盡辦法隱藏/proc目錄下的內容,類似于“障眼法”,所以包含ps、top、ls等等在內的命令,都沒辦法看到挖礦進程的存在。
但蒙上眼不代表不存在,有一個叫unhide的工具,就能用來查看隱藏進程。
我讓這位朋友安裝這個工具來查找隱藏的進程,但奇怪的是,一執行yum install安裝,遠程連接的SSH會話就立刻斷開。
于是退而求其次,選擇通過源碼安裝,又是一直各種報錯···
因為我沒辦法親自操作這臺服務器,溝通起來比較麻煩,于是我決定研究下這個unhide工具的源碼,然后編一個python腳本發給他執行。
源碼地址:https://github.com/YJesus/Unhide-NG/blob/master/unhide-linux.c
在查找隱藏進程模塊,其大致使用了如下的方法:
挨個訪問/proc/pid/目錄,其中,pid從1到到max_pid累加
如果目錄不存在,跳過
如果是unhide自己的進程,跳過
如果在ps命令中能看到,跳過
剩下的,既不是自己,也不在ps命令輸出中,則判定為隱藏進程
按照這個思路,我編寫了一個Python腳本發給這位朋友,執行后果然發現了隱藏的進程:
別著急,不是真的有這么多進程,這里是把所有的線程ID列舉出來了。隨便挑選了一個看一下:
還記得前面通過netstat命令看到挖礦進程建立了一個網絡連接嗎?Linux一切皆文件,在/proc/pid/fd目錄下有進程打開的文件信息:
這里發現這個進程打開了一個socket,后面的10212是inode id,再通過下面的命令看一下這個socket到底是什么:
cat /proc/net/tcp | grep 10212
輸出了四元組信息:
左邊是源IP地址:源端口,右邊是目的IP地址:目的端口
目的端口1E61就是7777!!!
找到了,就是這貨!
再次查看cat /proc/pid/environ,定位到進程的可執行文件:
總算把這家伙找到了:
網上一搜這家伙,看來是慣犯了:
挖礦病毒分析
脫殼后,在IDA中現出了原形,不禁倒吸了一口涼氣,居然悄悄修改/root/.ssh/authorized_keys文件,添加了RSA密鑰登錄方式,留下這么一個后門,隨時都能遠程登錄進來。
除此之外,還發現了病毒嘗試連接的大量域名:
看到這里簡直可怕!自己的服務器被病毒按在地上摩擦啊!
清除建議
開啟SELinux
殺掉挖礦進程
刪除病毒程序(注意rm命令是否被替換)
刪除病毒驅動程序(注意rm命令是否被替換)
刪除病毒添加的登錄憑據
防火墻封禁IP、端口
責任編輯:xj
原文標題:急死!CPU被挖礦了,卻找不到哪個進程!
文章出處:【微信公眾號:Linux愛好者】歡迎添加關注!文章轉載請注明出處。
-
cpu
+關注
關注
68文章
10825瀏覽量
211149 -
挖礦
+關注
關注
6文章
448瀏覽量
16033
原文標題:急死!CPU被挖礦了,卻找不到哪個進程!
文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論