事情起因:同事解決伺服器中挖礦病毒的過程
可以看到,病毒的主要起因是利用了linux預載入型惡意動態鏈結庫的後門,關於linux預載入的知識可以參考這一篇文章:警惕利用linux預載入型惡意動態鏈結庫的後門
我們匯出病毒檔案 libioset.so ,然後利用 ida 反編譯該 so 檔案,得到如下圖的函式列表:
可以看到,裡面有許多我們熟悉的庫函式,例如 fopen(),stat() 之類的。
同事提到過當初排查的時候用 ls 命令並沒有檢視得到 ld.so.preload 和 libioset.so 檔案,這是為什麼呢?讓我們來看一下 ls 的源**,首先執行命令 which ls :
可以看到 ls 命令在 /bin/ls 下(ubuntu系統),然後執行命令 dpkg -s /bin/ls :
但是前面可以看到,stat 函式已經被病毒惡意修改了,我們來看看 stat 函式的內容:
可以看到,病毒作者很奸詐,當檔名等於 libioset.so,ld.so.preload,ksoftirqds 時並不會執行原來的 stat 函式,而是直接返回 0xffffffff,這也就是為什麼執行 ls 命令並不能看到病毒檔案的原因。觀察其他被覆寫的函式可以發現基本上都是類似的操作,如果檔名不是上面三個就執行原來的操作,如果是的話就直接返回無效值。
而 forge_proc_net_tcp 和 forge_proc_cpu 覆寫了檔案已達到偽造的目的(函式字首是 forge, - -!):
病毒自我保護的方法就是如此,覆蓋原有的庫函式,將對自己的操作過濾,以到達保護的目的。
在第一部分可以看到,該惡意鏈結庫覆蓋了比較多的系統庫函式,但是其中大部分函式都是為了保護該惡意鏈結庫而覆蓋的,具有攻擊作用的只有乙個函式,就是 access 函式,看一下 access 函式的部分**(為了安全考慮隱藏了病毒的指令碼位址):
可以看到,在 access 函式裡,病毒作者喪心病狂的新增了三個 crontab 指令碼,該指令碼會執行病毒程序 watchdogs,從而達到新增 ld.so.preload 和 libioset.so 的目的。
原本 access 函式的作用是執行檔案時判斷檔案是否可操作的,所以整個系統中呼叫 access函式的地方非常多而且非常頻繁,因此一旦病毒注入成功,那麼指令碼新增過程就會非常頻繁,就會出現刪除 crontab 指令碼但是過個幾秒鐘又出現的現象,而刪除 crontab 指令碼然後立馬鎖定檔案確實能起到一定的抑制病毒的作用。
首先 watchdogs 病毒程序會新增 ld.so.preload 和 libioset.so,這樣就會覆蓋掉原有的系統庫函式,類似在原有的系統庫函式外面加了乙個殼,當某個地方執行 access 函式的時候,病毒指令碼就會被新增進 crontab ,然後 crontab 執行病毒指令碼,而指令碼會執行 watchdogs 病毒程序,如此反覆。僅刪除 crontab 指令碼並不能起到作用,然後因為病毒的自我保護措施,覆蓋了幾乎所有能操作到病毒的命令,所以也很難通過系統命令來清除病毒鏈結庫。
因此,要想解決掉該病毒,可以先清除 crontab 指令碼並鎖定檔案,防止執行病毒指令碼,但是因為 access 函式執行非常頻繁,所以這個過程必須要快,而且可能需要執行多次,因為可能失敗。然後清除病毒鏈結庫,但是因為系統命令都已被劫持,所以平常的呼叫系統命令並不能起到效果,但是可以通過靜態編譯 busybox 然後執行命令來達到清除檔案的目的。
以上就是該病毒的原理,感謝同事的努力和分享,我才能完成這次病毒分析。
雲伺服器的挖礦病毒。
朋友的阿里雲放著沒用了,我就借來打算放兩個小東西上去,結果一上去看到cpu 100 我的天,如果這是個windows,我就要開始懷疑他是不用這個來看愛情片。當在cpu爆滿。使用top命名會發現有若干個程序長期占用及高的cpu,那麼問題就出在這些程序上,想都不用想kill 9 pid瞬間消滅!垃圾病毒...
伺服器被植入挖礦病毒的處理
伺服器被植入挖礦病毒的處理 故障描述 一台伺服器一直在向外傳送網路包,導致該網段網路擁堵。同時我司的一台伺服器也出現了同樣的情況,不斷往外發包,導致網段擁堵 經過排查,發現該機器被植入挖礦病毒,部分偽裝成系統檔案,占用cpu及網路,病毒程序分別為 system wipefs ps cranberry...
阿里雲伺服器手動清除挖礦病毒
阿里雲伺服器ecs較便宜的版本,其安全性不高。如果再加上人為相關的不當操作,伺服器很容易受到攻擊。其中一種情況是伺服器受到挖礦程式的攻擊。登入到伺服器檢視程序,可以發現cpu占用很高的兩個程式 sysupdate和networkservice。檢視挖礦程式目錄 輸入命令ls l proc exe,可...