iT邦幫忙

2026 iThome 鐵人賽

DAY 19
0

大家好!歡迎來到鐵人賽第十九天。

昨天我們完成了 SOAR 多節點聯防,讓系統可以從 Wazuh 偵測攻擊,再透過 n8n 將封鎖指令派送到多台主機。

但是收到一個 IP 之後,我們還有一個問題:

這個 IP 到底是不是惡意來源?

如果每次看到 IP 就直接封鎖,可能會造成誤判。因此今天我們要在「偵測」與「封鎖」之間加入一個新的步驟:

Threat Intelligence 情資豐富化。

這次會使用 VirusTotal API 查詢 IP 的相關情報,再交給 Gemini 整理,最後把結果送到 LINE,讓管理員在授權封鎖前先看到相關資訊。


情資豐富化是什麼?

昨天 Wazuh 偵測到攻擊時,我們可能只拿到:

Attack Type:SSH Brute Force
Source IP:攻擊來源 IP

這些資料還不夠判斷威脅程度。

因此今天會再透過 VirusTotal 查詢:

  • IP 所屬國家
  • 網路擁有者(AS Owner)
  • 各安全引擎的分析結果
  • 惡意、可疑等判定數量

最後把這些資料整合到原本的 SOAR 流程中。

注意:192.168.x.x 屬於私有內網 IP,無法代表真實的外部威脅情資。實際測試 VirusTotal API 時,應使用可公開查詢的公網 IP。


第一步:取得 VirusTotal API Key

首先前往 VirusTotal,登入帳號後取得 API Key。

將 API Key 保存好,不要直接寫在公開的 n8n 工作流或文章中。

在 n8n 實際使用時,也建議使用 Credentials 或其他安全方式保存。


第二步:使用 HTTP Request 查詢 IP

回到昨天的 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 不同而改變。


第三步:讓 Gemini 整理威脅情報

VirusTotal 回傳的 JSON 資料比較複雜,如果直接丟給管理員閱讀,資訊會太多。

因此接下來加入昨天已經使用過的:

Google Gemini

讓 AI 幫我們整理重點。

System Message

可以設定:

你是一位資安威脅分析助手。

請根據 Wazuh 告警與 VirusTotal 查詢結果,
整理一份簡短的威脅情報摘要。

請列出:
1. 攻擊類型
2. 攻擊來源 IP
3. IP 所屬國家
4. 網路擁有者
5. VirusTotal 惡意判定數量
6. 建議是否進一步封鎖

只能根據提供的資料回答,不要自行推測。
請使用繁體中文,控制在 100 字以內。

Message

接著將資料傳給 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,整理成簡單的威脅摘要。


第四步:把情資加入 LINE 審批

完成 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

因此管理員可以先查看情資,再決定是否執行封鎖。


第五步:串接完整 SOAR 流程

完成後,今天的攻擊處理流程就會變成:

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 不只能處理攻擊,也能協助完成日常資安維運工作。


上一篇
Day 18 | 從單機到聯防 —實作 SOAR 多節點自動化防禦
系列文
從漏洞告警到 AI 決策:Wazuh × RAG × n8n 實作自動化資安漏洞驗證與智慧通報 共 19 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言