在 Day 10 到 Day 12,我們將防禦體系逐步推展至 SIEM 集中監控、SOAR 自動化聯防與 EDR 端點行為偵測。然而,資安維運的實戰殘酷之處在於:即便擁有成熟的防護工具,仍必須預設最壞情況——「某台核心 Linux 主機已被攻擊者取得 Root 權限」。
過去做為網管,直覺反應可能是「立刻重開機以清空不明行程」或「登入主機狂敲 ps、netstat 找可疑程式」。但當我們站在 CISSP 安全營運(Domain 7) 與 ECIH / 鑑識實務 的視角,這些直覺動作往往是徹底破壞案發現場的元兇。
Day 13,我們從單純的防守與阻斷,正式跨入數位鑑識(Digital Forensics)與日誌保全的核心地帶。
在數位鑑識領域,最關鍵的基本法則是:「永遠先採集最脆弱、最容易消失的證據」。
當一台 Linux 伺服器傳出入侵警報,任何一個終端機指令(包括你敲下的 ls)都會改變系統狀態、改寫 inode 時間戳記(MACB timestamps),甚至覆寫快取。依據 RFC 3227 規範,取證必須依以下揮發性順序進行:
「拔線、取證、鏡像」看似標準,但在一線維運環境中,應變必須兼顧業務連續性。在決定隔離網路之前,先確保易失性記憶體的保全,是避免攻擊者透過無檔案(Fileless)技術全身而退的關鍵底線。
很多工程師習慣依賴 /var/log/secure 或 /var/log/messages 來排查入侵跡象。但在攻擊者取得 Root 或高權限 Shell 的瞬間,這些本機檔案便已失去證據能力:
要讓鑑識證據在法庭或事故調查報告中站得住腳,日誌必須具備不可否認性(Non-repudiation)與完整性(Integrity)。除了透過 Day 10 談過的 Syslog-over-TLS 將日誌即時推送到外部 WORM 儲存外,Linux 本機端必須啟動底層的內核級防護機制——auditd(Linux Audit Daemon)。
auditd 是 Linux 內核子系統(Kernel Subsystem)的一部分,它運作於作業系統的最底層。與一般應用程式日誌不同,auditd 直接監聽系統呼叫(System Calls, syscalls),哪怕攻擊者用自訂工具或別名繞過常規指令,只要觸發了內核操作,就一定會被客觀記錄。
在加固的核心伺服器上,我會要求團隊建立以下三類關鍵的審計規則(/etc/audit/rules.d/audit.rules):
記錄任何人對帳號密碼檔的寫入或屬性變更:
Bash
-w /etc/passwd -p wa -k identity_changes
-w /etc/shadow -p wa -k identity_changes
-w /etc/sudoers -p wa -k sudo_changes
攻擊者常用 SUID 程式(如 sudo、pkexec)進行橫向提權,必須記錄非一般使用者的系統呼叫:
Bash
-a always,exit -F arch=b64 -S setuid -S setgid -S setreuid -S setregid -k privilege_escalation
這是許多網管忽略但資安長極為看重的設定——防止攻擊者直接停用 auditd:
Bash
-e 2
-e 2 意味著將 auditd 規則鎖定在「不可變更(Immutable)」狀態。一旦設定生效,即使是本機 Root 帳號也無法透過 auditctl 刪除或修改任何規則,唯一解除鎖定的方法是重新啟動整個作業系統。這迫使攻擊者若要抹除軌跡,必須引發系統重開機,而這正是監控中心最容易察覺的告警特徵。
數位鑑識不是事後諸葛的補破網,而是平時就必須融入架構設計的工程。
從一線工程師的角度看,搞懂 RFC 3227 揮發性原則,能避免我們在危機時自亂陣腳、親手銷毀作案現場;而深入內核部署 auditd 與防竄改規則,則是為整座 Linux 環境安裝上不受應用程式干擾的「全時黑盒子」。
當我們能將攻擊者的每個系統呼叫、檔案讀寫與網路連線,在時間軸上一一嚴密拼接出來時,防守方才真正握有主導權,將被動受挫的被侵入現場,轉化為強化企業整體防線的寶貴情資。
PS:想了解何謂RFC 3227,可參考下列這篇文章
https://www.rfc-editor.org/info/rfc3227/ <<原文Guideline