iT邦幫忙

0

Day 9 BehaviorGuard File Detection — 開始監控檔案系統行為

  • 分享至 

  • xImage
  •  

前幾天的 BehaviorGuard 已經開始能夠監控 Process、Command 與 Network 行為。

目前大致可以分成:

  • Process Detection
  • Command Detection
  • Network Detection
  • File Detection
  • Persistence Detection
  • Correlation
  • Response

今天進入第四個部分:File Detection(檔案行為偵測)。

檔案監控對端點偵測來說非常重要,因為攻擊者進入系統之後,不一定只會執行指令或建立網路連線,也可能修改系統設定、建立惡意腳本、修改帳號資料,甚至建立持久化機制。

因此今天的目標不是直接判斷「有沒有被攻擊」,而是先讓 BehaviorGuard 能夠看見 Linux 上發生的檔案行為。


一、建立 Python Virtual Environment

今天需要使用 Python 的 watchdog 套件。

原本直接執行:

python3 -m pip install watchdog

Kali Linux 出現:

externally-managed-environment

這是因為 Kali 不建議直接使用 pip 修改系統 Python 環境。

因此我在 BehaviorGuard 專案建立 Virtual Environment:

python3 -m venv .venv

啟用:

source .venv/bin/activate

接著安裝:

python -m pip install watchdog

最後測試:

python -c "import watchdog; print('watchdog OK')"

成功看到:

watchdog OK

這樣 BehaviorGuard 就有自己的 Python 執行環境,不需要直接修改 Kali 的系統 Python。


二、建立 File Monitor

接下來建立:

agent/file_monitor.py

今天先監控測試目錄:

/tmp/behaviorguard_test

而不是直接監控整個 Linux 系統。

啟動 File Monitor:

python agent/file_monitor.py

顯示:

[BehaviorGuard] File Monitor started...
[BehaviorGuard] Watching: /tmp/behaviorguard_test

接著在另外一個 Terminal 製造一些檔案行為。

例如建立檔案:

echo "hello BehaviorGuard" > /tmp/behaviorguard_test/test.txt

重新命名:

mv /tmp/behaviorguard_test/test.txt /tmp/behaviorguard_test/hello.txt

最後刪除:

rm /tmp/behaviorguard_test/hello.txt

BehaviorGuard 成功觀察到:

CREATED
MODIFIED
MOVED
DELETED

代表 File Telemetry 已經成功建立。


三、File Event 不等於 Security Alert

這是今天很重要的一個觀念。

假設:

test.txt

被修改了。

BehaviorGuard 可以看到:

MODIFIED

但這不代表系統遭到攻擊。

因為正常使用電腦時,本來就會不斷發生:

建立檔案
修改檔案
重新命名
刪除檔案

如果每一個 File Event 都產生 Security Alert,真實環境很快就會出現大量雜訊。

因此:

Event ≠ Alert

我們需要的是:

File System
     ↓
File Event
     ↓
Detection Rule
     ↓
判斷是否具有安全意義
     ↓
Alert

這也是 BehaviorGuard 從單純「監控程式」逐漸往行為偵測系統發展的重要一步。


四、建立第一條 File Detection Rule

今天新增:

detection/file_rules.py

第一條規則:

BG-FILE-001
Sensitive File Modification

我們先定義幾個重要的 Linux 系統檔案:

SENSITIVE_FILES = [
    "/etc/passwd",
    "/etc/shadow",
    "/etc/sudoers",
    "/etc/ssh/sshd_config"
]

這些檔案具有不同的安全意義,例如:

/etc/passwd

包含 Linux 使用者帳號相關資訊。

/etc/shadow

與帳號密碼驗證資訊有關。

/etc/sudoers

控制使用者可以透過 sudo 執行哪些權限操作。

/etc/ssh/sshd_config

則是 SSH Server 的重要設定檔。

因此這些檔案如果突然被修改或刪除,就比普通文字檔被修改更值得注意。


五、BG-FILE-001

今天建立的規則如下:

# BehaviorGuard - File Detection Rules


SENSITIVE_FILES = [
    "/etc/passwd",
    "/etc/shadow",
    "/etc/sudoers",
    "/etc/ssh/sshd_config"
]


def detect_sensitive_file_modification(event):
    """
    BG-FILE-001
    Detect modifications to sensitive system files.
    """

    action = event.get("action", "").upper()
    path = event.get("path", "")

    test_prefix = "/tmp/behaviorguard_test"

    normalized_path = path

    if path.startswith(test_prefix):
        normalized_path = path[len(test_prefix):]

    if (
        action in ["MODIFIED", "DELETED"]
        and normalized_path in SENSITIVE_FILES
    ):
        return {
            "rule_id": "BG-FILE-001",
            "rule_name": "Sensitive File Modification",
            "severity": "HIGH",
            "description": (
                f"Sensitive system file {normalized_path} "
                f"was {action.lower()}."
            )
        }

    return None

