iT邦幫忙

0

Day18 BehaviorGuard:串接 Alert Logger,讓真實偵測事件自動保存

  • 分享至 

  • xImage
  •  

在 Day17,我們建立了 Alert Logger,讓 BehaviorGuard 可以把警告資訊儲存成 JSONL 格式。

不過,昨天使用的是手動建立的測試 Alert,還沒有真正連接到 Detection Engine。

因此,Day18 的目標很簡單:

當 BehaviorGuard 偵測到可疑程序時,除了在 Terminal 顯示警告,也要自動把 Alert 儲存到日誌檔案中。

這樣即使關閉監控程式,之前產生的警告紀錄也不會因為 Terminal 結束而消失。


一、為什麼要自動儲存 Alert?

在真實的資安環境中,端點偵測系統(EDR)不只是偵測可疑行為,還需要保留事件紀錄。

例如,某台 Linux 主機在凌晨執行了一段可疑的 Python 指令:

python3 -c 'import time; print("Day18 Test"); time.sleep(5)'

BehaviorGuard 可以透過之前建立的 BG-CMD-002 規則,識別 Python 直接從命令列執行程式碼的行為。

但如果只把 Alert 顯示在 Terminal,監控結束後,就不方便查詢之前的事件。

因此,我們希望建立以下流程:

Linux Process
      ↓
Process Monitor
      ↓
Detection Engine
      ↓
產生 Alert
      ↓
Alert Normalization
      ↓
 ┌───────────────┬───────────────┐
 ↓                               ↓
Correlation Engine          Alert Logger
事件關聯分析                 儲存 JSONL

這樣未來不只能夠進行即時偵測,也能透過保存的事件資料進行歷史分析。


二、今天的實作

今天不需要重新設計整個系統,只要修改原本的 agent/process_monitor.py,把 Day17 的 Alert Logger 接進來。

1. 匯入 Alert Logger

首先,在原本的 Import 區域加入:

from agent.alert_logger import save_alert

這裡的 save_alert() 就是昨天建立的函式,負責把 Alert 寫入 JSONL 檔案。

2. 將真正的 Alert 傳給 Logger

Day16 已經建立了 normalized_alert,會把偵測結果整理成統一格式。

其中包含:

  • Rule ID:觸發的規則編號
  • Severity:風險等級
  • PID / PPID:程序及其父程序編號
  • Process:程序名稱
  • Parent:父程序名稱
  • Ancestors:程序祖先關係
  • Command:實際執行的指令

因此,我們不需要另外建立一份 Alert,只需要在原本呼叫 Correlation Engine 的地方加入:

# 將 Alert 送進 Correlation Engine
add_alert(normalized_alert)

# Day18:將 Alert 儲存到 JSONL
save_alert(normalized_alert)

這兩行的工作不同。

add_alert() 負責將事件送入關聯分析引擎,而 save_alert() 則負責把事件儲存成日誌。

這也是今天學到的一個重要觀念:不同模組負責不同工作,讓系統更容易維護與擴充。


三、實際測試

完成程式修改後,我們在 Kali Linux 中進行測試。

1. 啟動 BehaviorGuard

首先進入專案:

cd ~/behaviorguard

啟動監控:

PYTHONPATH=. python3 agent/process_monitor.py

Terminal 顯示:

========== BehaviorGuard ==========
[INFO] Continuous monitoring started.
[INFO] Press Ctrl+C to stop.

代表連續監控已經開始。

2. 模擬可疑程序行為

接著打開第二個 Terminal,執行:

python3 -c 'import time; print("Day18 Test"); time.sleep(5)'

這是一個無害的測試指令,主要目的是觸發之前建立的 BG-CMD-002 規則。

python3 -c 代表直接從命令列執行 Python 程式碼,而 time.sleep(5) 則讓程序維持五秒,增加被監控程式觀察到的機會。

3. Detection Engine 成功觸發

回到第一個 Terminal,可以看到:

========== BehaviorGuard Detection ==========

[INFO] Alert saved to logs/alerts.jsonl

[ALERT] BG-CMD-002
Rule      : Python Inline Code Execution
Severity  : MEDIUM

