大家好!歡迎來到鐵人賽第二十三天。
隨著我們前幾天將 SOAR 的防禦網建立得越來越完整(自動分析、聯防封鎖),系統的敏感度也隨之提高。在真實的企業環境中,這往往會帶來一個副作用:誤報(False Positives)。
例如,IT 團隊的網管人員每天都需要遠端登入伺服器,或者公司內部有定期的弱點掃描工具(如 Nessus)正在對網段進行掃描。這些正常的維運行為,很容易觸發 Wazuh 的暴力破解或攻擊告警。如果每一次都要資安人員在 LINE 上按「拒絕封鎖」,久而久之就會產生「告警疲勞(Alert Fatigue)」,甚至導致真正發生攻擊時被忽略。
因此,今天我們要為這套 SOAR 系統導入「動態白名單(Allowlist)與豁免機制」,讓系統學會辨識「自己人」,從源頭過濾掉已知的安全行為。
假設公司內部的弱點掃描伺服器 IP 為 10.0.0.55。
當 Wazuh 偵測到來自這個 IP 的大量異常連線時,我們希望 n8n 在進入 AI 分析與 LINE 通報「之前」,就能先查閱「白名單資料庫」。如果是授權的 IP,就直接略過或僅作低級別紀錄;如果不是,才進入標準的防禦流程。
為了方便非技術人員(如 IT 主管)也能隨時新增或移除白名單,我們再次運用萬用的 Google Sheets。
Active / Inactive)在表格中輸入一筆測試資料,將 IP Address 填入 10.0.0.55,Status 設為 Active。
回到處理 Wazuh 告警的 n8n 工作流。我們要將「檢查」這個動作,安插在 Webhook 收到告警之後的第一關。
Lookup(在舊版 n8n 可能是 Read Rows 搭配 Filter)。IP Address。{{ $json.body.data.srcip }}。這個節點的功用是:拿著攻擊者的 IP,去試算表裡面比對看看有沒有符合的紀錄。
檢查完畢後,我們需要根據檢查結果來決定下一步。
在 Google Sheets 節點後方,新增一個 If 節點(條件判斷):
{{ $json.Status }} Equal Active。If 節點會產生兩條分支:
Append Row 節點,在日誌中靜靜留下一筆「自動豁免」的紀錄,然後直接結束流程,不發送 LINE 告警。經過今天的改良,我們的核心 SOAR 工作流變得更加成熟,架構如下:
Wazuh (觸發告警)
↓
Webhook
↓
Google Sheets (比對動態白名單)
↓
If 節點 (判斷是否為已知安全 IP)
├── True (命中白名單) ➡ 寫入豁免紀錄 ➡ 流程結束 (不打擾維運人員)
│
└── False (未知威脅) ➡ VirusTotal 查詢
↓
Gemini AI 摘要
↓
LINE 審批卡片
↓
執行聯防封鎖
今天我們為 SOAR 系統實作了非常關鍵的「例外處理(Exception Handling)」機制。
一套好的自動化系統,不只要能精準打擊,還要能「減少噪音」。透過整合 Google Sheets 作為動態白名單,我們把系統調整規則的權力交還給了管理團隊,而且完全不需要動到任何程式碼。IT 人員只要在試算表上新增一行 IP,就能立刻讓該 IP 獲得豁免。
這大幅降低了資安團隊的「告警疲勞」,確保每一則傳送到 LINE 上的審批通知,都是真正需要人類介入處理的高價值威脅。
明天(Day 24),我們將探討資安維運中的另一個重要議題:「憑證與金鑰管理」。當 n8n 串接了這麼多外部 API(VirusTotal、LINE、Google),我們要如何確保這些敏感 Token 的安全?我們明天見!