Sysmon v 13.30

依 Mark Russinovich 和 Thomas Garnier

發行日期:2021年10月26日

下載下載 SYSMON (2.9 MB)

簡介

系統監視器 (Sysmon) 是一種 Windows 系統服務和設備磁碟機,一旦安裝在系統上,就會在系統重新開機期間維持持續,以監視並將系統活動記錄到 Windows 事件記錄檔。 它提供有關流程建立、網路連線,以及檔案建立時間變更的詳細資訊。 藉由收集使用Windows 事件收集SIEM代理程式所產生的事件,並接著分析這些事件,您可以識別惡意或異常活動,以及瞭解入侵者和惡意程式碼在您網路上的運作方式。

請注意, Sysmon 不會提供它所產生之事件的分析,也不會嘗試保護或隱藏本身免于攻擊者。

Sysmon 功能的總覽

Sysmon 包含下列功能:

  • 使用目前和父進程的完整命令列來記錄進程建立。
  • 使用 SHA1 (預設) 、MD5、SHA256 或 IMPHASH,記錄處理常式影像檔案的雜湊。
  • 您可以同時使用多個雜湊。
  • 在進程建立事件中包含進程 GUID,以允許事件的相互關聯,即使 Windows 重複使用處理序識別碼也一樣。
  • 在每個事件中包含會話 GUID,以允許相同登入會話上的事件相互關聯。
  • 記錄驅動程式或 Dll 的載入及其簽章和雜湊。
  • 針對磁片和磁片區的原始讀取存取,會開啟記錄檔。
  • 選擇性地記錄網路連線,包括每個連線的來源進程、IP 位址、埠號碼、主機名稱和埠名稱。
  • 偵測檔案建立時的變更,以瞭解實際建立檔案的時間。 檔案建立時間戳記的修改是惡意程式碼經常用來涵蓋其追蹤的技術。
  • 如果登錄中有變更,則會自動重載設定。
  • 以動態方式包含或排除特定事件的規則篩選。
  • 從開機程式早期產生事件,以捕捉甚至是精密的核心模式惡意程式碼所進行的活動。

螢幕擷取畫面

EventViewer

使用方式

常見的使用方式是使用簡單的命令列選項來安裝和卸載 Sysmon,以及檢查和修改其設定:

安裝: sysmon64 -i [<configfile>]
更新設定: sysmon64 -c [<configfile>]
安裝事件資訊清單: sysmon64 -m
列印架構: sysmon64 -s
卸載: sysmon64 -u [force]

參數 Description
-i 安裝服務與驅動程式。 (選擇性)取得設定檔。
-c 如果未提供其他引數,請更新已安裝 Sysmon 驅動程式的設定,或傾印目前的設定。 (選擇性)使用設定檔。
-m 安裝事件資訊清單 (也會以隱含方式在服務安裝上執行) 。
-s 列印設定架構定義。
-u 卸載服務與驅動程式。 -u force即使未安裝某些元件,使用也會導致 uninstall 繼續進行。

服務會立即記錄事件,而驅動程式會安裝為開機啟動驅動程式,以便在啟動時,服務將在開機時寫入事件記錄檔。

在 Vista 和更新版本上,事件會儲存在中 Applications and Services Logs/Microsoft/Windows/Sysmon/Operational 。 在較舊的系統上,會將事件寫入 System 事件記錄檔。

如果您需要有關設定檔的詳細資訊,請使用 -? config 命令。

指定 -accepteula 在安裝時自動接受 EULA,否則系統會以互動方式提示您接受 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 ,而較舊的系統事件則會寫入至系統事件記錄檔。 事件時間戳記是以 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

當進程使用 denotation 從磁片磁碟機讀取作業時,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 web 標記」串流來進行捕捉。

事件識別碼16: ServiceConfigurationChange

此事件會記錄 Sysmon 設定中的變更-例如,更新篩選規則時。

事件識別碼17:已建立 PipeEvent (管道)

建立具名管道時,會產生此事件。 惡意程式碼通常會使用具名管道進行處理序間通訊。

事件識別碼18: PipeEvent (連接的管道)

此事件會記錄在用戶端與伺服器之間建立具名管道連接的時間。

事件識別碼19:偵測到 >register-wmievent (WmiEventFilter 活動)

當 WMI 事件篩選器註冊(惡意程式碼用來執行的方法)時,此事件會記錄 WMI 命名空間、篩選名稱和篩選運算式。

事件識別碼20:偵測到 >register-wmievent (WmiEventConsumer 活動)

此事件會記錄 WMI 取用者的註冊,記錄取用者名稱、記錄和目的地。

事件識別碼21:偵測到 >register-wmievent (WmiEventConsumerToFilter 活動)

當取用者系結至篩選準則時,此事件會記錄取用者名稱和篩選路徑。

事件識別碼22: DNSEvent (DNS 查詢)

當處理常式執行 DNS 查詢時,無論結果為成功或失敗,都會產生這個事件。 此事件的遙測已針對 Windows 8.1 新增,因此不會在 Windows 7 和更早版本中提供。

事件識別碼23: FileDelete (檔案刪除封存的)

