入侵偵測系統 IDS 系統管理 防火牆 Firewall HIDS

持續檢查檔案完整性 即時偵測系統異常變動

開源入侵偵測系統AIDE 監控主機狀態警示攻擊

2022-09-20
為了避免系統遭入侵卻沒有發現的情況發生,除了部署防火牆之外,最好再架設入侵偵測系統,多一層保護。本文將介紹一套開源碼社群中著名的主機型入侵偵測系統AIDE,它可利用偵測檔案系統的變動情況,來掌握系統是否有異常的狀況。

對於系統管理者而言,除了網路或服務中斷的災難外,另外一個最大的惡夢來源是系統被入侵而不自知。也因此,一般系統除了會部署防火牆(Firewall)設備外,通常也會部署入侵偵測系統(Intrusion Detection System,IDS)來偵測是否有惡意的行為正在攻擊系統。

以部署的類型來區分。入侵偵測系統大致可分為網路型入侵偵測系統(Network-based  Intrusion Detection System,NIDS)及主機型入侵偵測系統(Host-based Intrusion Detection System,HIDS)。

NIDS通常部署在網段的閘道(Gateway)位置,以規則樣式(Rule Base)的方式監控整個網段內的通訊封包,並比對是否具有惡意的攻擊樣式,一旦發現具有惡意的攻擊行為正在進行,就會即時記錄該行為,甚至直接阻擋該來源的連線。此類設備部署較為簡單,僅須部署在網路的匝道上解析網段內的封包即可。

而HIDS是直接安裝在個別主機上,藉由監控主機上的系統資源如檔案紀錄檔或程序(Process)的變化來判別是否有惡意的行為,並採取適當的行動來防止相關的危害。

