
純粹是偶然,我發現當我離開電腦時,有時某個進程會佔用一個核心的 100%:當使用 CPU 時,它低於 1%,但是當電腦處於 IDL 狀態時,這意味著螢幕關閉並且有一段時間沒有人接觸電腦,這個過程有時會開始大量使用CPU。一旦任何輸入喚醒螢幕,該過程就會再次變得「正常」。
我創建了一個腳本來記錄哪個進程佔用大量CPU,我發現它是kwin
(cmdline = kwin-session1011dcae5a5000144224709
.....)
有人告訴我,當螢幕關閉時,視窗管理器不應該使用 100% CPU,所以我正在尋找對我的電腦的任何破解/駭客攻擊。
我的問題是:
- 要知道該進程是否被破解/駭客入侵,需要遵循什麼程序?
- 這個假設有道理嗎?
注意:我複製了大部分/proc/xxx
資料夾,因此我有相當多的信息。
答案1
- 要知道該進程是否被破解/駭客入侵,需要遵循什麼程序?
查看單一進程在目前運行的系統中執行的操作的唯一方法是調試該進程,或調試整個系統(核心)。第一個相當簡單,有幾個工具可以讓您在可疑的進程上即時執行此操作。您可以strace
它執行哪些系統調用,並ltrace
查看它調用哪些共享庫函數,甚至可以gdb
作為一個整體來查看它目前執行的指令。並不是說對於後者,您將凍結該進程(在預設模式下),並且您需要kwin
放置在正確位置的原始程式碼,以便 gdb 能夠加載它並向您顯示它停止的行。否則它只會顯示帶有特殊命令的機器指令。
要調試內核,您需要一個特殊的設置,這對於已經運行的系統的情況來說可能是不可能的(如果在啟動時沒有準備好進行此類設置)。它允許您本地(kgdb 的 kdb)或遠端(kgdb 和 gdb)停止整個系統,並檢查記憶體、暫存器、轉儲一些有用的信息以及反彙編程式碼。然而,要有效地解釋它,您至少需要了解 x86 asm 的基礎知識。
核心至少提供了一個偽檔案/proc/pid/mem,它在正常模式下不可讀,但是https://github.com/siblenx/lynxware/blob/master/dumpmem.c是一個包裝器,它根據 /proc/pid/maps 中提供的映射讀取這個稀疏檔案。然後您可以使用反彙編程式檢查轉儲的檔案。如果你不關心進程狀態,你可以使用 強制它轉儲核心kill -SEGV pid
,但是如果在啟動時不允許轉儲核心文件 ( ulimit -c size
),它不會轉儲核心,但仍然會死掉,丟失任何信息你想要得到。
還有更多針對相同任務的特殊取證工具,但它們通常針對經驗豐富的人員。
- 這個假設有道理嗎?
我不這麼認為。我有點擔心我的 fvwm 是否開始表現得像那樣,甚至 twm (如果我習慣了的話),但至於 kwin (以及一般的 KDE),我希望它有這種行為,因為今天的 KDE 非常龐大,所以一項活動對它來說是「正常的」。
例如,如果 fvwm 出現這種行為,我首先檢查該進程的 /proc/pid/exe 指向正確的二進位文件,然後使用 檢查該二進位檔案的建立時間stat -c %z /path/to/binary
,然後追蹤它是否合法或衝到我的始終準備好kdb,如果沒有,則會凍結系統。大多數「浪費」的活動是程式錯誤或軟體膨脹。
- 注意:我複製了大部分
/proc/xxx
資料夾,因此我有相當多的信息。
這是沒有意義的,因為 /proc 檔案是純粹虛擬的,其中一些重要的文件(如mem
偽文件)在以隨意的方式請求時是不可讀的。