30 天前,我在 Day 1 寫下:
對於這些工具和技術實際上如何串在一起,以及資安人員收到一筆告警後到底要如何分析,我其實沒有完整的概念。
今天是最後一天。這篇文章會整理這 30 天完成了什麼、最後的系統長什麼樣子,並且試著想如果要把這個學習實作當成一個產品來介紹,它是什麼?還差什麼?
| 階段 | 天數 | 內容 |
|---|---|---|
| 資安基礎 | Day 1–5 | SOC、SIEM、IDS、XDR、Suricata、EVE JSON、MITRE ATT&CK |
| Web 系統 | Day 6–10 | FastAPI、REST API、React、前後端串接、SQLite |
| 事件處理 | Day 11–15 | 解析 Suricata Log、欄位標準化、Severity 分類、搜尋、統計 |
| AI 分析 | Day 16–21 | 串接 LLM API、Prompt Engineering、Structured Output、Severity 分工、處置建議、MITRE ATT&CK Mapping |
| 系統整合 | Day 22–24 | 事件分析 API、Analyze with AI、AI Analysis Panel |
| 完善流程 | Day 25–29 | 測試案例、保存分析結果、Suricata 匯入、Human Decision、案例實測 |
Suricata
↓
EVE JSON
↓
ingest_suricata.py ──────────┐
(只匯入 Alert、避免重複) │
↓
┌──────────────┐
│ SQLite │
│ events │ ← 原始事件 + 人工判斷
│ ai_analyses │ ← AI 分析結果
└──────────────┘
↑↓
┌──────────────┐ ┌──────────┐
│ FastAPI │ ←────→ │ Gemini │
│ Severity 規則 │ │摘要、風險│
│ 搜尋、統計 │ │建議、MITRE│
└──────────────┘ └──────────┘
↑↓
┌──────────────┐
│ React │
│ SOC Dashboard│ ←────→ SOC 分析人員
└──────────────┘ (最終判斷)
和 Day 1 相比,最大的差別有兩個:
| 功能 | 說明 | 完成於 |
|---|---|---|
| 事件匯入 | 從 Suricata EVE JSON 匯入告警,自動略過重複與不完整的資料 | Day 27 |
| 事件列表與搜尋 | 依事件類型、IP、Protocol、Signature 搜尋 | Day 14 |
| 統計 | 事件總數、風險等級、事件類型與處理狀態 | Day 15、28 |
| AI 事件分析 | 以繁體中文產生摘要、攻擊類型、風險與建議處置 | Day 16–20 |
| MITRE ATT&CK 對應 | 對應 Technique,證據不足時回答 Unknown | Day 21 |
| 分析結果保存 | 分析結果存入資料庫,可重新分析 | Day 26 |
| 人工判斷 | 分析人員標記 Confirmed、False Positive 並留下備註 | Day 28 |
Day 1 希望系統可以「讀取資安事件,並利用 AI 協助產生事件摘要、風險等級、可能的攻擊行為、MITRE ATT&CK 對應,以及初步的處置建議」。
| Day 1 的目標 | 結果 |
|---|---|
| 讀取資安事件 | 完成,可以匯入 Suricata 告警 |
| 事件摘要 | 完成 |
| 風險等級 | 完成,但改由 Backend 依照規則決定,而不是交給 AI |
| 可能的攻擊行為 | 完成 |
| MITRE ATT&CK 對應 | 完成,需人工確認 |
| 初步的處置建議 | 完成,限制為調查與處置建議,不自動執行 |
| 用不同案例測試 | 完成,Day 29 |
其中「風險等級」是和原本規劃不同的地方。Day 19 因為讀者的建議,把 Severity 的判斷從 LLM 移回 Backend。這個改變後來影響了整個系統的設計方向:確定的事情用規則處理,需要解釋的事情才交給 AI。
AI SOC Dashboard 是一個協助資安新手看懂 IDS 告警的分析平台。它把 Suricata 產生的告警整理成可以搜尋的事件列表,由 AI 用中文說明每一筆告警代表什麼、可能有什麼風險、接下來應該調查什麼,最後由分析人員記錄自己的判斷。
它想解決的問題
Suricata 這類開源 IDS 是免費的,但它產生的告警對初學者來說很難閱讀。一條像 ET EXPLOIT Apache Log4j RCE Attempt 的告警,需要具備相當的背景知識才知道它代表什麼、嚴不嚴重、下一步該做什麼。
大型企業可以購買商用的 SIEM 與 XDR,也有專職的 SOC 團隊。但沒有資安專職人員的小型團隊、正在學習資安的學生,往往是架好了 IDS,卻看不懂它在說什麼。
這套系統目前是一個可以展示完整流程的雛型,如果要讓其他人實際使用,至少還需要補上的部分:
| 缺少的部分 | 為什麼重要 |
|---|---|
| 登入與權限管理 | 目前任何連得到的人都可以查看與修改事件 |
| 操作紀錄 | 目前只保存最新的判斷,沒有記錄是誰、在什麼時候修改 |
| 即時匯入 | 目前需要手動執行匯入程式 |
| 事件關聯分析 | AI 一次只分析一筆事件,看不到多筆事件之間的關係 |
| 更完整的事件內容 | 目前只傳送 Signature 層級的資訊給 AI |
| 資料外送的控管 | 事件內容會傳送到外部的 LLM 服務,企業環境需要評估是否允許,或改用可以自行架設的模型 |
| 資料庫與部署 | SQLite 適合單機使用,多人同時使用需要更換資料庫並規劃部署方式 |
| AI 分析品質的評估 | 目前只用少數案例人工檢查,沒有系統化的測試方式 |
如果繼續發展,我會依照這個順序進行:
這 30 天對我來說最大的收穫,是把原本只是「聽過」的名詞變成自己實際串接過的東西。現在看到 SOC、IDS、EVE JSON、MITRE ATT&CK,我想到的不再只是定義,而是它們在系統中各自負責哪一段。
第二個收穫是對「AI 應該放在哪裡」的想法改變了。一開始我以為做一個 AI 資安平台,重點是讓 AI 做越多事情越好。但實際開發之後,我反而花了很多時間在限制 AI:Severity 不給它判斷、不讓它編造 Technique、不讓它直接決定處置、最後還加上人工判斷。系統裡真正交給 AI 的,只有「把難懂的告警解釋成人看得懂的內容」這一件事,而這剛好也是它做得最好的事。
第三個是關於持續。30 天裡有很多天是在很晚的時候才完成當天的進度,也有寫到一半發現前面的設計需要修改的時候。但每天只往前推進一小步,30 天之後回頭看,確實完成了一套從資料來源到使用者介面都有的系統。
最後,謝謝這段時間閱讀與留言的讀者,特別是 Day 18 提出 Severity 問題的讀者,那個建議改變了整個系統後半段的設計。
這個系列到這裡結束,但這套系統還有很多可以繼續做的地方。謝謝大家。