EVE 是 Suricata 很重要的事件輸出機制,可以將 Suricata 觀察到的網路活動以 JSON 格式記錄。
如果 Suricata 已經把事件整理成 JSON,後面的 Python 就可以比較方便地讀取欄位,而不需要從一整串文字 Log 中自行切割資料。
啟動 Suricata 並監控 Ubuntu VM 的 ens33 網路介面
產生一些正常網路流量
另外開一個新的 Terminal輸入
ping -c 4 8.8.8.8
curl http://example.com

看看 eve.json 是否真的有東西
檔案已經開始累積資料,代表 Suricata 確實正在將觀察到的網路事件記錄下來。
打開 eve.json 輸入
sudo head -n 3 /var/log/suricata/eve.json

這就是真正由 Suricata 產生的事件。
現在看起來很難讀,這也是為什麼我們後面需要 Event Parser。
我們可以使用 jq:
sudo apt install jq -y
sudo head -n 1 /var/log/suricata/eve.json | jq .

EVE JSON 裡哪些欄位值得注意?
| 欄位 | 意義 |
|---|---|
| timestamp | 事件發生時間 |
| event_type | 事件類型 |
| src_ip | Source IP |
| src_port | Source Port |
| dest_ip | Destination IP |
| dest_port | Destination Port |
| proto | 網路協定 |
| in_iface | 事件來自哪個網路介面 |
關於event_type,不是每一筆 EVE JSON 都代表攻擊,Suricata 可能記錄不同種類的事件,如 flow、dns、http、tls、alert、stats。
要找出不同 event_type,可以直接讓 Linux 幫我們統計:
sudo jq -r '.event_type' /var/log/suricata/eve.json | sort | uniq -c

今天實際讓 Suricata 運行並監控網路流量,檢視了產生的 eve.json。其中涵蓋了 flow、dns、http、tls 等多種不同的事件類型。
整體資料流為Network Traffic--> Suricata--> EVE JSON--> 不同 event_type--> 挑出需要分析的 Security Event--> AI Analysis,因此實作時不能直接將整份 eve.json 傳送給 AI,而是必須先透過程式篩選與整理出目標 Security Event,再交由 LLM 進行後續分析。