「腳本小子」雖技術淺薄,但利用已知漏洞、弱口令、Rootkit 工具包仍能造成嚴重損失。本文構建系統級入侵排查方法論:從 Rootkit 特徵識別、核心命令完整性驗證、賬號異常審計、日誌關聯分析到應急響應閉環,提供可直接執行的檢查清單與工具鏈。
| 類型 | 特徵 | 檢測工具 |
| 用戶態 | 替換系統命令 (ps、ls、netstat、top、who)、竄改動態庫 (LD_PRELOAD)、隱藏文件/進程/端口 | rkhunter、chkrootkit、Lynis、debsums -c/rpm -Va |
| 內核態 (LKM) | 掛鉤系統調用 (sys_call_table)、隱藏模塊 (/proc/modules)、直接操作內核數據結構 | kmodsign 驗證簽名、lsmod 對比 /proc/modules、SystemTap/eBPF 追蹤 |
| 固件/引導 | MBR/EFI 分區植入、BIOS/UEFI 模組注入、持久化極強 | UEFI Scanner、CHIPSEC、離線掃描 |
二、核心命令完整性驗證:ps 命令被替換實戰鑒別
# 1. 文件大小異常 (經典特徵)
ls -l /bin/ps
# 正常 ~60KB (動態鏈接) 或 ~1.2MB (靜態)
# 被替換版本常極小 (~12KB) 功能殘缺
# 2. 文件指紋對比 (包管理器驗證)
rpm -V procps-ng # RHEL/CentOS/Rocky
# 輸出 .M 表示模式改變,.5 表示 MD5 異常
debsums -c procps # Debian/Ubuntu
# 3. 字符串特徵掃描
strings /bin/ps | grep -E "proc|psinfo|uptime"
# 正常輸出包含格式化字符串,替換版本常被 strip 或邏輯簡化
# 4. 運行時行為測試
ps aux | grep -E "hidden|malware|rootkit"
# 若已知惡意進程不顯示,極大概率被 Hook
# 5. 靜態編譯純淨版對比 (應急包)
# 維護一份 busybox 或 static 編譯的 coreutils 放在 /opt/safe/
/opt/safe/ps aux | diff -u <(ps aux) -
# 差異即為隱藏內容
三、歷史命令篡改鑒別:.bash_history 指向 /dev/null
# 1. 檢查文件類型
ls -l ~/.bash_history
# 正常:-rw------- 1 user user 13829 Oct 10 17:06 /home/user/.bash_history
# 異常:lrwxrwxrwx 1 user user 9 Oct 10 19:40 /home/user/.bash_history -> /dev/null
# 2. 發現符號鏈接 → 立即斷網、備份數據、啟動應急預案
# 這是確鑿的入侵證據,攻擊者為了隱藏操作軌跡
# 3. 審計系統層面 (auditd) 不受 Shell 歷史影響
ausearch -m SYSCALL -ts today | grep -E "execve|unlink|rename"
# 可重建真實操作軌跡
四、異常賬號與權限提升排查
# 1. UID 0 賬號枚舉 (應僅有 root)
awk -F: '$3 == 0 {print $1}' /etc/passwd
# 輸出超過 root 即為後門賬號
# 2. sudo 權限異常
cat /etc/sudoers /etc/sudoers.d/*
# 檢查 NOPASSWD、ALL=(ALL) ALL 過度授權
# 3. SSH 公鑰植入
find /home -name authorized_keys -exec cat {} \;
# 檢查未授權公鑰、command 限制被繞過
# 4. 計劃任務後門
crontab -l; cat /etc/crontab; ls /etc/cron.*/
# 檢查反彈 Shell、下載執行、定時清理日誌
五、網絡連接與進程異常關聯分析
# 1. 可疑端口與進程
ss -ntulp | grep -v -E ":22|:80|:443|:3306" # 排除業務端口
netstat -ntulp # 舊版
# 2. 進程與打開文件關聯
lsof -i -P -n
# 發現進程連接未知外部 IP、打開敏感文件 (/etc/shadow、/root/.ssh/)
# 3. 內核模塊異常
lsmod | sort
cat /proc/modules | sort
# 對比差異,未知模塊極大概率為 LKM Rootkit
# 4. 內存取證 (Volatility/Lime)
# 需先獲取內存鏡像:LiME 模塊或 /dev/mem (受限)
vol.py -f mem.dmp linux_pslist
vol.py -f mem.dmp linux_lsof
vol.py -f mem.dmp linux_hidden_modules
vol.py -f mem.dmp linux_malfind
六、應急響應標準流程 (NIST SP 800-61 改良版)
- 準備:資產清單、基線配置、工具箱預置 (GRR、Velociraptor、Wazuh、OSSEC)、演練預案
- 識別:告警觸發 → 初步研判 (誤報/真實) → 定級 (P0-P3) → 通知相關方
- 遏制:
- 短期:隔離網絡 (防火牆/安全組)、封禁惡意 IP、殺毒進程
- 長期:修補漏洞、輪換憑證、重建受影響系統
- 根除:清理惡意代碼、移除後門、修復配置漂移、驗證乾淨
- 恢復:從乾淨備份恢復、驗證業務功能、監控復發跡象
- 復盤 (PIR):時間線重構、根因分析 (5 Whys)、改進措施落地、知識庫更新
七、自動化檢測腳本:每日巡檢基線
#!/bin/bash
# daily-security-audit.sh
LOG="/var/log/security-audit-$(date +%F).log"
{
echo "=== $(date) Security Audit ==="
echo "--- UID 0 accounts ---"
awk -F: '$3==0' /etc/passwd
echo "--- Suspicious crontabs ---"
for u in $(cut -d: -f1 /etc/passwd); do crontab -l -u $u 2>/dev/null; done
echo "--- World-writable files ---"
find / -xdev -type f -perm -0002 -ls 2>/dev/null | head -20
echo "--- SUID/SGID drift ---"
find / -xdev \( -perm -4000 -o -perm -2000 \) -ls 2>/dev/null | diff -u /var/lib/suid-baseline - || echo "DRIFT DETECTED"
echo "--- Package integrity ---"
rpm -Va 2>/dev/null | grep -v '^......... c /' | head -20
echo "--- Listening ports ---"
ss -ntulp
echo "--- Failed logins (last 24h) ---"
lastb -s -24hours
} | tee -a "$LOG"
# 基線建立
find / -xdev \( -perm -4000 -o -perm -2000 \) -ls > /var/lib/suid-baseline
法律聲明:本文技術僅供合法授權系統管理員防禦自身系統使用。未經授權掃描、滲透、取證他人系統屬違法行為。發現入侵請立即報警並聯繫專業安全團隊,切勿自行處理破壞證據鏈。