前幾天已經完成 File Detection 的基本功能,目前 BehaviorGuard 可以偵測:
也就是說,當某些敏感檔案被修改、刪除,或是在暫存目錄建立可疑 Script、Hidden File 時,BehaviorGuard 已經可以產生 Alert。
不過做到這裡後,我發現一個問題。
目前系統知道的資訊還是太少。
原本 File Event 大概只有:
Action : CREATED
Path : /tmp/behaviorguard_test/test.sh
雖然已經知道「哪一個檔案發生什麼事情」,但如果要更接近真正的 Endpoint Security 或 EDR 產品,這些資訊其實還不夠。
因此 Day 12 的目標不是單純再增加很多 Rule,而是先把 File Telemetry 做得更完整。
Telemetry 可以理解成系統收集到的原始資訊。
例如:
CREATED
/tmp/test.sh
這就是最基本的 File Telemetry。
但真正做資安分析時,我們通常還會想知道:
這個檔案叫什麼?
副檔名是什麼?
在哪一個目錄?
是不是 Hidden File?
能不能執行?
檔案大小是多少?
Permission 是多少?
UID 是誰?
SHA-256 是多少?
所以今天把原本只有:
Action
Path
的事件,增加成:
Action
Path
File Name
Extension
Directory
Hidden
Executable
Size
Mode
UID
SHA256
這個過程就是 Telemetry Enrichment。
簡單來說就是:
原始事件
↓
補充更多 Context
↓
變成更有分析價值的事件
今天首先修改 file_monitor.py,建立 get_file_context()。
主要會取得:
filename
directory
extension
hidden
executable
size
mode
uid
例如建立:
echo "hello" > /tmp/behaviorguard_test/hello.txt
BehaviorGuard 現在會輸出:
和之前只有 Action、Path 相比,現在已經可以看到更多檔案 Context。
這些資訊未來都可以拿來做 Detection Rule。
Linux 的 Permission 裡面,可以決定一個檔案是不是可以執行。
例如:
0o664
代表這個檔案目前沒有 Execute Permission。
如果執行:
chmod +x test.sh
Permission 可能變成:
0o775
這代表檔案變成可以執行。
所以單純知道:
Executable = True
其實還不夠。
更重要的是:
原本不可執行
↓
後來變成可以執行
這種「前後狀態的變化」。
為了知道檔案之前的狀態,我加入:
self.file_state = {}
BehaviorGuard 會暫時記錄每個檔案最近一次的狀態。
例如:
/tmp/test.sh
Executable : False
Mode : 0o664
下一次這個檔案發生事件時,就可以拿新的狀態跟舊狀態比較。
所以 File Event 變成:
Current State
↓
Previous State
↓
比較
↓
State Transition
這裡開始就不只是單純看「檔案是什麼」,而是在看:
檔案發生了什麼變化?
今天新增第五條 File Detection Rule:
BG-FILE-005
Executable Permission Added
Severity : MEDIUM
這條規則主要偵測:
previous_executable = False
executable = True
也就是:
原本不可執行
↓
chmod +x
↓
變成可執行
實際測試:
echo '#!/bin/bash' > /tmp/behaviorguard_test/executable_test.sh
剛建立時:
Executable : False
Prev Exec : None
Mode : 0o664
接著:
chmod +x /tmp/behaviorguard_test/executable_test.sh
BehaviorGuard 看到:
Executable : True
Prev Exec : False
Mode : 0o775
Prev Mode : 0o664
最後成功產生:
代表 BehaviorGuard 已經開始具備 State-aware Detection。
看到一個檔案變成 Executable,不代表一定是攻擊。
例如正常的管理員或開發人員也常常會執行:
chmod +x install.sh
因此:
chmod +x
本身只能算是一個可疑訊號。
所以目前設定:
Severity : MEDIUM
未來如果同時看到:
curl 下載檔案
+
建立 Script
+
chmod +x
+
執行
+
對外連線
才有可能把整體風險提高成:
HIGH
甚至:
CRITICAL
這也是為什麼真正的資安產品不能只靠單一 Rule 判斷攻擊。
今天另外加入一個非常重要的 File Telemetry:
SHA-256
例如:
SHA256 :
61cd3e547505918659e637df981e70d41700a0daf8bd1075613252005bf2d286
Hash 可以理解成一個檔案內容的「指紋」。
假設:
malware
被改名成:
update.sh
或:
system_check
只要檔案內容完全一樣,SHA-256 通常還是一樣。
所以資安分析人員可以利用 Hash 判斷:
這幾個不同檔名,會不會其實是同一份檔案?
建立測試檔:
echo "BehaviorGuard test" > /tmp/behaviorguard_test/hash_test.txt
BehaviorGuard 顯示:
SHA256 :
61cd3e547505918659e637df981e70d41700a0daf8bd1075613252005bf2d286
接著使用 Linux 內建工具:
sha256sum /tmp/behaviorguard_test/hash_test.txt
得到:
61cd3e547505918659e637df981e70d41700a0daf8bd1075613252005bf2d286
兩邊完全相同。
代表 BehaviorGuard 的 SHA-256 計算成功。
今天測試時也發現:
echo "hello" > hello.txt
BehaviorGuard 可能會看到:
CREATED
MODIFIED
這不是 Bug。
因為從 File System 的角度來看,實際上可能是:
建立檔案
↓
寫入內容
↓
檔案被修改
所以 watchdog 會收到不只一個 Event。
這也是為什麼前一天加入 Alert Deduplication 很重要。
真實環境中的 Telemetry 本來就可能很多,如果每一個 Event 都直接變成 Alert,很容易造成 Alert Flood。
這次還看到一個很有意思的狀況:
CREATED
SHA256 = 61cd...
MODIFIED
SHA256 = 61cd...
雖然 watchdog 收到 MODIFIED Event,但 SHA-256 沒有改變。
這代表:
File System Event 發生,不一定代表檔案內容真的改變。
例如可能只是:
Permission
Metadata
Timestamp
發生變化。
未來 BehaviorGuard 就可以利用:
Previous SHA256
Current SHA256
進一步判斷:
Hash 相同
→ 內容可能沒有改變
Hash 不同
→ 檔案內容真的發生改變
這會比只看 MODIFIED 更準確。
目前 BehaviorGuard 的 File Detection 已經變成:
Linux File System
↓
watchdog
↓
File Event
↓
Telemetry Enrichment
↓
Filename
Extension
Directory
Size
UID
Permission
Executable
Hidden
SHA-256
↓
Previous State
↓
State Comparison
↓
Detection Engine
↓
File Detection Rules
↓
Alert Manager
↓
Deduplication / Suppression
↓
Alert
目前 File Rules:
BG-FILE-001
Sensitive File Modification
BG-FILE-002
Sensitive File Deletion
BG-FILE-003
Suspicious Script Creation
BG-FILE-004
Hidden File Creation
BG-FILE-005
Executable Permission Added
今天最重要的其實不是多寫一條 Rule,而是開始理解資安產品怎麼收集 Context。
第一個是:
Telemetry Enrichment
原始事件本身的資訊通常不夠,所以需要補充 Metadata。
第二個是:
State Transition
相比「現在是什麼狀態」,有時候「從什麼狀態變成什麼狀態」更有偵測價值。
第三個是:
File Hash
檔名可以改,但 Hash 可以用來辨識檔案內容。
第四個則是:
Event != Alert
不是每一個 File Event 都需要警告。
真正的 Detection 應該是:
Telemetry
↓
Context
↓
Behavior
↓
Rule
↓
Risk
↓
Alert
這也讓 BehaviorGuard 越來越不像單純的 Python Script,而是慢慢往 Endpoint Security Product 的架構前進。
今天完成:
File Telemetry Enrichment
+
File State Cache
+
State Transition Detection
+
BG-FILE-005
+
SHA-256 File Hash
目前 Process、Command、Network、File Detection 都已經有一定的基礎。
下一步 Day 13,準備開始進入:
Persistence Detection
也就是偵測攻擊者是否試圖讓惡意程式:
即使系統重新登入或重新開機,仍然可以再次被執行。