遇到一個佔用 100% CPU 但卻在 top
上面顯示不出來的案例,通常這類型的惡意程式都會把自己隱藏起來,檢查了一下發現惡意程式透過 libprocesshider.so
來隱藏自己(原始碼)
其實原理滿單純的,因為大多數的系統監控軟體都透過 /proc
pseudo filesystem 來取得執行中的程式的資料,比如 /proc/<pid>/comm
這些的。原理上如果可以攔截相關讀取的請求就可以隱藏,同時透過 /etc/ld.conf.preload
來影響使用者新執行的程式,讓使用者想要來檢查的時候沒辦法發現問題。
實際執行的程式放在 /sbin/cpuhelp
但可以想像應該會有很多變體。網路上隨便搜尋一下也可以看到很多案例。
至於如何在伺服器重開的時候自動執行,除了透過 cron
之外,這個案例是透過 /usr/lib/udev/rules.d/harp.sh
透過 udev 在啟動的時候執行,算是滿可惡的,一般人容易忽略。
這腳本除了下載惡意程式並安裝,還會主動清理相關日誌檔案,讓使用者沒辦法追查下載的來源。
只要把這些東西都刪掉,(應該)就可以暫時修復了。但最好還是重建一個環境或檢查執行的服務的已知問題比較好,否則未來還是有被入侵的機會。