前幾天完成 FastAPI、React 與 SQLite 後,目前 AI SOC Dashboard 已經具備基本的前後端與資料儲存功能。不過目前 Dashboard 中顯示的 Security Event 主要還是先前建立的測試資料。
因此今天開始進入 SOC Dashboard 的另一個重要部分:取得並解析 Suricata 所產生的真實網路 Log。
Suricata 可以將監測到的網路活動記錄於 EVE JSON 中,預設可以在/var/log/suricata/eve.json找到。
首先確認檔案大小與目前的紀錄筆數:
sudo ls -lh /var/log/suricata/eve.json
sudo wc -l /var/log/suricata/eve.json

EVE JSON 的特色是每筆事件會以 JSON 格式記錄,其中可能包含來源 IP、目的 IP、Port、Protocol、Event Type 等資訊。
接著從 EVE JSON 中篩選 HTTP 類型的事件:
sudo grep '"event_type":"http"' /var/log/suricata/eve.json | tail -n 3

除了基本網路資訊之外,HTTP Event 中還可能包含 hostname、URL、HTTP Method 與 Status 等欄位。
為了更清楚確認 Suricata 是否能記錄自己產生的網路活動,我使用 curl 對 example.com 發送 HTTP Request:
curl http://example.com

接著搜尋 EVE JSON 中與 example.com 有關的紀錄:
sudo grep 'example.com' /var/log/suricata/eve.json | tail -n 5

從結果可以看到,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 直接顯示在網頁上,而是需要先進行解析與整理。
直接閱讀原始 EVE JSON 並不方便,因此接下來建立一個簡單的 Python Parser,只取出目前需要的 HTTP Event。
建立nano parse_suricata.py
接著執行:
sudo python3 parse_suricata.py
原本 EVE JSON 是很長的一整串資料,經過 Python 解析後,就可以整理成比較容易閱讀的形式:
這裡使用 json.loads() 將每一行 JSON 資料轉換成 Python 可以操作的 Dictionary,再透過 event_type 篩選 HTTP Event,最後取出需要的欄位。
今天將 Suricata 實際產生的 EVE JSON 與 Python 程式連接起來,整體流程可以整理成:
網路活動
↓
Suricata
↓
eve.json
↓
Python Parser
↓
篩選 HTTP Event
↓
取得 IP、Port、Protocol、Hostname 等資訊