已刪除檔案。 除了記錄事件之外,已刪除的檔案也會儲存在 ArchiveDirectory 預設的 (中 C:\Sysmon) 。 在正常作業條件下,此目錄可能會變得不合理的大小,請參閱事件識別碼26: FileDeleteDetected 適用于類似的行為,但不儲存已刪除的檔案。

事件識別碼24: ClipboardChange (剪貼簿中的新內容)

當系統剪貼簿內容變更時,就會產生此事件。

事件識別碼25: ProcessTampering (進程映射變更)

當偵測到隱藏的技術(例如「空心」或「herpaderp」)時,就會產生此事件。

事件識別碼26: FileDeleteDetected (檔案刪除已記錄)

已刪除檔案。

事件識別碼255:錯誤

當 Sysmon 中發生錯誤時,就會產生此事件。 如果系統負載過重,而且無法執行某些工作或 Sysmon 服務中有錯誤,就可能會發生這種情況。 您可以在 Sysinternals 論壇上或透過 Twitter (@markrussinovich) 報告任何 bug。

組態檔

您可以在 -i (安裝) 或 -c (安裝) 設定參數之後指定設定檔案。 它們可讓您更輕鬆地部署預設設定,並篩選已捕捉的事件。

簡單的設定 xml 檔案看起來像這樣:

設定檔

此設定檔包含 Sysmon 標記上的 schemaversion 屬性。 此版本獨立于 Sysmon 二進位版本,可讓您剖析較舊的設定檔。 您可以使用 [-?] 取得目前的架構版本。 config] 命令列。 設定專案直接放在 Sysmon 標籤底下,而篩選準則位於 EventFiltering 標記底下。

設定專案

設定專案類似于命令列參數,並包含下列專案:

設定專案包括下列各項:

進入 描述
ArchiveDirectory String 磁片區根目錄中的目錄名稱,將在其中移動刪除檔案的位置。 目錄會使用系統 ACL 來保護 (您可以使用 Sysinternals 中的 PsExec,利用) 來存取目錄 psexec -sid cmd 。 預設值: Sysmon
CheckRevocation Boolean 控制簽章撤銷檢查。 預設值︰True
CopyOnDeletePE Boolean 保留已刪除的可執行檔影像檔案。 預設值︰False
CopyOnDeleteSIDs 字串 將保留檔案刪除的帳戶 Sid 清單(以逗號分隔)。
CopyOnDeleteExtensions 字串 在刪除時保留的檔案延伸。
CopyOnDeleteProcesses 字串 將保留檔案刪除的進程名稱 (s) 。
DnsLookup Boolean 控制反向 DNS 查閱。 預設值︰True
DriverName String 針對驅動程式和服務映射使用指定名稱。
HashAlgorithms 字串 雜湊演算法 (s) 以進行雜湊處理。 支援的演算法包括 MD5、SHA1、SHA256、IMPHASH 和 * (所有) 。 預設值: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 節點底下都有自己的篩選標記:

識別碼 標籤 事件
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 已新增或刪除 Registry 物件
13 RegistryEvent 已設定登錄值
14 RegistryEvent 登錄物件重新命名
15 FileCreateStreamHash 已建立檔案資料流程
16 n/a 無法篩選 Sysmon 設定變更 ()
17 PipeEvent 已建立具名管道
18 PipeEvent 具名管道已連線
19 >register-wmievent WMI 篩選
20 >register-wmievent WMI 取用者
21 >register-wmievent WMI 取用者篩選
22 DNSQuery DNS 查詢
23 FileDelete 檔案刪除已封存
24 ClipboardChange 剪貼簿中的新內容
25 ProcessTampering 處理影像變更
26 FileDeleteDetected 檔案刪除已記錄

您也可以在 [事件檢視器] 中的工作名稱上找到這些標記。

onmatch如果事件相符,就會套用篩選。 您可以使用篩選標記的屬性來變更它 onmatch 。 如果值為 "include" ,則表示只包含相符的事件。 如果設定為 "exclude" ,則會包含事件,除非規則相符。 您可以同時為每個事件識別碼指定包含篩選集和排除篩選集,其中排除相符的優先順序較高。

每個篩選準則可以包含零或多個規則。 篩選標記底下的每個標記都是來自事件的功能變數名稱。 針對相同的功能變數名稱指定條件的規則會以或條件的方式運作,而指定不同功能變數名稱的行為則會和條件一樣。 欄位規則也可以使用條件來符合值。 這些條件如下 (所有) 不區分大小寫:

Condition 描述
is 預設值為 equals
是任何 此欄位是其中一個 ; 分隔值
不是 值不同
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 規則,其中排除規則會覆寫包含規則。 在規則中,篩選準則具有或行為。

在稍早所示的範例設定中,網路篩選器會使用 include 和 exclude 規則來將活動捕捉至埠80和443(除了其名稱中的所有進程) iexplore.exe

您也可以使用規則群組來覆寫規則的結合方式,允許將一或多個事件的類型明確設定為 AND 或 OR。

下列範例會示範這種使用方式。 在第一個規則群組中,將會在 timeout.exe 只使用的命令列引數執行時產生處理常式 create 事件 100 ,但是會產生和的終止處理常式終止事件 ping.exetimeout.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 (2.9 MB)

執行于:

  • 用戶端: Windows 7 和更新版本。
  • 伺服器: Windows server 2008 R2 和更新版本。