iT邦幫忙

0

Day17 BehaviorGuard:建立 Alert Logger,讓資安警告能夠保存下來

  • 分享至 

  • xImage
  •  

在 Day16,我們完成了 Continuous Process Monitor(連續程序監控),讓 BehaviorGuard 能夠持續觀察 Linux 系統中的程序,並透過 Detection Engine 判斷是否存在可疑行為。

例如,當系統執行 python3 -c 時,BehaviorGuard 就能根據先前建立的規則 BG-CMD-002,產生 MEDIUM 等級的 Alert。

不過,目前還有一個問題:

如果我們關閉 Terminal,之前產生的 Alert 該怎麼查詢?

真正的資安監控系統不能只把警告顯示在畫面上,還需要保存事件紀錄,讓資安人員能夠追蹤與調查。

因此,Day17 我們要建立一個簡單的 Alert Logger,把警告資訊儲存成 JSONL 格式。


一、什麼是 Security Logging?

Security Logging(安全日誌紀錄)是指將系統發生的安全相關事件記錄下來。

例如:

  • 哪個程序觸發警告?
  • 觸發了哪一條偵測規則?
  • 事件發生在什麼時間?
  • 這個事件的風險等級是多少?

在企業資安環境中,日誌紀錄非常重要。

因為資安人員不一定能在攻擊發生的當下立即發現問題,有時候需要透過歷史紀錄還原事件經過。

例如,某台電腦昨天晚上出現異常連線,資安人員就可以查看過去的 Alert,尋找可疑的程序與行為。

但要注意,Alert 並不代表一定發生了攻擊,而是系統發現了符合偵測規則的可疑行為,仍然需要進一步分析。


二、什麼是 JSONL?

JSONL(JSON Lines)是一種資料儲存格式,特點是每一行都包含一個獨立的 JSON 物件。

例如:

{"rule": "BG-CMD-002", "severity": "MEDIUM", "pid": 1234}
{"rule": "BG-NET-003", "severity": "MEDIUM", "pid": 5678}

與一般 JSON 陣列不同,JSONL 不需要將全部事件包在同一個陣列中。

這樣的好處是:

  1. 每次產生新的 Alert,只需要在檔案最後新增一行。
  2. 不需要每次都重新讀取整個檔案。
  3. 方便未來使用 Python 進行資料分析。
  4. 適合持續增加事件紀錄的監控系統。

因此,這次 BehaviorGuard 選擇使用 JSONL 儲存 Alert。


三、建立 Alert Logger

首先,在原本的 BehaviorGuard 專案中建立一個新檔案:

nano agent/alert_logger.py

接著加入以下程式:

import json
import os
from datetime import datetime, timezone

LOG_PATH = "logs/alerts.jsonl"


def save_alert(alert):

    os.makedirs("logs", exist_ok=True)

    record = {
        "timestamp": datetime.now(timezone.utc).isoformat(),
        **alert
    }

    with open(LOG_PATH, "a", encoding="utf-8") as f:
        f.write(json.dumps(record, ensure_ascii=False) + "\n")

    print("[INFO] Alert saved to logs/alerts.jsonl")

這段程式主要完成三件事情。

第一:建立日誌儲存位置

os.makedirs("logs", exist_ok=True)

這行程式會確認 logs 資料夾是否存在,如果不存在就自動建立。

第二:替 Alert 加入時間資訊

"timestamp": datetime.now(timezone.utc).isoformat()

這裡使用 UTC 時間,方便未來分析不同時區的安全事件。

第三:將 Alert 寫入檔案

with open(LOG_PATH, "a", encoding="utf-8") as f:
    f.write(json.dumps(record, ensure_ascii=False) + "\n")

其中 "a" 代表 Append(附加模式)。

也就是說,每次產生新的 Alert,都會附加到檔案最後,而不是覆蓋原本的紀錄。

這對持續監控的系統來說非常重要。


四、實際測試

完成 Alert Logger 後,我們先建立一筆模擬 Alert,測試資料是否能正確儲存。

執行:

PYTHONPATH=. python3 -c '
from agent.alert_logger import save_alert

save_alert({
    "rule": "BG-CMD-002",
    "name": "Python Inline Code Execution",
    "severity": "MEDIUM",
    "pid": 1234
})
'

成功執行後,Terminal 顯示:

[INFO] Alert saved to logs/alerts.jsonl

接著使用以下指令查看檔案:

cat logs/alerts.jsonl

實際取得的結果:

{"timestamp": "2026-10-13T08:09:34.069246+00:00", "rule": "BG-CMD-002", "name": "Python Inline Code Execution", "severity": "MEDIUM", "pid": 1234}

可以看到 Alert 已經成功保存,包含時間、規則編號、規則名稱、風險等級與 PID。

其中 +00:00 代表 UTC 時區,因此這筆紀錄換算成台灣時間為 2026 年 10 月 13 日下午 4 點 9 分。

這次測試成功,過程中沒有遇到錯誤。

不過,目前使用的 PID 1234 是模擬資料,並非這次實際偵測到的程序。


五、目前 BehaviorGuard 的架構

經過 Day17 的實作,我們新增了一個專門負責日誌儲存的模組。

目前的設計可以分成兩個部分:

原本的偵測流程:

Linux Process
      ↓
Process Monitor
      ↓
Detection Engine
      ↓
產生 Alert
      ↓
Correlation Engine

今天新增並測試的日誌功能:

模擬 Alert
      ↓
Alert Logger
      ↓
加入 Timestamp
      ↓
logs/alerts.jsonl
      ↓
保存事件紀錄

目前這兩個部分還沒有正式串接。

也就是說,BehaviorGuard 已經具備將 Alert 寫入檔案的能力,但還需要在後續實作中,讓 Detection Engine 產生的真實 Alert 自動呼叫 save_alert()。


六、今日心得

今天的實作雖然不多,但讓我更了解資安監控系統除了 Detection(偵測)之外,為什麼還需要 Logging(日誌紀錄)。

之前我們的重點一直放在如何偵測可疑程序、網路連線以及檔案異動,但如果沒有保存事件紀錄,後續就很難調查發生過什麼事情。

這次也學到了 JSONL 的用途,以及 Python 如何利用 Append 模式持續寫入資料,而不覆蓋原有內容。

另外,我也了解到時間戳記的重要性。如果未來要把不同程序、網路與檔案事件進行關聯分析,事件時間就是很重要的參考資訊。

目前的 Alert Logger 仍然是基礎版本,還沒有處理日誌輪替、檔案大小限制與長期保存等問題。

不過,這次已經成功完成最基本的日誌儲存功能。

下一篇 Day18,我們將把 Alert Logger 接進真正的 Detection 流程,讓 BehaviorGuard 偵測到可疑行為時,能夠自動將警告保存下來。


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

尚未有邦友留言

立即登入留言