作業系統都會提供稽核記錄機制,記錄系統應用程式或系統事件的相關資訊,管理者只要檢視這一類記錄就能夠在事後查明系統相關的運作情形。而透過由微軟所提供的即時稽核記錄監控軟體LogMonitor,便能快速地監控視窗作業系統產生的稽核記錄。
為了讓使用者能更有效地掌握系統運作情況及追蹤系統事件的過程,作業系統都會提供稽核記錄機制,記錄系統應用程式或系統事件的相關資訊。
管理者透過檢視此類記錄,即可於事後了解系統相關運作情形。或者利用系統上稽核記錄的方式來回溯追蹤系統事件的來龍去脈,甚至可透過即時監控系統上的稽核記錄,來立即掌握目前系統狀況。
因此,本文將介紹一套由微軟公司所提供的即時稽核記錄監控軟體LogMonitor,官方網址為「https://github.com/microsoft/windows-container-tools/tree/main/LogMonitor」,管理人員使用此軟體即可輕易地監控微軟作業系統上所產生的稽核記錄。
什麼是ETW(Event Tracing for Windows)
為了讓開發商或使用者能夠使用同一套規範在微軟系統上管理或監控應用程式及服務(Service)在運作時所產生的相關資訊,微軟提出了統一的事件資訊追蹤架構(Event Tracing for Windows,簡稱ETW),這是一種通用於微軟系統上的事件(Event)記錄架構,讓開發者利用單一的規範即可記錄系統事件(包含軟體及硬體相關事件,例如應用程式不正常地中止或系統被插入USB裝置等事件)或取得相關系統事件來進行分析及監控。其架構如圖1所示。在架構中的相關角色,分別說明如下:
Providers(事件提供者)
Providers(事件提供者)主要用來產生系統事件資訊的機制(通常為應用程式或系統服務程式)。一般而言,事件提供者必須向系統註冊(Register)並啟用記錄。方可正常地記錄相關的系統事件,並將資訊暫存於事件追蹤會話架構(Event Tracing Sessions,ETS)。單一ETS可同時收集多個事件提供者的來源,ETS相關內含的資訊如下所述:
‧會話控制器(Session Controller):主要用來設定ETS的屬性(例如指定要追蹤的事件提供者及所使用的容量空間等資訊),另外在管理者向系統註冊事件提供者後,須使用此會話控制器來啟動或停止記錄。
‧會話屬性(Session Properties):用來設定ETS的屬性,例如可設定要追蹤的事件提供者或設定相關過濾條件,要記錄的嚴重等級程度或相關記錄欲輸出的目錄資訊等等。
‧會話ID(Session ID):每個ETS均會有一個唯一ID,用於標識個別不同的會話,以方便系統來協調和管理各個ETS。
‧記錄模式:提供了即時(Real-Time)和非即時(Non-Real-Time)的記錄模式。在即時模式的情況下,可讓使用者即時地利用ETS來監控系統事件,而在非即時模式的情況下,則將相關系統事件資訊寫入系統日誌文件,以供管理者日後分析之用。
Consumers(事件消費者)
Consumers(事件消費者)便是運用ETW資訊來監視和記錄事件的應用程式或工具軟體,例如本文所介紹的LogMonitor即屬於此類。
為了能讓使用者能更便利地運用ETW架構,微軟系統提供一個名稱為「logman」的工具程式(此為系統內建之命令列程式,使用者無須再額外安裝),用來管理系統日誌與系統事件的追蹤,以便於使用者收集相關系統資訊與系統事件的資訊。
由於在本文中僅會使用logman工具的查詢(Query)功能來查詢系系統上事件提供者的資訊,因此僅說明查詢功能的用法。可開啟命令列介面(須以系統管理員的身分執行),執行「logman query providers」,就會列出系統內所提供之事件提供者的資訊,如圖2所示。
如果使用者想查詢某個事件提供者的資訊,可利用管道命令(|)及findstr的保留字來執行,以下命令則可列出名稱含有pad字串之事件提供者的資訊,輸出如圖3所示(即系統內的WordPad程式):
logman query providers |findstr pad
簡單說明ETW架構之後,接下來繼續說明事件記錄(Event Log)機制。
何謂Event Log
系統在取得事件提供者所提供的資訊後,通常會將相關資訊以事件記錄(Event Log)的形式寫入至系統日誌中。
使用者可利用「事件檢視器」功能或以「命令列介面」(需系統執行者的角色)執行「eventvwr」指令的方式開啟檢視事件記錄功能,來檢視相關系統日誌,如圖4所示。
一般而言,事件記錄通常會提供事件發生時間、說明內容及其嚴重程度等級等相關資訊,而對於微軟的事件記錄而言,除了上述的資訊內容之外,還會針對每個事件記錄提供一個唯一的事件識別碼(Event ID)用以識別不同的事件(例如編號4624表示為登入系統成功的事件),使用者若理解事件識別碼的意義,即可根據此資訊精準並方便地查詢出相關的事件記錄。
另外,事件記錄也提供等級欄位來區分事件的嚴重程度,其嚴重程度等級劃分如下所述:
‧錯誤:表示運作中的系統服務或應用程式發生嚴重的問題,例如資料遺失或發生無預期的錯誤等,通常會造成應用程式或系統服務停止運作的後果。
‧警告:表示運作中的服務或應用程式發生輕微的問題,但還不至於會影響相關應用程式或系統服務的運作。
‧資訊:僅記錄應用程式執行時的一般性相關資訊,例如啟動成功等不會影響運作的資訊。
若以事件記錄的類型來區分,大致可分為下列四種類型:
‧應用程式事件:主要是在記錄應用程式在執行過程中所發生的事件,例如應用程式發生錯誤或無預期的錯誤及一般資訊等事件記錄。
‧安全性相關事件:主要是在記錄可能會對系統造成安全危害的事件,例如遭受暴力攻擊而產生之大量登入系統失敗的記錄,或者使用者已經正常登入系統的記錄。
‧SET(安裝事件):主要是記錄系統上軟體安裝的相關資訊,最常見的就是微軟系統日常更新的相關安裝資訊。
‧系統事件:主要記錄系統上一般常見的操作及系統服務運作過程中的相關資訊,常見的有開機∕關機相關資訊或系統服務啟動∕停止等資訊。
在了解微軟稽核記錄的基本架構後,接著就來安裝LogMonitor。
使用LogMonitor
LogMonitor為微軟所提供之免費工具程式,目前並沒有提供使用者介面(UI),只能夠以命令列的方式執行,使用者可以利用此工具進行擷取系統的ETW和Event Log等事件記錄。除此之外,LogMonitor也提供監控程式運作過程的資訊及系統上檔案內容變動(如新增或更改)的監控,而目前該程式僅提供輸出至螢幕(STDOUT)的方式。
安裝過程很簡單,先連結至LogMonitor官方網站(https://github.com/microsoft/windows-container-tools/tree/main/LogMonitor)直接下載執行檔(本文所使用的版本為2.0.2),接著建立執行時所參考的組態檔(為json格式,必須與執行檔位於同一個目錄),而後LogMonitor就會根據組態內的設定來執行。由於預設存取的組態檔位於「c:\\LogMonitor\LogMonitorConfig.json」,為了執行方便,這裡會將LogMonitor執行檔及組態檔(LogMonitorConfig.json)均置於「c:\\LogMonitor」目錄下。
組態檔常用的組態設定
接下來,說明組態檔常用的組態設定,如下所述:
這是用來設定欲監控事件類型的資訊,包括事件記錄(Event Log)、事件資訊追蹤(ETW)以及文字類型之檔案(File)等類型。
設定是否要從頭取得該事件類型的相關記錄,若為true表示從頭取得所有的相關事件資訊。反之,即表示僅取得啟動LogMonitor之後所產生的相關事件資訊。
設定輸出資料的顯示格式,若設定為true即表示以多行的方式來顯示資訊,反之則代表以單行的方式來顯示。
此選項是用於設定所要監控的ETW事件類型(type組態須設為ETW),主要是用來取得事件提供者的資訊。需要同步設定下列之子組態:
‧providerName:設定此事件提供者的名稱,例如可設定Microsoft-Windows-Wordpad,表示要監控系統上WordPad運作過程中所產生的資訊。
‧providerGuid:設定此事件提供者識別ID(即GUID)。
‧level:設定欲監控的事件等級,提供下列選項(嚴重性由高至低),包括Critical嚴重錯誤(僅會監控發生嚴重錯誤的事件)、Error錯誤(將監控包含Error、Critical的事件)、Warning警告(將監控包含Warning、Error、Critical的事件)、Information一般資訊(監控包含Information、Warning、Error、Critical的事件)、Verbose詳細資訊(監控所有的資訊)。
監控系統上檔案的內容變動情況
LogMonitor提供監控系統上檔案的內容變動情況(type組態須設定為file),常用的組態設定如下:
設定欲監控的目錄,若未設定任何的過濾條件,就表示監控此目錄下所有檔案的內容變動情況。
設定監控的過濾條件,使用者可利用正規表示式來設定欲監控的檔案。例如設定「*.log」就表示監控副檔名為log的檔案,或者設定「*」表示監控所有的檔案。
設定監控的範圍是否包括該目錄(即directory組態所設定的目錄)下的所有子目錄,若設定為true即表示監控範圍包含其下的子目錄,反之即表示僅監控directory組態所設定的目錄。
一旦監控到檔案的內容發生變動,輸出的資料是否要包括發生變動的檔案名稱。一般來說,此組態通常會設為true(亦即要記錄檔案名稱)。
設定欲檢查新增檔案或目錄的等待間隔時間(單位為秒)。
測試相關功能
在了解組態的常用設定後,接下來即可測試LogMonitor所提供的相關功能。
以監控系統上的WordPad軟體為例,首先以「logman」指令來取得WordPad的providerName及providerGuid,同樣地以系統管理員的身分開啟命令列字元,並執行如下的指令:
logman query providers |findstr pad
如圖5所示,即可取得WordPad的providerName和providerGuid資訊,然後利用相關資訊,設定如下的的組態:
{ "LogConfig": { "sources": [ { "type": "ETW", "eventFormatMultiLine": false, "providers": [ { "providerName": "Microsoft- Windows-Wordpad", "providerGuid": "54FFD262- 99FE-4576-96E7-1ADB500370DC", "level": "Information" } ] } ] } }
在設定完成後,執行LogMonitor程式,即可取得WordPad執行時的相關資訊,如圖6所示。
在此將以監控Event Log中的系統(System)類型且嚴重程度須為錯誤(Error)為例,設定如下組態檔:
{ "LogConfig": { "sources": [ { "type": "EventLog", "startAtOldestRecord": true, "eventFormatMultiLine": true, "channels": [ { "name": "system", "level": "Error" } ] } ] } }
在設定完成後,執行LogMonitor程式,即可取得相關資訊,如圖7所示。
此功能無須設定相關的組態檔,僅須指定欲監控程式的執行檔位置即可,如下列即表示監控系統上的wordpad.exe:
LogMonitor.exe "C:\Program Files\ Windows NT\Accessories\wordpad.exe"
以監控「c:\\logmonitorfile\」目錄下所有檔案內容變動為例,如下組態檔設定(其中#為註解說明):
{ "LogConfig": { "sources": [ { "type": "File",#欲監控的對象 為檔案型式(file) "directory": "c:\\logmonitor file\", #欲監控的目錄 "filter": "*", #監控目錄下的所 有檔案變動情形 "includeSubdirectories": true, #設定監控的範圍包括該目錄下 的子目錄 "includeFileNames": false, #包括所監控的檔案名稱 "waitInSeconds": 10 } ] } }
然後執行LogMonitor.exe,接著在「logmonitorfile」目錄下新增一個檔案以及針對此新增檔案的內容新增文字,如此一來,LogMonitor就會監測到檔案新增與內容變動的事件,而顯示如圖8所示之輸出。
<本文作者:吳惠麟,多年資安經驗,喜好利用開源碼建構相關解決方案,著有「資訊安全原理與實驗」等書。>