Sysmon v15.15
依據 Mark Russinovich 和 Thomas Garnier
發佈時間: 2024 年 7 月 23 日
下載 Sysmon (4.6 MB)
簡介
系統監視器 (Sysmon) 是一種 Windows 系統服務和裝置驅動程式,一旦安裝在系統上,就會在系統重新開機期間保持常駐狀態,以監視和記錄 Windows 事件記錄檔的系統活動。 其提供有關處理序建立、網路連線,以及檔案建立時間變更的詳細資訊。 藉由收集其使用 Windows 事件集合或 SIEM 代理程式所產生的事件,然後分析事件,您可以識別惡意或異常活動,並了解入侵者和惡意程式碼在您的網路上的運作方式。 服務會以受保護的進程的形式執行,因此不允許廣泛的使用者模式互動。
請注意, Sysmon 不會提供所產生事件的分析,也不會嘗試向攻擊者隱藏自己。
Sysmon 功能概觀
Sysmon 包括下列功能:
- 針對目前和父處理程序記錄使用完整命令列的處理程序建立。
- 使用 SHA1 (預設值)、MD5、SHA256 或 IMPHASH 記錄處理程序映像檔的雜湊。
- 多個雜湊可以同時使用。
- 在處理程序中包含處理程序 GUID,建立事件以允許事件相互關聯,即使 Windows 重複使用處理程序識別碼也是如此。
- 在每個事件中包含工作階段 GUID,以允許相同登入工作階段上的事件相互關聯。
- 記錄驅動程式或具有其簽章和雜湊的 DLL 載入。
- 記錄對磁碟和磁碟區進行原始讀取存取的開啟。
- 選擇性地記錄網路連線,包括每個連線的來源處理程序、IP 位址、連接埠號碼、主機名稱和連接埠名稱。
- 偵測檔案建立時間的變更,以了解檔案何時真正建立。 修改檔案建立時間戳記是惡意程式碼通常用來掩飾其追蹤的技術。
- 在登錄中變更時自動重新載入設定。
- 動態包含或排除特定事件的規則篩選。
- 從開機程序中的初期產生事件,以擷取由複雜的核心模式惡意程式碼所建立的活動。
螢幕擷取畫面
使用方式
一般使用方式包含安裝及解除安裝 Sysmon 的簡單命令列選項,以及檢查和修改其設定:
安裝:sysmon64 -i [<configfile>]
更新設定:sysmon64 -c [<configfile>]
安裝事件資訊清單:sysmon64 -m
列印架構:sysmon64 -s
解除安裝:sysmon64 -u [force]
參數 | 描述 |
---|---|
-i | 安裝服務和驅動程式。 選擇性地採用組態檔。 |
-c | 如果未提供其他引數,請更新已安裝 Sysmon 驅動程式的設定,或傾印目前的設定。 選擇性地採用組態檔。 |
-m | 安裝事件資訊清單 (也會針對服務安裝以隱含方式完成)。 |
-s | 列印設定架構定義。 |
-u | 解除安裝服務和驅動程式。 即使未安裝某些元件,使用 -u force 會導致解除安裝繼續進行。 |
服務會立即記錄事件,而驅動程式會安裝為開機啟動驅動程式,以從開機初期擷取活動,而服務會在啟動時寫入事件記錄檔。
在 Vista 和更新版本上,事件會儲存在 Applications and Services Logs/Microsoft/Windows/Sysmon/Operational
中。
在較舊的系統上,事件會寫入 System
事件記錄檔。
如果您需要組態檔的詳細資訊,請使用 -? config
命令。
指定 -accepteula
以在安裝時自動接受 EULA,否則系統會以互動方式提示您接受它。
安裝或解除安裝都不需要重新開機。
範例
使用預設設定進行安裝 (以 SHA1 雜湊處理且沒有網路監視的處理程序映像)
sysmon -accepteula -i
使用組態檔安裝 Sysmon (如下所述)
sysmon -accepteula -i c:\windows\config.xml
解除安裝
sysmon -u
傾印目前的設定
sysmon -c
使用組態檔重新設定使用中的 Sysmon (如下所述)
sysmon -c c:\windows\config.xml
將設定變更為預設設定
sysmon -c --
顯示設定架構
sysmon -s
事件
在 Vista 和更新版本上,事件會儲存在 Applications and Services Logs/Microsoft/Windows/Sysmon/Operational
中,而較舊的系統事件則會寫入 System
事件記錄檔。
事件時間戳記會使用 UTC 標準時間。
以下是 Sysmon 所產生每個事件類型的範例。
事件識別碼 1:處理程序建立
處理程序建立事件會提供新建立處理程序的延伸資訊。 完整的命令列提供處理程序執行的內容。 ProcessGUID
欄位是跨定義域此處理程式的唯一值,可讓事件相互關聯更容易。 雜湊是檔案的完整雜湊,具有 HashType
欄位中的演算法。
事件識別碼 2:處理程序已變更檔案建立時間
當處理程序明確修改檔案建立時間時,系統會註冊變更檔案建立時間事件。 此事件有助於追蹤檔案的真實建立時間。 攻擊者可能會變更後門的檔案建立時間,使其看起來像是隨作業系統一起安裝。 請注意,許多處理程序會合法地變更檔案的建立時間;這不一定代表惡意活動。
事件識別碼 3:網路連線
網路連線事件活動會記錄電腦上的 TCP/UDP 連線。 預設會將其停用。 每個連線都會透過 ProcessId
和 ProcessGuid
欄位連結到處理程序。 事件也包含來源和目的地主機名稱 IP 位址、連接埠號碼和 IPv6 狀態。
事件識別碼 4:Sysmon 服務狀態已變更
服務狀態變更事件會報告 Sysmon 服務的狀態 (已啟動或停止)。
事件識別碼 5:處理程序已終止
處理程序終止事件會在處理程序終止時報告。 它會提供處理程序的 UtcTime
、ProcessGuid
和 ProcessId
。
事件識別碼 6:驅動程式已載入
驅動程式已載入事件會提供系統上所載入驅動程式的相關資訊。 其中會提供已設定的雜湊與簽章資訊。 基於效能考慮,簽章會以非同步方式建立,並指出檔案在載入後是否已移除。
事件識別碼 7:映像已載入
映像已載入事件會記錄模組何時在特定處理程序中載入。 預設會停用此事件,且必須使用「–l
」選項進行設定。 其會指出用來載入模組的處理程序、雜湊和簽章資訊。 基於效能考慮,簽章會以非同步方式建立,並指出檔案在載入後是否已移除。 此事件應該謹慎設定,因為監視所有映像已載入事件將會產生大量的記錄。
事件識別碼 8:CreateRemoteThread
CreateRemoteThread
事件會偵測處理程序何時在另一個處理程序中建立執行緒。 惡意程式碼會使用這項技術來插入程式碼,並隱藏在其他處理程序中。 事件表示來源和目標處理程序。 其會提供將在新執行緒中執行之程式碼的資訊:StartAddress
、StartModule
和 StartFunction
。 請注意,系統會推斷 StartModule
和 StartFunction
欄位,如果起始位址位於載入的模組或已知的匯出函式之外,這些欄位可能會是空的。
事件識別碼 9:RawAccessRead
RawAccessRead
事件會偵測處理程序何時使用 \\.\
標記從磁碟機執行讀取作業。 惡意程式碼通常會使用這項技術來外洩鎖定以供讀取檔案的資料,以及避免檔案存取稽核工具。 事件表示來源處理程序和目標裝置。
事件識別碼 10:ProcessAccess
處理程序已存取事件會報告處理程序何時開啟另一個處理程序,此作業通常會接著資訊查詢或讀取和寫入目標處理程序的位址空間。 這可讓您偵測駭客工具,以讀取本機安全性授權 (Lsass.exe) 等處理程序的記憶體內容,以竊取認證並用於傳遞雜湊攻擊。 如果有使用中的診斷公用程式可重複開啟處理程序來查詢其狀態,則啟用它可能會產生大量的記錄,因此通常應該只使用移除預期存取的篩選來完成。
事件識別碼 11:FileCreate
建立或覆寫檔案時,系統會記錄檔案建立作業。 此事件適用於監視自動啟動位置,例如開機資料夾,以及暫存和下載目錄,這是初始感染期間惡意程式碼放置的常見位置。
事件識別碼 12:RegistryEvent (物件建立和刪除)
登錄機碼和值建立以及刪除作業會對應至此事件類型,這對於監視登錄自動啟動位置的變更或特定惡意程式碼登錄修改很有用。
Sysmon 會使用登錄根機碼名稱的縮寫版本,且具有下列對應:
索引鍵名稱 | 縮寫 |
---|---|
HKEY_LOCAL_MACHINE |
HKLM |
HKEY_USERS |
HKU |
HKEY_LOCAL_MACHINE\System\ControlSet00x |
HKLM\System\CurrentControlSet |
HKEY_LOCAL_MACHINE\Classes |
HKCR |
事件識別碼 13:RegistryEvent (值已設定)
此登錄事件類型會識別登錄值修改。 事件會記錄針對類型為 DWORD
和 QWORD
的登錄值所寫入的值。
事件識別碼 14:RegistryEvent (機碼和值重新命名)
登錄機碼和值重新命名作業會對應至此事件類型,記錄已重新命名機碼或值的新名稱。
事件識別碼 15:FileCreateStreamHash
此事件會記錄何時建立具名檔案資料流,並產生事件,以記錄已指派資料流之檔案內容的雜湊 (未命名資料流),以及具名資料流的內容。 有些惡意程式碼變體會透過瀏覽器下載來放置其可執行檔或組態設定,而此事件旨在根據附加 Zone.Identifier
「網頁標記」資料流的瀏覽器來擷取該變體。
事件識別碼 16:ServiceConfigurationChange
此事件會記錄 Sysmon 設定中的變更,例如何時更新篩選規則。
事件識別碼 17:PipeEvent (管道已建立)
此事件會在建立具名管道時產生。 惡意程式碼通常會使用具名管道進行處理序間通訊。
事件識別碼 18:PipeEvent (管道已連線)
此事件會記錄用戶端與伺服器之間何時建立具名管道連線。
事件識別碼 19:WmiEvent (偵測到 WmiEventFilter 活動)
註冊 WMI 事件篩選的時機,這是惡意程式碼用來執行的方法,此事件會記錄 WMI 命名空間、篩選名稱和篩選運算式。
事件識別碼 20:WmiEvent (偵測到 WmiEventConsumer 活動)
此事件會記錄 WMI 取用者的註冊、記錄取用者名稱、記錄和目的地。
事件識別碼 21:WmiEvent (偵測到 WmiEventConsumerToFilter 活動)
當取用者繫結至篩選時,此事件會記錄取用者名稱和篩選路徑。
事件識別碼 22:DNSEvent (DNS 查詢)
當處理程序執行 DNS 查詢就會產生此事件,無論結果成功或失敗、或是否快取。 此事件的遙測已針對 Windows 8.1 新增,因此無法在 Windows 7 和更早版本上使用。
事件識別碼 23:FileDelete (檔案刪除已封存)
檔案已刪除。 除了記錄事件,已刪除的檔案也會儲存在 ArchiveDirectory
中 (預設為 C:\Sysmon
)。 在正常作業條件下,此目錄可能會成長為不合理的大小 - 請參閱事件識別碼 26:FileDeleteDetected
以取得類似的行為,但不儲存已刪除的檔案。
事件識別碼 24:ClipboardChange (剪貼簿中的新內容)
當系統剪貼簿內容變更時就會產生此事件。
事件識別碼 25:ProcessTampering (處理程序映像變更)
當偵測到「hollow」或「herpaderp」等處理程序隱藏技術時,就會產生此事件。
事件識別碼 26:FileDeleteDetected (檔案刪除已記錄)
檔案已刪除。
事件識別碼 27:FileBlockExecutable
當 Sysmon 偵測並封鎖可執行檔 (PE 格式) 的建立時,就會產生此事件。
事件識別碼 28:FileBlockShredding
當 Sysmon 偵測並封鎖 SDelete 等工具的檔案銷毀時,就會產生此事件。
事件識別碼 29:FileExecutableDetected
當 Sysmon 偵測到新可執行檔 (PE 格式) 的建立時,就會產生此事件。
事件識別碼 255:Error
當 Sysmon 內發生錯誤時,就會產生此事件。 如果系統負載過重,且無法執行特定工作,或 Sysmon 服務中存在錯誤,或即使不符合特定安全性和完整性條件,也可能會發生這些錯誤。 您可以在 Sysinternals 論壇或 Twitter (@markrussinovich) 上報告任何錯誤。
組態檔
您可以在 -i (安裝) 或 -c (安裝) 組態參數之後指定組態檔。 其可讓您更輕鬆地部署預設組態,以及篩選擷取的事件。
簡單的設定 xml 檔案看起來像這樣:
<Sysmon schemaversion="4.82">
<!-- Capture all hashes -->
<HashAlgorithms>*</HashAlgorithms>
<EventFiltering>
<!-- Log all drivers except if the signature -->
<!-- contains Microsoft or Windows -->
<DriverLoad onmatch="exclude">
<Signature condition="contains">microsoft</Signature>
<Signature condition="contains">windows</Signature>
</DriverLoad>
<!-- Do not log process termination -->
<ProcessTerminate onmatch="include" />
<!-- Log network connection if the destination port equal 443 -->
<!-- or 80, and process isn't InternetExplorer -->
<NetworkConnect onmatch="include">
<DestinationPort>443</DestinationPort>
<DestinationPort>80</DestinationPort>
</NetworkConnect>
<NetworkConnect onmatch="exclude">
<Image condition="end with">iexplore.exe</Image>
</NetworkConnect>
</EventFiltering>
</Sysmon>
組態檔包含 Sysmon 標籤上的 schemaversion 屬性。 此版本與 Sysmon 二進位版本無關,且允許剖析較舊的組態檔。 您可以使用「-? config
」命令列來取得目前的架構版本。 設定項目直接位於 Sysmon
標籤底下,篩選則位於 EventFiltering
標籤底下。
設定項目
設定項目類似於命令列參數,並包含下列項目
設定項目包括下列項目:
Entry | 值 | Description |
---|---|---|
ArchiveDirectory | String | 磁碟區根目錄的目錄名稱,其中會移入刪除時複製的檔案。 目錄受到系統 ACL 保護 (您可以使用 Sysinternals 的 PsExec 以使用 psexec -sid cmd 來存取目錄)。 預設:Sysmon |
CheckRevocation | 布林值 | 控制簽章撤銷檢查。 預設:True |
CopyOnDeletePE | 布林值 | 保留已刪除的可執行檔映像檔。 預設:False |
CopyOnDeleteSIDs | 字串 | 將保留檔案刪除之帳戶 SID 的逗點分隔清單。 |
CopyOnDeleteExtensions | 字串 | 刪除時保留之檔案的副檔名。 |
CopyOnDeleteProcesses | 字串 | 將保留檔案刪除的處理程序名稱。 |
DnsLookup | 布林值 | 控制反向 DNS 查閱。 預設:True |
DriverName | String | 使用驅動程式和服務映像的指定名稱。 |
HashAlgorithms | 字串 | 要套用雜湊處理的雜湊演算法。 支援的演算法包括 MD5、SHA1、SHA256、IMPHASH 和 * (all)。 預設:None |
命令列參數的設定項目描述於 Sysmon 使用方式輸出中。 參數是選用的,以標籤為基礎。 如果命令列參數也啟用事件,則其必須透過其篩選標籤進行設定。 您可以指定 -s
參數,讓 Sysmon 列印完整的設定架構,包括事件標籤,以及每個事件的欄位名稱和類型。 例如,以下是 RawAccessRead
事件類型的架構:
<event name="SYSMON_RAWACCESS_READ" value="9" level="Informational "template="RawAccessRead detected" rulename="RawAccessRead" version="2">
<data name="UtcTime" inType="win:UnicodeString" outType="xs:string"/>
<data name="ProcessGuid" inType="win:GUID"/>
<data name="ProcessId" inType="win:UInt32" outType="win:PID"/>
<data name="Image" inType="win:UnicodeString" outType="xs:string"/>
<data name="Device" inType="win:UnicodeString" outType="xs:string"/>
</event>
事件篩選項目
事件篩選可讓您篩選產生的事件。 在許多情況下,事件可能會產生干擾,且無法收集所有事件。 例如,您可能只對特定處理程序 (而非所有處理程序) 的網路連線感興趣。 您可以篩選主機上的輸出,以減少要收集的資料。
每個事件在組態檔中的 EventFiltering 節點底下都有自己的篩選標籤:
識別碼 | 標籤 | Event |
---|---|---|
1 | ProcessCreate | 處理程序建立 |
2 | FileCreateTime | 檔案建立時間 |
3 | NetworkConnect | 偵測到的網路連線 |
4 | n/a | Sysmon 服務狀態變更 (無法篩選) |
5 | ProcessTerminate | 處理程序已終止 |
6 | DriverLoad | 驅動程式已載入 |
7 | ImageLoad | 映像已載入 |
8 | CreateRemoteThread | 偵測到 CreateRemoteThread |
9 | RawAccessRead | 偵測到 RawAccessRead |
10 | ProcessAccess | 處理程序已存取 |
11 | FileCreate | 檔案已建立 |
12 | RegistryEvent | 登錄物件已新增或刪除 |
13 | RegistryEvent | 登錄值已設定 |
14 | RegistryEvent | 登錄物件已重新命名 |
15 | FileCreateStreamHash | 檔案資料流已建立 |
16 | n/a | Sysmon 設定變更 (無法篩選) |
17 | PipeEvent | 具名管道已建立 |
18 | PipeEvent | 具名管道已連線 |
19 | WmiEvent | WMI 篩選 |
20 | WmiEvent | WMI 取用者 |
21 | WmiEvent | WMI 取用者篩選 |
22 | DNSQuery | DNS 查詢 |
23 | FileDelete | 檔案刪除已封存 |
24 | ClipboardChange | 剪貼簿中的新內容 |
25 | ProcessTampering | 處理程序映像變更 |
26 | FileDeleteDetected | 檔案刪除已記錄 |
27 | FileBlockExecutable | 檔案區塊可執行檔 |
28 | FileBlockShredding | 檔案區塊銷毀 |
29 | FileExecutableDetected | 偵測到檔案可執行檔 |
您也可以在工作名稱上的事件檢視器中找到這些標籤。
如果符合事件,則會套用 onmatch
篩選。 您可以使用篩選標籤的 onmatch
屬性來進行變更。 如果值為 "include"
,則表示只包含相符的事件。 如果設定為 "exclude"
,則會包含事件,但規則相符時除外。 您可以針對每個事件識別碼同時指定 include 篩選集和 exclude 篩選集,其中 exclude 相符項目會優先處理。
每個篩選可以包含零個或多個規則。 篩選標籤下的每個標籤都是事件的欄位名稱。 指定相同欄位名稱條件的規則會以 OR 條件的方式運作,而指定不同欄位名稱的規則會以 AND 條件的方式運作。 欄位規則也可以使用條件來比對值。 條件如下 (全部不區分大小寫):
Condition | 說明 |
---|---|
is | 預設值,值相等 |
為任何 | 欄位是其中一個 ; 分隔值 |
不是 | 值不同 |
contains | 欄位包含此值 |
包含任何 | 欄位包含任何 ; 分隔值 |
包含所有 | 欄位包含所有 ; 分隔值 |
排除 | 欄位不包含此值 |
排除任何 | 欄位不包含一或多個 ; 分隔值 |
排除所有 | 欄位不包含任何 ; 分隔值 |
開頭為 | 欄位以此值開頭 |
結尾為 | 欄位以此值結尾 |
開頭不是 | 欄位不是以此值開頭 |
結尾不是 | 欄位不是以此值結尾 |
小於 | 語彙比較小於零 |
大於 | 語彙比較大於零 |
image | 比對映像路徑 (完整路徑或僅限映像名稱)。 例如:lsass.exe 將會比對 c:\windows\system32\lsass.exe |
您可以將其指定為屬性,以使用不同的條件。 這會從其路徑中具有 iexplore.exe 的處理程序排除網路活動:
<NetworkConnect onmatch="exclude">
<Image condition="contains">iexplore.exe</Image>
</NetworkConnect>
若要讓 Sysmon 報告哪些規則相符導致記錄事件,請將名稱新增至規則:
<NetworkConnect onmatch="exclude">
<Image name="network iexplore" condition="contains">iexplore.exe</Image>
</NetworkConnect>
您可以針對相同的標籤同時使用 include 和 exclude 規則,其中 exclude 規則會覆寫 include 規則。 在規則中,篩選條件具有 OR 行為。
在稍早顯示的範例設定中,網路篩選會同時使用 include 和 exclude 規則,將依所有處理程序擷取至連接埠 80 和 443 的活動,但名稱中具有 iexplore.exe
的活動除外。
您也可以覆寫使用規則群組合併規則的方式,讓一或多個事件的規則合併類型明確地設定為 AND 或 OR。
下列範例會示範這種使用方式。 在第一個規則群組中,當 timeout.exe
僅使用 100
的命令列引數執行時將產生處理程序建立事件,但處理程序終止事件將針對 ping.exe
和 timeout.exe
的終止產生。
<EventFiltering>
<RuleGroup name="group 1" groupRelation="and">
<ProcessCreate onmatch="include">
<Image condition="contains">timeout.exe</Image>
<CommandLine condition="contains">100</CommandLine>
</ProcessCreate>
</RuleGroup>
<RuleGroup groupRelation="or">
<ProcessTerminate onmatch="include">
<Image condition="contains">timeout.exe</Image>
<Image condition="contains">ping.exe</Image>
</ProcessTerminate>
</RuleGroup>
<ImageLoad onmatch="include"/>
</EventFiltering>
下載 Sysmon (4.6 MB)
執行於:
- 用戶端:Windows 10 和更新版本。
- 伺服器:Windows Server 2016 及更高版本。