iT邦幫忙

0

Day 12 File Telemetry Enrichment:讓 BehaviorGuard 不只是看到檔案,而是看懂檔案

  • 分享至 

  • xImage
  •  

前幾天已經完成 File Detection 的基本功能,目前 BehaviorGuard 可以偵測:

  • Sensitive File Modification
  • Sensitive File Deletion
  • Suspicious Script Creation
  • Hidden File Creation

也就是說,當某些敏感檔案被修改、刪除,或是在暫存目錄建立可疑 Script、Hidden File 時,BehaviorGuard 已經可以產生 Alert。

不過做到這裡後,我發現一個問題。

目前系統知道的資訊還是太少。

原本 File Event 大概只有:

Action : CREATED
Path : /tmp/behaviorguard_test/test.sh

雖然已經知道「哪一個檔案發生什麼事情」,但如果要更接近真正的 Endpoint Security 或 EDR 產品,這些資訊其實還不夠。

因此 Day 12 的目標不是單純再增加很多 Rule,而是先把 File Telemetry 做得更完整。


一、什麼是 Telemetry Enrichment?

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 Metadata

今天首先修改 file_monitor.py,建立 get_file_context()。

主要會取得:

filename
directory
extension
hidden
executable
size
mode
uid

例如建立:

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

BehaviorGuard 現在會輸出:

========== BehaviorGuard File Event ==========
Action : CREATED
Path : /tmp/behaviorguard_test/hello.txt
File Name : hello.txt
Extension : .txt
Directory : /tmp/behaviorguard_test
Hidden : False
Executable : False
Size : 6
Mode : 0o664
UID : 1000

和之前只有 Action、Path 相比,現在已經可以看到更多檔案 Context。

這些資訊未來都可以拿來做 Detection Rule。


三、為什麼 Executable 很重要?

Linux 的 Permission 裡面,可以決定一個檔案是不是可以執行。

例如:

0o664

代表這個檔案目前沒有 Execute Permission。

如果執行:

chmod +x test.sh

Permission 可能變成:

0o775

這代表檔案變成可以執行。

所以單純知道:

Executable = True

其實還不夠。

更重要的是:

原本不可執行
↓
後來變成可以執行

這種「前後狀態的變化」。


四、加入 File State Cache

為了知道檔案之前的狀態,我加入:

self.file_state = {}

BehaviorGuard 會暫時記錄每個檔案最近一次的狀態。

例如:

/tmp/test.sh

Executable : False
Mode : 0o664

下一次這個檔案發生事件時,就可以拿新的狀態跟舊狀態比較。

所以 File Event 變成:

Current State
↓
Previous State
↓
比較
↓
State Transition

這裡開始就不只是單純看「檔案是什麼」,而是在看:

檔案發生了什麼變化?


五、新增 BG-FILE-005

今天新增第五條 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 File Alert ==========
Rule : BG-FILE-005
Name : Executable Permission Added
Severity : MEDIUM
Action : MODIFIED
Path : /tmp/behaviorguard_test/executable_test.sh
Description : Execute permission was added to a file in a temporary location

代表 BehaviorGuard 已經開始具備 State-aware Detection。


六、為什麼這條 Rule 只有 MEDIUM?

看到一個檔案變成 Executable,不代表一定是攻擊。

例如正常的管理員或開發人員也常常會執行:

chmod +x install.sh

因此:

chmod +x

本身只能算是一個可疑訊號。

所以目前設定:

Severity : MEDIUM

未來如果同時看到:

curl 下載檔案
+
建立 Script
+
chmod +x
+
執行
+
對外連線

才有可能把整體風險提高成:

HIGH

甚至:

CRITICAL

這也是為什麼真正的資安產品不能只靠單一 Rule 判斷攻擊。


七、加入 SHA-256 File Hash

今天另外加入一個非常重要的 File Telemetry:

SHA-256

例如:

SHA256 :
61cd3e547505918659e637df981e70d41700a0daf8bd1075613252005bf2d286

Hash 可以理解成一個檔案內容的「指紋」。

假設:

malware

被改名成:

update.sh

或:

system_check

只要檔案內容完全一樣,SHA-256 通常還是一樣。

所以資安分析人員可以利用 Hash 判斷:

這幾個不同檔名,會不會其實是同一份檔案?


八、驗證 SHA-256

建立測試檔:

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

BehaviorGuard 顯示:

SHA256 :
61cd3e547505918659e637df981e70d41700a0daf8bd1075613252005bf2d286

接著使用 Linux 內建工具:

sha256sum /tmp/behaviorguard_test/hash_test.txt

得到:

61cd3e547505918659e637df981e70d41700a0daf8bd1075613252005bf2d286

兩邊完全相同。

代表 BehaviorGuard 的 SHA-256 計算成功。


九、一次 CREATED 為什麼還會看到 MODIFIED?

今天測試時也發現:

echo "hello" > hello.txt

BehaviorGuard 可能會看到:

CREATED
MODIFIED

這不是 Bug。

因為從 File System 的角度來看,實際上可能是:

建立檔案
↓
寫入內容
↓
檔案被修改

所以 watchdog 會收到不只一個 Event。

這也是為什麼前一天加入 Alert Deduplication 很重要。

真實環境中的 Telemetry 本來就可能很多,如果每一個 Event 都直接變成 Alert,很容易造成 Alert Flood。


十、Hash 沒變,但收到 MODIFIED

這次還看到一個很有意思的狀況:

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 更準確。


十一、目前 File Detection 架構

目前 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 的架構前進。


Day 12 完成

今天完成:

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

也就是偵測攻擊者是否試圖讓惡意程式:

即使系統重新登入或重新開機,仍然可以再次被執行。


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

尚未有邦友留言

立即登入留言