分析 Linux 核心級 Rootkit 是做什麼的?
概述
Linux 核心級 Rootkit 在 ring 0 層級運作,修改核心資料結構以對使用者空間工具隱藏程序、檔案、網路連線和核心模組。檢測需要記憶體取證(使用 Volatility3 分析實體記憶體轉儲)或交叉視圖分析(比對 /proc、/sys 和核心資料結構間的不一致)。此技能涵蓋使用 Volatility3 Linux 外掛程式檢測系統呼叫表鉤子、隱藏核心模組和修改過的函數指標,並輔以 rkhunter 和 chkrootkit 進行即時系統掃描。
使用時機
- 調查需要分析 Linux 核心級 Rootkit 的安全事件時
- 為此領域建置檢測規則或威脅獵殺查詢時
- SOC 分析師需要針對此分析類型的結構化程序時
- 驗證相關攻擊技術的安全監控覆蓋範圍時
先決條件
- 已安裝 Volatility3(pip install volatility3)
- Linux 記憶體轉儲(透過 LiME、AVML 或 /proc/kcore 取得)
- 符合目標核心版本的 Volatility3 Linux 符號表(ISF)
- 用於即時系統掃描的 rkhunter 和 chkrootkit
- 用於比對的參考用已知良好核心映像
步驟
第 1 步:取得記憶體轉儲
使用 LiME 核心模組或針對雲端實例使用 AVML 來擷取 Linux 實體記憶體。
第 2 步:使用 Volatility3 分析
執行 linux.check_syscall、linux.lsmod、linux.hidden_modules 和 linux.check_idt 外掛程式,以檢測 rootkit 痕跡。
第 3 步:交叉視圖分析
比對來自 /proc/modules、lsmod 和 /sys/module 的模組列表,以識別在某一視圖中被隱藏但在另一視圖中存在的模組。
第 4 步:即時系統掃描
執行 rkhunter 和 chkrootkit 以檢測已知的 rootkit 特徵、可疑檔案和修改過的系統二進位檔。
預期輸出
包含檢測到的系統呼叫鉤子、隱藏核心模組、修改的 IDT 項目、可疑的 /proc 差異以及 rkhunter 發現的 JSON 報告。
範例輸出
$ sudo python3 rootkit_analyzer.py --memory /evidence/linux-mem.lime --profile Ubuntu2204
Linux 核心級 Rootkit 分析報告
=====================================
記憶體映像:/evidence/linux-mem.lime
核心版本:5.15.0-91-generic (Ubuntu 22.04 LTS)
分析時間:2024-01-18 09:15:32 UTC
[+] 掃描系統呼叫表中的鉤子...
系統呼叫表基底:0xffffffff82200300
檢查的系統呼叫總數:449
檢測到被鉤住的系統呼叫:
┌─────────┬──────────────────┬──────────────────────┬──────────────────────┐
│ NR │ 系統呼叫 │ 預期位址 │ 目前位址 │
├─────────┼──────────────────┼──────────────────────┼──────────────────────┤
│ 0 │ sys_read │ 0xffffffff8139a0e0 │ 0xffffffffc0a12000 │
│ 2 │ sys_open │ 0xffffffff8139b340 │ 0xffffffffc0a12180 │
│ 78 │ sys_getdents64 │ 0xffffffff813f5210 │ 0xffffffffc0a12300 │
│ 62 │ sys_kill │ 0xffffffff8110c4a0 │ 0xffffffffc0a12480 │
└─────────┴──────────────────┴──────────────────────┴──────────────────────┘
警告:檢測到 4 個系統呼叫鉤子 - 確認 rootkit 行為
[+] 檢查隱藏核心模組...
已載入模組 (lsmod): 147
核心物件列表中的模組: 149
隱藏模組:
- "netfilter_helper" 位於 0xffffffffc0a10000 (大小:12288)
- "kworker_sched" 位於 0xffffffffc0a14000 (大小:8192)
[+] 掃描 /proc 的不一致...
task_struct 列表中的程序:234
/proc 中可見的程序: 231
隱藏程序:
- PID 31337 指令:「[kworker/0:3]」 (偽裝成核心執行緒)
- PID 31442 指令:「rsyslogd」 (偽造,真正的 rsyslogd 是 PID 892)
- PID 31500 指令:「」 (無名程序)
[+] 檢查 IDT 項目...
掃描的 IDT 項目:256
修改的項目:0 (乾淨)
[+] 執行 rkhunter 掃描...
檢查已知 rootkit: 已檢查 68 種變體
Diamorphine rootkit: 警告 - 特徵相符
系統二進位檔檢查:
/usr/bin/ps: 已修改 (SHA-256 不符)
/usr/bin/netstat:已修改 (SHA-256 不符)
/usr/bin/ls: 已修改 (SHA-256 不符)
/usr/sbin/ss: 正常
[+] 網路分析...
隱藏的連線(不在 /proc/net/tcp 中):
ESTABLISHED 0.0.0.0:0 -> 198.51.100.47:4443 (PID 31337)
ESTABLISHED 0.0.0.0:0 -> 198.51.100.47:8080 (PID 31442)
摘要:
Rootkit 類型: 可載入核心模組 (LKM)
可能家族: Diamorphine 變體
系統呼叫鉤子: 4 個 (read, open, getdents64, kill)
隱藏模組: 2 個
隱藏程序: 3 個
隱藏連線: 2 個 (C2:198.51.100.47)
修改的二進位檔: 3 個 (/usr/bin/ps, netstat, ls)
風險等級: 嚴重