大家好!歡迎來到鐵人賽第十九天。
昨天我們完成了 SOAR 多節點聯防,讓系統可以從 Wazuh 偵測攻擊,再透過 n8n 將封鎖指令派送到多台主機。
但是收到一個 IP 之後,我們還有一個問題:
這個 IP 到底是不是惡意來源?
如果每次看到 IP 就直接封鎖,可能會造成誤判。因此今天我們要在「偵測」與「封鎖」之間加入一個新的步驟:
Threat Intelligence 情資豐富化。
這次會使用 VirusTotal API 查詢 IP 的相關情報,再交給 Gemini 整理,最後把結果送到 LINE,讓管理員在授權封鎖前先看到相關資訊。
昨天 Wazuh 偵測到攻擊時,我們可能只拿到:
Attack Type:SSH Brute Force
Source IP:攻擊來源 IP
這些資料還不夠判斷威脅程度。
因此今天會再透過 VirusTotal 查詢:
最後把這些資料整合到原本的 SOAR 流程中。
注意:
192.168.x.x屬於私有內網 IP,無法代表真實的外部威脅情資。實際測試 VirusTotal API 時,應使用可公開查詢的公網 IP。
首先前往 VirusTotal,登入帳號後取得 API Key。
將 API Key 保存好,不要直接寫在公開的 n8n 工作流或文章中。
在 n8n 實際使用時,也建議使用 Credentials 或其他安全方式保存。
回到昨天的 n8n 工作流。
在「攻擊事件」分支中,加入:
HTTP Request
設定:
Method:
GET
URL:
https://www.virustotal.com/api/v3/ip_addresses/{{ $json.body.data.srcip }}
接著加入 Header:
Name:
x-apikey
Value:
你的 VirusTotal API Key
完成後執行節點。
如果 API 呼叫成功,就會得到一份 JSON 資料。
其中我們今天主要會使用:
data.attributes.country
data.attributes.as_owner
data.attributes.last_analysis_stats
例如:
Country:
US
AS Owner:
Example Network
Malicious:
5
實際結果會依查詢的 IP 不同而改變。
VirusTotal 回傳的 JSON 資料比較複雜,如果直接丟給管理員閱讀,資訊會太多。
因此接下來加入昨天已經使用過的:
Google Gemini
讓 AI 幫我們整理重點。
可以設定:
你是一位資安威脅分析助手。
請根據 Wazuh 告警與 VirusTotal 查詢結果,
整理一份簡短的威脅情報摘要。
請列出:
1. 攻擊類型
2. 攻擊來源 IP
3. IP 所屬國家
4. 網路擁有者
5. VirusTotal 惡意判定數量
6. 建議是否進一步封鎖
只能根據提供的資料回答,不要自行推測。
請使用繁體中文,控制在 100 字以內。
接著將資料傳給 Gemini:
【Wazuh 告警】
攻擊手法:
{{ $('Webhook').item.json.body.rule.description }}
攻擊來源:
{{ $('Webhook').item.json.body.data.srcip }}
【VirusTotal 情資】
國家:
{{ $json.data.attributes.country }}
網路擁有者:
{{ $json.data.attributes.as_owner }}
惡意判定:
{{ $json.data.attributes.last_analysis_stats.malicious }}
可疑判定:
{{ $json.data.attributes.last_analysis_stats.suspicious }}
這樣 Gemini 就會將原本比較難閱讀的 JSON,整理成簡單的威脅摘要。
完成 AI 分析後,就可以接回 Day 18 的 HITL 流程。
原本 LINE 收到的可能只有:
🚨 偵測到 SSH Brute Force
來源 IP:
XXX.XXX.XXX.XXX
是否封鎖?
現在可以加入 VirusTotal 與 Gemini 的分析:
🚨 資安事件告警
攻擊手法:
SSH Brute Force
來源 IP:
XXX.XXX.XXX.XXX
🧠 AI 威脅情報分析:
{{ $json.text }}
請確認是否授權進行聯防封鎖。
接著保留原本的:
授權按鈕 → Wait → 多節點 SSH
因此管理員可以先查看情資,再決定是否執行封鎖。
完成後,今天的攻擊處理流程就會變成:
Wazuh
↓
偵測攻擊
↓
Switch
↓
取得 Source IP
↓
VirusTotal API
↓
取得威脅情報
↓
Gemini AI
↓
整理威脅摘要
↓
LINE
↓
人工審批
↓
Wait
↓
多節點 SSH
↓
封鎖 IP
↓
Google Sheets
↓
更新工單
這樣就把昨天的「多節點聯防」與今天的「Threat Intelligence」串接起來了。
今天我們替原本的 SOAR 流程加入了 Threat Intelligence 情資豐富化。
昨天系統收到攻擊 IP 後,主要做的是:
偵測 → 封鎖
今天則變成:
偵測 → 查詢情資 → AI 分析 → 人工審批 → 多節點封鎖
管理員在 LINE 收到通知時,不再只有一個 IP,而是可以同時看到 VirusTotal 提供的相關資訊,再決定是否執行後續的封鎖。
到這裡,我們的 SOAR 已經逐漸形成一個完整的事件處理流程:
Wazuh 負責偵測、VirusTotal 提供情資、Gemini 負責整理、n8n 負責協調、LINE 負責人工審批。
明天 Day 20,我們將把焦點從「處理突發事件」轉向「日常維運」,實作自動化的系統巡檢與報表產生,讓 SOAR 不只能處理攻擊,也能協助完成日常資安維運工作。