v10.4:對Sysmon(安全事件監視服務)的主要更新,為規則組添加了嵌套規則支持,并添加“contains any”和“contains all”規則條件,以進行更靈活的過濾以及修復了幾個錯誤。
v10.41:修復10.4的語法配置問題。
v10.42:解決了Sysmon的大量內存泄露問題,引入“Excludes Any”和“Excludes all”過濾條件,修復一些錯誤。
v11.0:添加了刪除文件監控事件和文件備份功能,幫助威脅檢測人員捕獲攻擊者的工具,減少反向DNS查找噪音,將空字段替換為“-”以解決WEF錯誤,并修復了導致某些ProcessAccess事件發生的問題。
v11.1:創建文件流哈希事件新增了Contents屬性,可以將捕獲到的小于1000字節的可替換數據流內容也記錄到日志中,這對于調查帶有“網絡標記”(MOTW)流的下載非常有用,引入了“is-any”過濾條件,并修復了幾個錯誤。
對升級功能進行整理后發現,較重要的更新包括三個方面:一是新增刪除文件監控事件、二是新增過濾條件、三是新增Contents屬性。
二、幫助信息及文件架構描述2.1 查看幫助信息
使用“sysmon64 -? config”命令查看幫助信息,能找到下面的介紹,看到在事件過濾器中增加了ID為23的File Delete事件:

圖:監控的事件范圍
同時在幫助文檔中包含了一個配置項的說明,列出了可能在規則中使用的一些二級標簽,但是經過測試發現并不是所有的配置項都能使用。幫助信息中給出的配置項如下:
圖:config 幫助信息中列出的配置條目
實際經過測試發現,可以在配置文件中使用的配置項包括5項,具體在第四部分內容中介紹。2.2 查看文件架構描述
對比v10.0和v11.1的文件架構信息,發現有7處不同:文件架構版本升級到4.32
命令行開關增加“DnsLookup”和“a”兩個開關參數,分別用于禁用反向DnsLookup查詢和設置文件的存檔目錄
增加5個規則過濾條件
去掉了文件創建時間更改事件的默認開啟狀態,版本從4升級為5
去掉了驅動加載事件的默認開啟狀態,版本從3升級為4
ID為15的創建文件流哈希事件增加Contents屬性
增加一類FileDelete事件
三、刪除文件監控事件從文件架構中看到,FileDelete事件ID為23,共有7個屬性:
UtcTime(UTC 時間)以通用協調時(UTC)形式記錄的刪除文件的日期和時間,格式為:yyyy-MM-dd HH:mm:ss.000。
ProcessGuid(進程GUID)Sysmon創建的一種GUID值,具備全局唯一性,可用于區分刪除文件的進程實例。
ProcessId(進程ID)刪除文件的進程PID。
User(用戶名)運行該進程的用戶賬戶,將顯示為DOMAIN\USER的格式。
Image(查詢狀態)執行刪除文件操作進程的主可執行映像文件的完整路徑。
TargetFilename(目標文件名)被刪除文件的全路徑。
Hashes(哈希)被刪除文件的哈希值。
IsExecutable(是否為可執行文件)布爾值,被刪除的文件是否為可執行文件。
Archived(存檔)布爾值,被刪除的文件是否備份到相應目錄中。

<Sysmon schemaversion="4.32"> <HashAlgorithms>MD5HashAlgorithms> <EventFiltering> <ProcessCreate onmatch="include"/> <FileCreateTime onmatch="include"/> <NetworkConnect onmatch="include"/> <ProcessTerminate onmatch="include"/> <DriverLoad onmatch="include"/> <ImageLoad onmatch="include"/> <CreateRemoteThread onmatch="include"/> <RawAccessRead onmatch="include"/> <ProcessAccess onmatch="include"/> <FileCreate onmatch="include"/> <RegistryEvent onmatch="include"/> <FileCreateStreamHash onmatch="include"/> <PipeEvent onmatch="include"/> <WmiEvent onmatch="include"/> <DnsQuery onmatch="include"/> <FileDelete onmatch="include"> <IsExecutable condition="is">TrueIsExecutable> FileDelete> EventFiltering>Sysmon>
圖:使用IsExecutable屬性搜索日志
但是測試發現,使用系統自帶的文件資源管理器、cmd.exe或者Total commander刪除文件時,均不能產生相應的日志。說明該版本Sysmon還存在一些問題。
圖:CMD中刪除文件
標簽名 | 值類型 | 功能 |
ArchiveDirectory | 字符串 | 卷根目錄下的目錄名,刪除時復制的文件將移動到其中。該目錄由系統ACL保護。(您可以使用Sysinternals中的PsExec來使用' PsExec -sid cmd'訪問該目錄)。 默認:Sysmon目錄 |
CheckRevocation | 布爾值 | 控制簽名撤銷檢查。 默認:真 |
CopyOnDeletePE | 布爾值 | 保留已刪除的可執行映像文件。 默認:假 |
CopyOnDeleteSIDs | 字符串 | 將保留刪除文件的帳戶sid的逗號分隔列表。 |
CopyOnDeleteExtensions | 字符串 | 在刪除時保存的文件擴展名。 |
CopyOnDeleteProcesses | 字符串 | 將保留刪除的文件的進程名稱。 |
DnsLookup | 布爾值 | 控制是否禁用反向DNS查找。 默認:真 |
DriverName | 字符串 | 為驅動程序映像和服務映像使用指定的名稱。 |
HashAlgorithms | 字符串 | 計算哈希的算法。支持MD5、SHA1、SHA256、IMPHASH和* (all)。 默認:空 |
4.2 條目測試
ArchiveDirectory
DnsLookup
DriverName
HashAlgorithms
幫助信息給出的條目 | 錯誤提示中給出的條目 | 用于命令行 | 用于配置文件 | 作用 |
ArchiveDirectory | ArchiveDirectory | 是 | 指定文件備份目錄 | |
CheckRevocation | CheckRevocation | 未知 | ||
CopyOnDeletePE | 是 | 開啟/關閉文件備份 | ||
CopyOnDeleteSIDs | 是 | 未知 | ||
CopyOnDeleteExtensions | 是 | 未知 | ||
CopyOnDeleteProcesses | 是 | 未知 | ||
DnsLookup | DnsLookup | 是 | 開啟/關閉DNS反向查詢 | |
DriverName | DriverName | 是 | 驅動名稱標簽 | |
HashAlgorithms | HashAlgorithms | 是 | 哈希算法標簽 | |
EventFiltering | 是 | 事件過濾器標簽 | ||
PipeMonitoringConfig | 是 | 未知 | ||
ProcessAccessConfig | 是 | 未知 |
ArchiveDirectory標簽的作用是指定Sysmon監控到刪除文件事件后,將被刪除的文件備份到的目錄。該目錄必須位于分區的根目錄下,不允許使用多層子目錄。安裝后默認的備份文件夾名稱為“Sysmon”,同時會在每個分區根目錄下生成一個“Sysmon”文件夾。可以使用ArchiveDirectory指定一個其它名稱的文件夾,例如testmon,避免惡意程序檢測到運行環境中安裝的Sysmon。配置規則如下:
<Sysmon schemaversion="4.32"> <HashAlgorithms>MD5HashAlgorithms> <ArchiveDirectory>testmonArchiveDirectory> <EventFiltering> <FileDelete onmatch="exclude">FileDelete> EventFiltering>Sysmon>
圖:備份文件夾中的文件

