iT邦幫忙

2026 iThome 鐵人賽

DAY 28
0
AI 自動化

從漏洞告警到 AI 決策:Wazuh × RAG × n8n 實作自動化資安漏洞驗證與智慧通報系列 第 28 篇

Day 28 | 抽絲剝繭 : 實作 SOAR 可疑檔案自動化沙箱分析

  • 分享至 

  • xImage
  •  

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

在前面的實作中,我們處理了「已知攻擊(如暴力破解)」與「已知惡意 IP」。但在資安防禦實務中,我們經常會遇到「未知」的威脅:例如員工下載了一個看似正常的 PDF 或執行檔,防毒軟體沒有發出警告,但行為卻十分可疑。

對於這類未知檔案,資安人員通常會將其丟進沙箱(Sandbox)中,在一個隔離的虛擬環境裡「引爆」它,觀察它是否會偷偷連線到中繼站、修改登錄檔或是植入後門。

如果每次都要手動上傳檔案分析,效率會非常低。因此,今天我們要實作「可疑檔案自動化沙箱分析」,讓 n8n 接收到 Wazuh 的檔案變更告警後,自動調用威脅分析 API,並讓 Gemini AI 解讀沙箱行為報告,最終將結果推送到 LINE。


情境設定:檔案完整性監控 (FIM) 與沙箱分析

  1. 偵測機制:Wazuh 內建的 FIM(File Integrity Monitoring)功能偵測到伺服器的 /tmp 目錄下被建立了一個可疑的執行檔,並在告警中附帶了該檔案的 SHA256 Hash(雜湊值)。
  2. 沙箱分析:我們將沿用 Day 19 註冊的 VirusTotal API。VirusTotal 除了靜態掃描,其底層也整合了多個動態沙箱(如 Cuckoo Sandbox),能提供檔案執行後的「行為特徵(Behavioral Data)」。
  3. AI 解讀:沙箱吐出的報告非常生硬(包含大量 API 呼叫與記憶體位置),我們將交由 Gemini 翻譯成人類易讀的摘要。

第一步:從 Wazuh 告警萃取檔案 Hash

當 Wazuh 的 FIM 模組發送告警到 n8n 的 Webhook 時,JSON 結構中會包含檔案的雜湊值。
在 Webhook 節點後方,我們可以透過以下變數取得該檔案的 SHA256 Hash:

  • File Path:{{ $json.body.syscheck.path }}
  • SHA256 Hash:{{ $json.body.syscheck.sha256_after }}

這個 Hash 值將是我們今天向沙箱查詢情報的「指紋」。


第二步:呼叫 VirusTotal 檔案分析 API

我們新增一個 HTTP Request 節點,用來查詢這個 Hash 在 VirusTotal 上的沙箱行為紀錄。

  • Method:GET
  • URL:[https://www.virustotal.com/api/v3/files/](https://www.virustotal.com/api/v3/files/){{ $json.body.syscheck.sha256_after }}
  • Authentication:選擇我們在 Day 24 建立的 VirusTotal API Key 憑證。

執行此節點後,VT 會回傳一份龐大的 JSON 報告。其中我們最需要關注的欄位是 data.attributes.meaningful_name(檔案可能偽裝的名稱)以及 data.attributes.popular_threat_classification(主流威脅分類,如 Ransomware 或 Trojan)。


第三步:透過 Gemini AI 產出沙箱行為摘要

取得沙箱報告後,我們新增一個 Google Gemini (Message a model) 節點,讓 AI 擔任我們的惡意程式分析師。

  • System Message (系統提示詞):
    你是一位專精於惡意程式與沙箱分析的資安專家。請根據以下擷取的檔案分析報告,判斷該檔案是否有惡意行為(如植入木馬、勒索、中繼站連線)。請用繁體中文撰寫一段 100 字以內的「沙箱分析摘要」,並給出【高風險】、【中風險】或【安全】的結論。
  • Message (使用者輸入):
【檔案基本資訊】
檔案路徑:{{ $('Webhook').item.json.body.syscheck.path }}
檔案 Hash:{{ $('Webhook').item.json.body.syscheck.sha256_after }}

【沙箱與威脅情報特徵】
檔案名稱:{{ $json.data.attributes.meaningful_name }}
威脅標籤:{{ $json.data.attributes.tags.join(', ') }}
防毒引擎偵測率:{{ $json.data.attributes.last_analysis_stats.malicious }} / 90
主流威脅分類:{{ JSON.stringify($json.data.attributes.popular_threat_classification) }}


第四步:發送沙箱分析報告至 LINE

經過 AI 濃縮後,我們就可以將這份具備高度價值的情報推送到 LINE,讓維運團隊決定下一步的動作。

新增一個 LINE HTTP Request 節點:

  • Method: POST
  • URL: [https://api.line.me/v2/bot/message/push](https://api.line.me/v2/bot/message/push)
  • Body (JSON):
{
  "to": "你的_LINE_群組_ID",
  "messages": [
    {
      "type": "text",
      "text": "📦 【沙箱分析報告】偵測到未知檔案變更\n\n📂 路徑:{{ $('Webhook').item.json.body.syscheck.path }}\n🔍 Hash:{{ $('Webhook').item.json.body.syscheck.sha256_after }}\n\n🔬 AI 沙箱行為解析:\n{{ $json.text }}"
    }
  ]
}


完整流程與測試

今天的「檔案沙箱分析」工作流架構如下:

Wazuh (FIM 模組偵測到可疑檔案建立)
 ↓
Webhook (取得 SHA256 Hash)
 ↓
HTTP Request (向 VirusTotal 查詢該 Hash 的沙箱行為)
 ↓
Gemini AI (解讀 JSON 報告,輸出威脅摘要)
 ↓
LINE HTTP Request (發送分析報告)

測試方法:
你可以手動在 Wazuh 監控的 Linux 伺服器上,使用 wget 下載一個 EICAR 測試檔(全球防毒軟體通用的無害測試病毒檔)到 /tmp 目錄下。Wazuh 偵測到後會觸發這條管線,你的 LINE 就會收到 AI 判讀出該檔案為「EICAR 測試病毒」的精準報告!


今天的成果

今天我們將 SOAR 系統的分析能力,從「單純的 IP」升級到了「檔案與沙箱層級」。

在傳統維運中,遇到不明檔案時,工程師需要花費數十分鐘手動下載、上傳沙箱、肉眼查看長篇大論的行為報告。透過 n8n 與 Gemini 的結合,系統在發現未知檔案的幾秒鐘內,就能自動完成情報收集與 AI 解讀,直接把「結論」送到你的手機裡。

明天(Day 29),鐵人賽即將進入尾聲。我們將實作這套系統的最後一塊拼圖:「一鍵生成 PDF 資安事件完整報告」,讓你的 SOAR 系統不只能自動防禦,還能幫你把結案報告排版得漂漂亮亮!我們明天見。


上一篇
Day 27 | 守護自動化的結晶 : 實作 SOAR 工作流備份與 Git 版本控制
下一篇
Day 29 | 完美收尾 :實作 SOAR 一鍵生成 PDF 資安事件報告
系列文
從漏洞告警到 AI 決策:Wazuh × RAG × n8n 實作自動化資安漏洞驗證與智慧通報 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言