前幾天的 BehaviorGuard 已經開始能夠監控 Process、Command 與 Network 行為。
目前大致可以分成:
今天進入第四個部分:File Detection(檔案行為偵測)。
檔案監控對端點偵測來說非常重要,因為攻擊者進入系統之後,不一定只會執行指令或建立網路連線,也可能修改系統設定、建立惡意腳本、修改帳號資料,甚至建立持久化機制。
因此今天的目標不是直接判斷「有沒有被攻擊」,而是先讓 BehaviorGuard 能夠看見 Linux 上發生的檔案行為。
今天需要使用 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。
接下來建立:
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 已經成功建立。
這是今天很重要的一個觀念。
假設:
test.txt
被修改了。
BehaviorGuard 可以看到:
MODIFIED
但這不代表系統遭到攻擊。
因為正常使用電腦時,本來就會不斷發生:
建立檔案
修改檔案
重新命名
刪除檔案
如果每一個 File Event 都產生 Security Alert,真實環境很快就會出現大量雜訊。
因此:
Event ≠ Alert
我們需要的是:
File System
↓
File Event
↓
Detection Rule
↓
判斷是否具有安全意義
↓
Alert
這也是 BehaviorGuard 從單純「監控程式」逐漸往行為偵測系統發展的重要一步。
今天新增:
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 的重要設定檔。
因此這些檔案如果突然被修改或刪除,就比普通文字檔被修改更值得注意。
今天建立的規則如下:
# 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
因為目前是在自己的 Kali VM 上開發 BehaviorGuard,我不希望為了測試 Detection Rule 而真的去修改重要系統檔案。
所以今天使用:
/tmp/behaviorguard_test/etc/passwd
模擬:
/etc/passwd
也就是:
/tmp/behaviorguard_test/etc/passwd
↓
測試環境映射
↓
/etc/passwd
這樣可以測試 Detection Logic,又不需要真的修改系統的重要設定。
首先測試敏感檔案:
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 成功。
但 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 思維:
不是看到行為就警告,而是判斷這個行為是否具有安全意義。
Telemetry 可以理解成系統收集到的原始行為資料。
今天 BehaviorGuard 已經能看到:
CREATED
MODIFIED
MOVED
DELETED
但 Telemetry 本身不代表攻擊。
Detection Engine 必須再根據規則判斷哪些事件值得注意。
不是所有檔案的重要程度都一樣。
例如:
hello.txt
被修改通常沒有太大的安全意義。
但:
/etc/passwd
/etc/shadow
/etc/sudoers
/etc/ssh/sshd_config
如果出現非預期修改,就值得進一步調查。
因此 Detection 不應只問:
「有沒有檔案被修改?」
而應該進一步問:
「哪一個檔案被修改?」
「發生什麼操作?」
「這個檔案重要嗎?」
之後還可以繼續加入:
「誰修改的?」
「是哪一個 Process 修改?」
「修改前執行過什麼 Command?」
「修改後有沒有建立 Network Connection?」
這些資訊未來就能進一步做 Event Correlation。
今天也再次碰到 False Positive 的概念。
如果規則寫成:
只要 MODIFIED → HIGH
那系統每天可能產生大量 Alert。
因此 BehaviorGuard 的方向不是單純增加規則數量,而是逐漸加入更多 Context,讓 Detection 更準確。
目前已經開始建立:
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 等事件進行關聯。
今天最大的進展不是多寫了一條 Rule,而是讓 BehaviorGuard 多了一種新的 Telemetry。
前面系統已經能觀察:
Process
Command
Network
今天加入:
File
BehaviorGuard 能看到的端點行為正在慢慢增加。
而今天我覺得最重要的一句話是:
Telemetry 告訴我們「發生了什麼」
Detection 告訴我們「這件事情是否值得注意」
下一步 Day 10,繼續完善 File Detection。