PID       : 2515396
PPID      : 2515322
Process   : python3
Parent    : zsh
Ancestors : [2515322, 2515306, 2515300, 1]

Command   : python3 -c import time; print("Day18 Test"); time.sleep(5)

Reason    : Python executed code directly from the command line.

Total alerts: 1

這次除了成功觸發 BG-CMD-002,也出現了:

[INFO] Alert saved to logs/alerts.jsonl

代表 Alert Logger 已經執行儲存動作。

值得注意的是,python3 -c 本身不一定是惡意行為,許多正常的系統管理與開發工作也會使用。

因此我們將它標記為 MEDIUM,作為值得進一步觀察的事件,而不是直接認定主機遭到入侵。


四、確認日誌是否真的保存成功

完成偵測後,我們使用:

tail -n 2 logs/alerts.jsonl

第一次執行時,卻出現:

tail: cannot open 'logs/alerts.jsonl' for reading:
No such file or directory

原本以為是日誌寫入失敗,後來才發現是因為 Terminal 所在的位置不同。

當時第二個 Terminal 位於:

/home/kun

但 BehaviorGuard 的專案目錄是:

/home/kun/behaviorguard

由於 Logger 使用相對路徑 logs/alerts.jsonl,所以需要進入正確的專案目錄才能找到檔案。

修正方式:

cd ~/behaviorguard
tail -n 2 logs/alerts.jsonl

這次成功讀取到兩筆 BG-CMD-002 紀錄。

第一次偵測:

Timestamp : 2026-10-13T08:19:05.346746+00:00
Rule      : BG-CMD-002
Severity  : MEDIUM
PID       : 2515396
Parent    : zsh

第二次偵測:

Timestamp : 2026-10-13T08:20:47.086133+00:00
Rule      : BG-CMD-002
Severity  : MEDIUM
PID       : 2516296
Parent    : zsh

兩筆紀錄具有不同的 PID 與時間,證明 BehaviorGuard 能夠記錄不同時間執行的程序,而不只是保存同一筆測試資料。

這次也學到了 Linux 相對路徑與工作目錄的關係。


五、今天學到的資安觀念

1. Detection 與 Logging 的差別

Detection(偵測)主要負責判斷某個行為是否符合可疑規則。

Logging(日誌紀錄)則負責將事件資訊保存下來。

兩者雖然相關,但工作不同。

例如:

  • Detection:發現有人執行 python3 -c
  • Logging:記錄是誰執行、什麼時間執行、觸發了哪個規則

2. Alert Normalization(警告正規化)

不同偵測規則產生的資料可能不一樣。

例如,Process Alert 可能包含 PID,而 Network Alert 可能包含 IP 和 Port。

透過 Alert Normalization,可以將共同欄位整理成一致的格式,方便後續關聯分析與日誌處理。

3. Process Lineage(程序關係追蹤)

這次儲存的 Alert 也包含:

Process   : python3
Parent    : zsh
Ancestors : [2515322, 2515306, 2515300, 1]

透過這些資訊,可以知道程序是由哪個父程序啟動,以及更上層的程序關係。

未來如果發生可疑行為,資安人員就能利用這些資料協助調查事件來源。


六、今日心得

Day18 的程式修改其實只有兩行,但我認為這次實作很重要。

之前我們一直在建立不同的 Detection Rule,例如可疑指令、異常網路連線與檔案異動等。

但隨著系統功能逐漸增加,我發現不能只注意能不能成功偵測,也需要思考偵測到的資料要如何保存與使用。

今天將 Alert Logger 接入真實的 Detection 流程後,BehaviorGuard 已經可以在發現可疑程序時,自動將事件資訊保存到 JSONL 檔案。

另外,今天也遇到一個小問題,就是因為 Terminal 工作目錄不同,導致找不到日誌檔案。這讓我更了解 Linux 相對路徑的運作方式。

目前系統還沒有完整的日誌管理功能,例如檔案輪替、儲存空間限制以及集中式日誌管理,但基本的自動儲存流程已經完成。

下一篇 Day19,我們預計利用保存的 Alert 資料進行基本的風險等級統計,讓 BehaviorGuard 不只會產生警告,也能逐步整理與分析安全事件。


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言