Linux系統預設使用Syslog機制來記錄相關的系統Log,但Syslog機制主要的功能在於記錄系統應用層面的狀態等,對於系統核心、層面的記錄力有未逮,因此出現了audit機制,可彌補Syslog的不足,用來記錄系統上發生的核心事件資訊。
對於系統而言,必定會提供稽核記錄(Log)機制來記錄系統或應用程式執行等相關狀態,以便管理或追蹤事件之用。以Linux系統為例,其預設使用Syslog機制來記錄相關的系統Log,但Syslog機制主要的功能在於記錄系統應用層面的狀態(例如應用軟體執行失敗或硬體無法使用等應用層級的記錄),而對於系統核心(Kernel)層面(例如檔案的讀寫、系統呼叫、系統登入等等權限控管)的記錄則力有未逮之處。也因此出現了audit機制,此機制即是用來彌補Syslog的不足之處,主要是用來記錄系統上發生的核心事件資訊,其主要功能有:
1.記錄檔案存取的資訊
2.記錄所執行的系統呼叫資訊,通常一個指令或程式須透過多個系統呼叫來執行。
3.可記錄系統上的安全事件,例如系統登入相關資訊。
4.可記錄網路運作的相關事件
在本文中,除了說明audit機制外,另外將以CentOS Stream 9為例,實作一個利用此機制來記錄某個執行檔執行過程及檔案存取的相關資訊。
什麼是audit機制
不同於Syslog運作於應用程式的層級上,audit是建構於系統核心層級上的模組,因此可運作於系統核心層級並補捉到核心所發生的相關事件。接下來,即可以下列指令來安裝相關的管理程式:
yum install audit audit-libs
常用組態說明
安裝完成後,首先說明audit主要組態檔(/etc/audit/auditd.conf)的常用組態。
是否要記錄本機(localhost)上所產生的核心記錄,一般來說,此組態會設定為yes。
是否要將相關audit記錄儲存在本機的檔案上,除非是特殊情況(例如要將資訊寫入到遠端主機),不然此選項應為yes。
設定儲存audit記錄的檔案位置,如果沒有特別的設定,其預設為「/var/log/audit/audit.log」。
設定audit記錄檔的擁有者群組權限名稱。
設定audit記錄的記錄格式,可分為RAW和NRICHED。RAW表示型式為原本系統所使用的核心Log型式,而NRICHED代表會先解析如uid(使用者ID)、gid(群組ID)等資訊後再儲存。
設定audit記錄更新的樣式,可分為incremental和remental_async。Incremental(增量型)將參考freq組態的設定,依照所設定的更新頻率來更新audit記錄,而remental_async類似incremental組態,但比incremental組態更有效率。
設定間隔多少筆audit記錄後即須將資料寫入audit記錄檔案中。
設定audit記錄檔最大的儲存空間,單位為MB。
設定要保留的audit記錄檔個數,當超過時,即會利用轉置(Rotation)的方式將原先檔案先存成另一個檔案後,再重置原先的audit檔案,此數值應小於999。
設定在audit記錄中電腦名稱的儲存型式,選項包括:none不須儲存電腦名稱的資訊、hostname表示儲存以系統呼叫(gethostname)所取得的電腦名稱,而fqd表示儲存包含完整網域名稱(Domain Name)的電腦名稱。
設定當發現audit記錄檔容量已滿的情況下要執行的動作,提供的選項包括:ignore(表示不做任何事)、syslog(要將相關audit記錄以Syslog機制繼續記錄)、suspend(要暫時停止記錄資訊)、rotate(要轉置現有的audit記錄檔案至其他檔案上)、keep_logs(與rotate類似,但其不理會num_logs組態的設定,表示要強制地轉置稽核檔案)。
設定當發現系統的磁碟剩餘空間可能不足時所要採取的動作,常用的選項如下:ignore(表示不做任何事)、syslog(要將相關稽核資訊以Syslog機制繼續記錄)、rotate(要轉置現有的audit記錄檔至其他檔案上)、suspend(要暫時停止記錄audit紀錄)、exec(表示要執行指令)。
audit提供第三方軟體(Plugin)機制來擴充功能,而此組態是設定放置第三方軟體的目錄位置。
相關程式說明
在簡單說明audit機制所使用的組態設定後,接著介紹相關的程式。
這是主要的服務程式,將根據組態檔(/etc/audit/auditd.conf)內之相關設定來執行,提供audit機制的管理。
這是控制audit機制的管理程式,使用者可利用此程式來設定相關audit規則。常用組態如下所述:
-D:清除所有原先設定的所有規則。
-b [緩衝區容量]:設定audit機制處理時所使用的緩衝區容量,可根據系統忙錄程度來動態調整。
-w [目錄或檔案名稱 -p [監控權限]:設定要監控之檔案或目錄的變動情況,一旦該目錄或檔案發生變動便記錄,但如果設定監控目錄,並不表示該目錄下的檔案發生變動即記錄,而是表示唯有該目錄發生變動(如目錄更名)才會記錄。而-p則表示設定要監控的檔案權限資訊。提供r(讀)、w(寫)、x(執行)、a(更改相關檔案或檔案的屬性)等設定。若無特別的設定,預設為全部權限(rwxa)。
-f [參數]:設定當發生系統失效後的動作,通常會設定為1,表示記錄相關的錯誤訊息。
-a [action],[list] -S [system-call] -F [field=value]:設定新增規則,其中[action]表示符合規則條件後,欲執行的動作,通常會設定always(表示會記錄相關事件),而另一個為never(表示不會記錄相關事件)。而[list]通常會設定為exit,表示在執行[action]動作後即結束。-S則表示要監控的系統呼叫,通常會設定成all(表示要監控所有的系統呼叫資訊)。-F則設定要監控的目標,其中field為要監控目標的性質,例如設定為exe即表示要監控類型為執行檔。value即為要監控的名稱,如「-a always,exit -S all -F exe=/usr/bin/mkdir」就是要監控「/usr/bin/mkdir」執行檔的執行狀況。
為了讓使用者能更快速方便地查詢audit記錄檔,audit機制提供ausearch程式,讓使用者能更方便地取得相關資訊。
在說明相關用法之前,先簡單說明audit記錄的格式,範例如圖1所示,其主要的欄位包括type和msg。
type是用來設定audit記錄的類型,常見類型包括SYSCALL、PATH、EXECVE、PROCTITLE。
SYSCALL表示此事件的類型為系統呼叫,通常會具有arch(系統架構)、success(是否執行成功)、uid(執行的使用者ID,若為0即表示為root所執行)以及exe(使用的執行檔名稱)等屬性資訊,如圖2所示。
PATH表示此事件的類型為檔案或目錄型態,通常是在所監控的檔案或目錄發生變動時記錄相關資訊。其主要的屬性值為name,表示該檔案或目錄的名稱,如圖3所示。
EXECVE表示此事件的類型為執行檔執行,若已設定欲監控的執行,便會以此種類型的資訊來記錄該執行檔執行的過程。如「mkdir /tmp/test3」為執行新建「/tmp/test3」目錄(圖4)。其主要的屬性值有argc(表示此執行檔所使用的參數數目,執行檔本身也視為參數)、a0(為執行檔名稱)、a1(執行檔所使用的參數,若還有其他的參數即以a2~an進行記錄)。
PROCTITLE此事件的類型類似EXECVE,但其主要屬性值proctitle會記錄完整的指令執行指令(包含執行檔及其使用的參數資訊),如圖5所示。
至於msg,則是記錄此audit記錄的時間及ID(此為唯一值),例如msg=audit((unit time時間型式):(audit ID))。可利用「date -d @unit time時間值」,將unit time時間型式轉換成一般日期時間格式。
在簡單了解audit記錄的相關資訊之後,接下來簡單說明ausearch的常用參數:
-f [檔案名稱]:在audit記錄中查詢某個檔案的資訊,如「ausearch -f audittestfile」表示取得audit記錄中關於audittestfile檔案的相關資訊。
-x [執行檔案名稱]:在audit記錄中查詢某個執行檔的資訊,如「ausearch -x mkdir」表示取得audit記錄中關於mkdir指令的執行情況相關資訊。
-hn [主機名稱]:在audit記錄中查詢某個主機的相關資訊,如「ausearch -hn localhost」表示查詢本機。
-i:表示輸出為易讀之資訊,以事件類型是proctitle為例,若無設定此參數,輸出的資訊將會是一連串代碼,而非執行指令的字串。
-ts [日期時間]:查詢某個時間點的報告,如「ausearch -ts today」為取得當日的報告。
這是用來產生audit記錄內相關資訊的報表程式,其常用的參數說明如下:
-i:以易讀的型式輸出audit記錄內的相關資訊,會以統計各事件(例如登入成功或失敗的總次數)的形式呈現,如圖6所示。
-l:顯示系統登入(Login)的資訊,其中會包含登入的來源IP以及所使用的登入程式等資訊,如圖7所示。
-ts (time start) -te (time end):設定顯示報表資訊的時間區間,其中-ts為起始時間,-te為結束時間,如「aureport -l -ts 03/05/24 01:00 -te 03/05/24 23:00」為顯示該時間區間(2024年3月5日)內的系統登入資訊。
-x:設定查看所有執行過的指令及執行檔的相關資訊。
audit機制實作
簡單說明過audit機制的相關組態說明及主要的執行檔用法後,在此將以監控mkdir執行檔及「/tmp/audittest/audittestfile」檔案變動為例,利用audit機制來實作一個監控檔案變動及執行檔運作的系統。相關指令如下所示:
service auditd start #啟動auditd服務
在啟動後,可利用下列指令來確認是否執行成功:
systemctl status auditd
如圖8所示,即表示已經在運作中(active)。
接著,執行下列指令來設定相關規則:
auditctl -D #先刪除原有的舊規則 auditctl -w /tmp/audittest/ audittestfile #設定欲監控的檔案名稱 auditctl -a always,exit -S all -F exe=/usr/bin/mkdir #設定欲監控的 指令名稱並記錄此執行檔所呼叫的所有系 統指令
如圖9所示,在規則設定完成後,可利用以下指令來檢查所設定的指令:
auditctl -l
在確認設定成功後,先使用mkdir指令進行測試,而後再以ausearch指令確認所記錄到相關的行為,如圖10所示。
接著,以更動audittestfile檔案的方式來確認所記錄的相關資訊,如圖11所示。
至此,就完成了以audit機制記錄執行檔及檔案存取之實作。
<本文作者:吳惠麟,多年資安經驗,喜好利用開源碼建構相關解決方案,著有「資訊安全原理與實驗」等書。>