在本文中所介紹的AIDE(Advanced Intrusion Detection Environment,官方網址為https://github.com/aide/)軟體,即為一套開源碼社群中有名的主機型入侵偵測系統,可安裝於主機上,目前支援UNIX、Linux等系統。藉由檔案完整性檢查(File Integrity Check)的方式即時地偵測檔案系統的變動情況,進而提早發現系統異常的行為。

什麼是AIDE

AIDE主要是利用監控檔案系統的異動情形來確認系統是否有異常的情況。使用者可事先定義好監控檔案的範圍(例如系統內某個目錄)及檢查項目(例如檔案內容、檔案存取時間、檔案擁有者等屬性),並利用單向雜湊函數(例如sha1、md5等演算法)來產生比對用的基準資料庫。

在產生基準資料庫後,再利用相同的條件,產生當下欲比對的比對資料庫。再從中比對出不同的地方,藉此取得檔案系統變動的資訊。

簡單了解AIDE的比對原理後,接下來安裝AIDE(在此以CentOS 8為例),首先安裝相關所需的軟體套件,執行如下指令(其中#符號為註解說明):

dnf install flex-devel dnf install libgpg-error-devel dnf install libgpg-error dnf install libgcrypt dnf install libgcrypt-devel

在安裝完所需的相關套件後,即可來安裝AIDE。首先,以下列指令來取得最新的原始碼:

git clone https://github.com/aide/aide.git cd aide/ sh ./autogen.sh  #根據系統設置來組態相關設定 ./configure --prefix=/usr/local/aide  #設定將 AIDE安裝至/usr/local/aide目錄 make    #編譯相關程式 make install  #安裝相關程式與組態

安裝完成之後,將提供一個名稱為「aide」的主程式及檔名為「aide.conf」的預設組態檔。AIDE指令格式如下:

aide  [選項參數] 執行命令

其中最常用的選項參數即為設定組態檔的位置,格式如下:

-c 組態檔名稱

此外,執行命令主要使用:

--check:執行基準資料庫與現有檔案系統的比較,以找出異動的相關資訊。

--init:建立一個初始化的基準資料庫。

--update:重新更新基準資料庫,通常用於系統上有正常的檔案系統異動後。

如下例即為使用名稱為「aide.conf」的組態檔,並建立初始化的基準資料庫:

aide -c aide.conf --init

常用組態設定介紹

接著,說明aide.conf常用的組態設定。

database_in

設定在檢查檔案系統異動情況時所使用的基準資料庫,使用者必須先產生原始的基準資料庫,而後當使用者欲進行檔案系統的異動檢查時,就會使用此資料庫與當下的檔案狀況進行比對,進而找出異動的相關資訊。如果未設定此選項,其預設為「/usr/etc/aide.db」。

database_out

設定使用者重新產生之基準資料庫的位置,若未設定,則預設為「/usr/etc/aide.db.new」。使用者以init或update所產生的基準資料庫,將會置於此組態所設定的位置上。

log_level

設定欲記錄的Log層級,常用的設定如下說明:

error:AIDE在執行時,若發生錯誤,則記錄該錯誤的資訊。

warning:若發生較不嚴重的事件,但尚未影響到執行的程度,便記錄此類告警訊息。

notice:記錄在AIDE執行時所發生的一些須注意的事件訊息。

info:記錄在AIDE執行時所產生的相關一般訊息。

debug:記錄最詳盡的資訊,通常用來偵錯用。

report_url

設定AIDE在執行過程中輸出資訊的檔案位置。預設為標準輸出(stdout,亦即直接顯示在螢幕上)。另一種則是輸出至檔案上,其格式為:

file:[檔名]

例如「report_url file:/var/log/aide.log」,表示要將輸出儲存在「/var/log/aide.log」檔案中。

gzip_dbout

設定是否要利用壓縮功能來壓縮資料庫,此選項須在編譯AIDE時一併加入zlib功能,方有作用。其選項如下:

yes:使用壓縮功能來壓縮資料庫

no:不使用壓縮功能來壓縮資料庫

acl_no_symlink_follow

設定是否要使用檢查符號連結(Symlink)檔案的ACL(Access Control List)功能,同樣地,此選項須在編譯AIDE時一併加入ACL功能,方有作用。其常用選項如下:

yes:啟用檢查ACL功能

no:不使用檢查ACL功能

warn_dead_symlinks

此組態是用來設定是否要警示符號連結檔案失效的狀況,預設為no。

summarize_changes

此組態用來設定是否要產生相關檔案更改(例如新增、更改或刪除)的總結資訊,預設為no。

監控特殊代碼說明

除了上述常用的組態外,AIDE另外定義了相關的監控特殊代碼,用來表示欲監控檔案或目錄的屬性項目,常用代碼說明如表1所示。

除此之外,AIDE也提供MACRO設定(以符號@@表示),能讓使用者能更方便地設定相關組態。常用的MACRO說明如表2所示。

實作示範

了解相關組態設定後,最後做一個簡單的實作來說明AIDE的應用。在此將監控一個目錄,並分別在此目錄中進行新增、刪除及修改檔案等動作,以測試AIDE是否能夠正確地找出檔案異動的情況。

首先,設定要監控的目錄(/usr/local/apache2/htdocs/,以下簡稱為監控目錄)。接著,設定相關組態(aide.conf),其內容如下所示,其中#為註解:

@@define DBDIR /usr/local/aide/db  #設定 DBDIR為資料庫檔案的所在目錄位置 @@define LOGDIR /usr/local/aide/log database_in=file:@@{DBDIR}/aide.db.gz    #設定基準資料庫的位置 database_out=file:@@{DBDIR}/aide. db.new.gz #設定新產生的基準資料庫位置 gzip_dbout=no #不使用壓縮功能 report_url=file:@@{LOGDIR}/aide.log report_url=stdout  #設定將比對結果輸出 至螢幕上 CONTENT = sha512+ftype   /usr/local/apache2/htdocs/  CONTENT  #設 定利用SHA512演算法來比對位於htdocs目錄 下,符合ftype所#定義檔案類型的異動情況

然後執行如下指令,針對監控目錄來產生初始的基準資料庫:

aide -c  aide.conf  --init

將根據組態檔中的database_out設定,產生一個名稱為「aide.db.new.gz」的資料庫,執行結果如圖1所示。

圖1  產生初始的基準資料庫。

由於在進行檢查時,使用的是database_in組態所設定的資料庫(即aide.db.gz),因此必須手動將aide.db.new.gz複製到aide.db.gz:

cp aide.db.new.gz  aide.db.gz #檢查用的DB

接著,測試監控目錄下檔案的異動情形,首先執行如下指令來測試未更動的情況,輸出結果如圖2所示:

圖2  觀察監控目錄下檔案的異動情形。

aide -c aide.conf  --check

接下來,在監控目錄新增一個名稱為「add.tx」的檔案。同樣地,以「aide -c aide.conf  --check」進行檢查,便會發現有新增的檔案。如圖3所示。

圖3  發現有新增的檔案。

如果add.txt為正常的新增檔案,便可以下列的指令重新更新基準資料庫,將add.tx相關資料加進來:

aide -c  aide.conf  --update

更新完成後,同樣地也須手動將更新後的資料庫(aide.db.new.gz)複製到基準資料庫(aide.db.gz)。接著,再使用「aide -c aide.conf --check」進行檢查,此時應該會發現並無任何檔案異動的情況。緊接著,繼續測試檔案修改的狀況。在重新修改add.txt的內容後,重新執行上述的檢查。即會出現如圖4所示的訊息,表示該檔案已被修改。最後,手動刪除add.txt檔案後,重新執行上述的檢查應可顯示該檔案。如圖5所示的訊息,表示該檔案已被修改。

圖4  測試檔案修改的狀況。
圖5  顯示檔案,發現已經修改過。

至此,已完成主機型入侵偵測系統的建置。使用者可利用偵測檔案系統的變動情況,來掌握系統是否有異常的狀況。

<本文作者:吳惠麟,多年資安經驗,喜好利用開源碼建構相關解決方案,著有「資訊安全原理與實驗」等書。>


追蹤我們Featrue us

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!