昨天我們檢視了 Suricata 產生的各種不同事件(如 DNS Event、HTTP Event、fileinfo Event 等),發現它們各自擁有不同的 JSON 結構。
如果未來的 Dashboard 針對每一種事件都要寫不同的邏輯來處理,程式碼將會變得非常雜亂且難以維護。
因此今天要加入事件標準化,先將不同類型的 Suricata Event 整理成一致的資料結構。
Suricata 的 EVE JSON 可以記錄多種網路事件,不同 event_type 會有各自特有的欄位。雖然這種設計可以保留完整資訊,但對 Dashboard 而言,如果每種 Event 都使用不同格式,後續的儲存、搜尋、統計與 AI 分析都會比較困難。
所以今天定義:
timestamp
event_type
src_ip
src_port
dest_ip
dest_port
protocol
description
作為目前的共通欄位。
建立 normalize_events.py
cd ~/ai-soc-dashboard/backend
nano normalize_events.py
建立標準化函式
def normalize_event(event):
normalized = {
"timestamp": event.get("timestamp"),
"event_type": event.get("event_type"),
"src_ip": event.get("src_ip"),
"src_port": event.get("src_port"),
"dest_ip": event.get("dest_ip"),
"dest_port": event.get("dest_port"),
"protocol": event.get("proto"),
"description": ""
}
return normalized

透過 normalize_event(),不論輸入的是 HTTP 或 DNS Event,都先取得共同的網路欄位,再依照 Event Type 產生適合閱讀的 description。
執行
sudo python3 normalize_events.py
