昨天介紹了 Wazuh 的 FIM(File Integrity Monitoring,檔案完整性監控),可以用來監控重要檔案是否遭到建立、修改或刪除。
但這時我產生了一個問題:
Wazuh 到底怎麼知道檔案被修改了?難道一直重新掃描檔案嗎?
今天就來看看 Wazuh Real-time FIM 背後一個很重要的 Linux 機制:inotify。
最直覺的檔案監控方式,就是定期檢查檔案狀態。
例如:
第一次掃描 → Hash A
↓
檔案被修改
↓
第二次掃描 → Hash B
↓
發現檔案改變
這種方式可以找到檔案變化,但有一個問題:
必須等到下一次掃描,才會知道檔案被修改。
如果希望檔案一發生變化就能發現,就需要使用即時監控的方式。
inotify 是 Linux 提供的檔案系統事件通知機制。
簡單來說,可以把它理解成:
「這個檔案或目錄如果發生變化,就通知我。」
例如檔案發生以下行為:
Linux 就可以產生相對應的事件。
概念上可以簡化成:
監控檔案 / 目錄
↓
檔案發生變化
↓
Linux Kernel
↓
inotify Event
↓
監控程式收到通知
相較於不斷重新檢查檔案是否改變,這種方式可以更即時地掌握檔案系統事件。
在 Ubuntu 中,可以安裝 inotify-tools:
sudo apt update
sudo apt install inotify-tools
接著建立一個測試目錄:
mkdir ~/fim-test
開始監控:
inotifywait -m ~/fim-test
其中 -m 代表持續監控。
接著另外開啟一個 Terminal,依序執行:
touch ~/fim-test/test.txt
echo "hello" >> ~/fim-test/test.txt
rm ~/fim-test/test.txt
這時就可以觀察到類似:
CREATE test.txt
MODIFY test.txt
DELETE test.txt
也就是當檔案發生變化時,Linux 可以立即產生對應的檔案系統事件。
Wazuh 中負責 FIM 的主要模組是 Syscheck。
例如,我們可以設定:
<syscheck>
<directories realtime="yes">/home/user/fim-test</directories>
</syscheck>
其中:
realtime="yes"
代表對指定位置啟用 Real-time Monitoring。
在 Linux 環境中,Wazuh 的 Real-time FIM 可以利用 inotify 監控檔案系統事件。
整個流程可以簡化成:
檔案被修改
↓
Linux / inotify
↓
Wazuh Agent
↓
Syscheck
↓
Wazuh Manager
↓
Alert
所以 realtime="yes" 不只是一個設定參數,它背後其實與 Linux 的檔案系統事件通知機制有關。
既然 Real-time Monitoring 可以快速發現檔案變化,那是不是乾脆整台主機都監控?
其實並不是。
Linux 系統本來就會產生大量正常的檔案變化,如果監控範圍太大,很容易產生大量事件與雜訊。
最後可能變成:
大量檔案異動
↓
大量 FIM Event
↓
大量 Alert
↓
真正重要的事件反而被淹沒
因此 FIM 真正重要的問題不是:
「可以監控多少檔案?」
而是:
「哪些檔案被修改時,真的值得我注意?」
這也帶出了下一個問題。
如果我故意建立一個正常情況下根本不應該有人去碰的檔案,那麼只要有人修改它,是不是就非常值得調查?
這就是接下來要介紹的 Honeyfile。
今天主要了解三件事情:
inotify 可以提供檔案系統事件通知。realtime="yes" 時,可以利用 Linux 的事件機制進行 Real-time FIM。今天比較偏向理解 Wazuh FIM 背後的 Linux 機制。
下一篇就要開始把這個功能實際應用到我們的防禦環境。