圖:文件備份目錄
同時測試發現,通過CopyOnDeletePE關閉備份文件的操作后,無法再次恢復備份功能,只能通過重新安裝Sysmon來啟用文件備份的功能。4.2.3 測試三個CopyOnDelete***配置條目通過測試發現CopyOnDeleteSIDs、CopyOnDeleteExtensions和CopyOnDeleteProcesses都可在命令行中使用,但并沒有達到預期效果,暫不清楚其功能。
圖:命令行開啟CopyOnDeleteSIDs
根據幫助信息的內容,CopyOnDeleteExtensions的作用是“在刪除時保存的文件擴展名”,可使用的值為字符串,推測可能是監控指定后綴名的文件刪除事件,因此以“exe,doc,docx”進行測試,配置成功。

圖:配置指定后綴名
實際測試發現還是會保存其它后綴名的文件,并不會只備份exe、doc和docx這三種后綴名的文件。
圖:備份文件夾中的文件
根據幫助信息介紹,CopyOnDeleteProcesses的功能是“將保留刪除的文件的進程名稱”。這里用“powershell”作為參數值測試CopyOnDeleteProcesses。配置后并未發現實際的作用。

圖:配置CopyOnDeleteProcesses
通過測試暫未得到這三個條目的功能,同時發現CheckRevocation條目既無法在命令行中使用,也無法在配置文件中使用。
五、新增Contents屬性
創建文件流哈希事件增加了Contents屬性,該屬性記錄的是文件流的內容。根據微軟的功能介紹,當文件流的大小小于1000字節時,日志會直接在Contents屬性中顯示流的內容。當文件流大于1000字節時,會生成該內容的哈希值。在cmd窗口中創建備用數據流進行測試命令如下:圖:創建文件流哈希事件的日志
六、新增過濾條件
到V11.1版本累計更新了5個過濾條件,下面依次進行測試。
2.1. contains any和contains allcontains any過濾條件的作用是包含使用分號“;”分隔的任意一個值。contains all的作用是包含使用分號“;”分隔的所有的值。首先配置刪除文件監控事件的Image屬性對contains any條件進行測試。<FileDelete onmatch="include"> <Rule groupRelation="and"> <TargetFilename condition="contains any">.exe;.ps1;.js;.xls;.xlsmTargetFilename> <TargetFilename condition="begin with">C:\Users\admin\AppData\Local\TempTargetFilename> Rule>FileDelete>
當刪除exe、ps1等指定類型的文件時,即可產生相應的日志。圖:刪除exe文件產生的日志
圖:刪除ps1文件產生的日志
根據幫助信息contains all條件是指包括分號“;”隔開的所有值。使用進程訪問事件的SourceImage屬性對contains all條件進行測試,規則如下:



圖:映像加載事件規則
修改規則后使用contains條件單獨指定一個值,可以觸發日志。

2.2. excludes any、excludes all和is any
根據contains any過濾條件的功能,可以設置excludes any的過濾條件:
新增加的文件刪除監控功能極大提高了防御人員的檢測能力,提供了捕獲文件的方法,對于一些帶有自刪除功能的木馬后門,以及破壞系統數據的惡意程序等有很好的防御效果。但是在實際生產環境中使用這項功能時,一定要仔細選擇要監控的文件位置,避免被備份的系統文件、臨時文件等占滿磁盤空間。新增的五個過濾條件中contains all和excludes all還未能發現正確的使用方法,應用其它三個條件時,對同一屬性的多個不同值可以列入一條規則中,可以提高規則的靈活性并降低規則復雜度。但是實際測試中也發現一些問題,例如通過CMD刪除文件不記錄的情況,只能寄希望后續版本修復該bug。
附錄
新版本配置文件sysmon-modular項目:
https://github.com/olafhartong/sysmon-modular