iT邦幫忙

2026 iThome 鐵人賽

DAY 11
0
AI Security

30 天打造 AI 輔助 SOC 資安事件分析平台系列 第 11 篇

Day 11|解析 Suricata Log : 從 EVE JSON 讀取真實網路事件

  • 分享至 

  • xImage
  •  

前幾天完成 FastAPI、React 與 SQLite 後,目前 AI SOC Dashboard 已經具備基本的前後端與資料儲存功能。不過目前 Dashboard 中顯示的 Security Event 主要還是先前建立的測試資料。
因此今天開始進入 SOC Dashboard 的另一個重要部分:取得並解析 Suricata 所產生的真實網路 Log。

1. 確認 Suricata EVE JSON

Suricata 可以將監測到的網路活動記錄於 EVE JSON 中,預設可以在/var/log/suricata/eve.json找到。
首先確認檔案大小與目前的紀錄筆數:

sudo ls -lh /var/log/suricata/eve.json
sudo wc -l /var/log/suricata/eve.json

https://ithelp.ithome.com.tw/upload/images/20260925/201777543BZrLaz3o5.png
EVE JSON 的特色是每筆事件會以 JSON 格式記錄,其中可能包含來源 IP、目的 IP、Port、Protocol、Event Type 等資訊。

2. 查看 HTTP Event

接著從 EVE JSON 中篩選 HTTP 類型的事件:

sudo grep '"event_type":"http"' /var/log/suricata/eve.json | tail -n 3

https://ithelp.ithome.com.tw/upload/images/20260925/20177754Kt5K2Oc3WG.png
除了基本網路資訊之外,HTTP Event 中還可能包含 hostname、URL、HTTP Method 與 Status 等欄位。

3. 主動產生一筆 HTTP 流量

為了更清楚確認 Suricata 是否能記錄自己產生的網路活動,我使用 curl 對 example.com 發送 HTTP Request:

curl http://example.com

https://ithelp.ithome.com.tw/upload/images/20260925/20177754cE3GpEeKAu.png
接著搜尋 EVE JSON 中與 example.com 有關的紀錄:

sudo grep 'example.com' /var/log/suricata/eve.json | tail -n 5

https://ithelp.ithome.com.tw/upload/images/20260925/20177754GnyhenvY2m.png
從結果可以看到,Suricata 成功記錄了這次連線所產生的多種事件,包括 DNS 查詢、DNS 回應、HTTP Request 以及 fileinfo。其中 HTTP Event 可以看到 src_ip、dest_ip、dest_port、proto、hostname、http_method 等資訊。

單一網路操作不一定只會產生一筆 Log。例如單純存取一個網站,就可能同時產生 DNS、HTTP 等不同類型的紀錄。
因此,如果未來要將 Suricata 的資料提供給 SOC Dashboard 使用,就不能單純把整份 EVE JSON 直接顯示在網頁上,而是需要先進行解析與整理。

4. 使用 Python 解析 EVE JSON

直接閱讀原始 EVE JSON 並不方便,因此接下來建立一個簡單的 Python Parser,只取出目前需要的 HTTP Event。
建立nano parse_suricata.py
https://ithelp.ithome.com.tw/upload/images/20260925/20177754vCMt1N4QH0.png
接著執行:

sudo python3 parse_suricata.py

原本 EVE JSON 是很長的一整串資料,經過 Python 解析後,就可以整理成比較容易閱讀的形式:
https://ithelp.ithome.com.tw/upload/images/20260925/20177754rvv2Dna2I9.png
這裡使用 json.loads() 將每一行 JSON 資料轉換成 Python 可以操作的 Dictionary,再透過 event_type 篩選 HTTP Event,最後取出需要的欄位。

小節

今天將 Suricata 實際產生的 EVE JSON 與 Python 程式連接起來,整體流程可以整理成:

網路活動
   ↓
Suricata
   ↓
eve.json
   ↓
Python Parser
   ↓
篩選 HTTP Event
   ↓
取得 IP、Port、Protocol、Hostname 等資訊

上一篇
Day 10|SQLite:讓 SOC Security Event 不再因伺服器重啟而消失
下一篇
Day 12|事件欄位標準化:把不同 Suricata Log 整理成統一格式
系列文
30 天打造 AI 輔助 SOC 資安事件分析平台 共 16 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言