六、為什麼不用真的修改 /etc/passwd?

因為目前是在自己的 Kali VM 上開發 BehaviorGuard,我不希望為了測試 Detection Rule 而真的去修改重要系統檔案。

所以今天使用:

/tmp/behaviorguard_test/etc/passwd

模擬:

/etc/passwd

也就是:

/tmp/behaviorguard_test/etc/passwd
            ↓
       測試環境映射
            ↓
        /etc/passwd

這樣可以測試 Detection Logic,又不需要真的修改系統的重要設定。


七、Positive Test

首先測試敏感檔案:

from detection.file_rules import detect_sensitive_file_modification

event = {
    "action": "MODIFIED",
    "path": "/tmp/behaviorguard_test/etc/passwd"
}

detect_sensitive_file_modification(event)

BehaviorGuard 成功回傳:

BG-FILE-001
Sensitive File Modification
Severity: HIGH

並顯示:

Sensitive system file /etc/passwd was modified.

代表第一條 File Detection Rule 成功。


八、Negative Test

但 Detection Rule 不能只測「會不會抓到」。

還要測:

正常行為會不會被亂抓?

因此再建立普通事件:

event = {
    "action": "MODIFIED",
    "path": "/tmp/behaviorguard_test/hello.txt"
}

detect_sensitive_file_modification(event)

結果:

None

也就是:

/etc/passwd
   ↓
MODIFIED
   ↓
BG-FILE-001
   ↓
HIGH Alert


hello.txt
   ↓
MODIFIED
   ↓
No Alert

這就是今天很重要的 Detection 思維:

不是看到行為就警告,而是判斷這個行為是否具有安全意義。


九、今天學到的資安觀念

1. File Telemetry

Telemetry 可以理解成系統收集到的原始行為資料。

今天 BehaviorGuard 已經能看到:

CREATED
MODIFIED
MOVED
DELETED

但 Telemetry 本身不代表攻擊。

Detection Engine 必須再根據規則判斷哪些事件值得注意。


2. Sensitive File

不是所有檔案的重要程度都一樣。

例如:

hello.txt

被修改通常沒有太大的安全意義。

但:

/etc/passwd
/etc/shadow
/etc/sudoers
/etc/ssh/sshd_config

如果出現非預期修改,就值得進一步調查。

因此 Detection 不應只問:

「有沒有檔案被修改?」

而應該進一步問:

「哪一個檔案被修改?」
「發生什麼操作?」
「這個檔案重要嗎?」

之後還可以繼續加入:

「誰修改的?」
「是哪一個 Process 修改?」
「修改前執行過什麼 Command?」
「修改後有沒有建立 Network Connection?」

這些資訊未來就能進一步做 Event Correlation。


3. False Positive

今天也再次碰到 False Positive 的概念。

如果規則寫成:

只要 MODIFIED → HIGH

那系統每天可能產生大量 Alert。

因此 BehaviorGuard 的方向不是單純增加規則數量,而是逐漸加入更多 Context,讓 Detection 更準確。


十、目前 BehaviorGuard 進度

目前已經開始建立:

BehaviorGuard
│
├── Process Detection
│
├── Command Detection
│
├── Network Detection
│
└── File Detection
      │
      ├── File Telemetry
      │     ├── CREATED
      │     ├── MODIFIED
      │     ├── MOVED
      │     └── DELETED
      │
      └── BG-FILE-001
            Sensitive File Modification

今天先完成 File Detection 的基礎,不急著一次加入很多規則。

下一步會把 File Monitor、Detection Engine 與 File Rules 串起來:

Linux File System
        ↓
File Monitor
        ↓
File Event
        ↓
Detection Engine
        ↓
File Detection Rules
        ↓
Security Alert

後續再慢慢增加更多 File Detection 行為,最後再與 Process、Command、Network 等事件進行關聯。


Day 9 小結

今天最大的進展不是多寫了一條 Rule,而是讓 BehaviorGuard 多了一種新的 Telemetry。

前面系統已經能觀察:

Process
Command
Network

今天加入:

File

BehaviorGuard 能看到的端點行為正在慢慢增加。

而今天我覺得最重要的一句話是:

Telemetry 告訴我們「發生了什麼」
Detection 告訴我們「這件事情是否值得注意」

下一步 Day 10,繼續完善 File Detection。


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

尚未有邦友留言

立即登入留言