Sysmon ( System Monitor ) 是一種 Windows 系統服務和裝置驅動程式,一旦安裝在系統上,它就會在系統重新開機後繼續駐留,以監視系統活動並將其記錄到 Windows 事件日誌中。Sysmon 記錄的事件日誌非常詳細,提供了行程執行、檔案系統活動、網路級事件、Windows 登錄檔事件和其他 Windows 特定行程(如命名管道)的視覺化。
部署Sysmon
部署 Sysmon 非常簡單。我們將從 Microsoft 網站下載軟體包,然後為 sysmon 下載一個非常好的配置檔。
Sysmon 下載連結:https://learn.microsoft.com/en-us/sysinternals/downloads/sysmon
Sysmon 需要一個配置檔,這樣它才知道如何以及在系統上監控什麽。我們也可以建立自己的 sysmon 配置,但有一些非常知名的配置是專門針對安全事件量身客製的,並且也對映到 Mitre 技術。
這裏直接使用 olaf hartongs sysmon 配置:
https://github.com/olafhartong/sysmon-modular
先從微軟官網下載 sysmon。然後解壓存檔並以管理員身份開啟 powershell 並導航到 sysmon 目錄。我們建議將 sysmon 檔解壓到「C:\Windows\」下,這樣 sysmon 路徑就變成了「C:\Windows\sysmon」。
Invoke-WebRequest -Uri https://raw.githubusercontent.com/olafhartong/sysmon-modular/master/sysmonconfig.xml -OutFile C:\Windows\\Sysmon\config.xml.\Sysmon64.exe -accepteula -i config.xmlGet-Service -name Sysmon64
sysmon日誌檔位置
cmd開啟eventvwr找到
應用程式和服務日誌 > Microsoft > Windows > Sysmon > Operational
對應的檔的位置為
%SystemRoot%\System32\Winevt\Logs\
利用行程執行追蹤惡意軟體
Sysmon 不僅會顯示正在執行的行程,還會顯示行程何時結束,以及有關可執行檔或二進制檔本身的大量資訊。它還為系統上執行的所有二進制檔提供哈希值,並列出它們是否已簽名,從而可以輕松檢視惡意程式碼是否試圖模仿合法程式(例如 PowerShell 或其他內建 Microsoft 工具)。
Event ID 1: 行程建立
Sysmon 事件 ID 1 表示行程執行。每當記憶體中生成新行程時,Sysmon 中都會記錄 ID 為 1 的事件。此事件對於安全事件非常重要,因為了解哪些程式或惡意軟體在記憶體中執行可以為分析提供更多重要背景資訊。
這裏模擬執行黑客工具mimikatz抓取明文密碼。
在sysmon的日誌中查詢事件ID1可以看到已經記錄了mimikatz的執行記錄。
在上面的例子中,我們可以看到一些在分析階段提供價值的重要欄位:
可以嘗試將mimikatz重新命名並移動到其他位置執行,對比sysmon的記錄。
修改檔名後重新執行,sysmon仍然記錄了修改前的原始檔名。可以在 Windows 資料夾中看到一個名為 WinSvc 的檔。通常攻擊者喜歡將他們的工具設定在合法的檔案系統位置以逃避防禦。
在上面的例子中,檔後設資料立即表明生成的行程實際上是 mimikatz。攻擊者經常制作自己的自訂工具或剝離已知的預設後設資料,就像在上面的例子中,它顯示公司名稱、工具描述等。
其次假設沒有檔後設資料被篡改,並使該工具看起來像合法的工具。在這種情況下,我們可以利用威脅情報供應商的哈希值。不同的威脅行為者可能在不同的活動中使用同一個工具,並且它是已知的惡意工具。
狩獵惡意 C2 IP 和 網域名稱
Event ID 3: 網路連線
Sysmon 事件 ID 3 事件日誌 TCP 和 UDP 連線。每個網路事件都對映有一個行程 ID 和 ProcessGUID(為了方便關聯)。
這些事件對於檢測命令和控制流量(這可能表明攻擊者正在發送竊取數據、傳播惡意軟體等的命令)以及了解哪些應用程式正在存取某些互聯網資源非常有用。
可以看到記錄了檔的完整路徑、建立連線的源電腦的 IP 地址、目標 IP 地址和埠資訊。
Event ID 22: DNS 查詢
事件 ID 22用於與 DNS 相關的事件。當行程執行 DNS 查詢時,無論結果成功還是失敗都會生成此事件。記錄 DNS 流量有很多好處,例如尋找惡意遠端存取工具、安全錯誤配置以及命令和控制流量。
事件22顯示了DNS 查詢的網域名稱以及發起DNS查詢的行程檔完整路徑,對於排查定位非常方便。
真實的惡意軟體經常使用 DNS 與 C2 伺服器通訊,DNS 也用於 DNS 隧道技術。如果我們看到行程對某個域及其隨機子體的大量異常請求,那麽絕對是 DNS 隧道的標誌。
追蹤檔案系統變更
Event ID 11 : 檔建立
事件 ID 11 記錄檔建立事件。建立或覆蓋檔時會記錄檔建立操作。此事件對於監視自動啟動位置(例如啟動資料夾)以及臨時目錄和下載目錄非常有用,這些目錄是初始感染期間惡意軟體落地的常見位置。
我們還可以利用此事件 ID 來監視奇怪的命名檔、不常見位置的檔等。例如,如果我們看到由奇怪的命名檔建立的檔,我們還可以使用此事件 ID 來關聯這些檔之間的關系並建立時間線。
Event ID 15 : 檔建立流hash
該事件主要記錄使用瀏覽器下載檔的記錄。
此事件記錄建立命名檔流的時間,並生成記錄分配到該流的檔(未命名流)內容的哈希值以及命名流內容的事件。有些惡意軟體變體會透過瀏覽器下載來刪除其可執行檔或配置設定,此事件的目的是根據附加 Zone.Identifier「網路標記」流的瀏覽器捕獲該變體。
使用Chrome下載檔時,在下載完成之前會先在檔名前加上 Zone.Identifier。ZoneId=3表示從互聯網上下載的檔。
檔下載完成後再次看到目的檔名是記錄事件的檔的完整路徑,還看到了哈希值。如果沒有 Zone.Identifier 關鍵字,則正確的哈希值表示這是原始檔,沒有任何其他數據流。
追蹤登錄檔變更
Event ID 12:登錄檔物件建立和刪除
登錄檔項和值建立和刪除操作對映到此事件 ID,這對於監視登錄檔自動啟動位置的更改或特定惡意軟體登錄檔修改非常有用。
每當在登錄檔中的任何位置建立或刪除鍵值對時,都會在此處記錄。因為攻擊者經常篡改和操縱登錄檔以實作永續性、防禦規避等。
使用msf的getsystem提權後,首先看到一個服務被建立,然後被刪除。
Event ID 13:設定登錄檔值
為了分析為什麽這是一個惡意事件,開啟之前的事件 id 13 事件。
可以看到服務的執行被重新導向到命名管道。上面的命令列參數是可疑的,這是 Metasploit 的行為。每當在 Metasploit 中使用 getsystem進行許可權升級時,都會建立這類事件。
狩獵惡意命名管道
Event ID 17:命名管道建立
建立命名管道時會生成此事件。惡意軟體通常使用命名管道進行行程間通訊。它類似於網路套接字,可用於在主機和行程之間發送和接收資訊。
例如,如果一個行程想要與另一個行程通訊,它可以透過網路或使用檔發送訊息,其中一個行程將訊息寫入該檔,另一個行程讀取該訊息。這使得它成為被惡意行為者和工具濫用的有價值的目標。
上面msf生成的reverse.exe執行過程中建立的管道。
我們可以使用 sysmon 事件 ID 17 來監視任何管道建立。管道建立是 Windows 中的合法用例,因為 Microsoft 和許多其他第三方應用程式經常使用它們。因此,我們需要監視由我們不希望建立管道的程式建立的任何命名管道。
Sysmon事件ID匯總
ID |
標簽 |
事件 |
1 |
行程建立 |
行程建立 |
2 |
檔建立時間 |
檔建立時間 |
3 |
網路連線 |
檢測到網路連線 |
4 |
無 |
Sysmon 服務狀態變化(無法過濾) |
5 |
行程終止 |
行程終止 |
6 |
驅動程式負載 |
驅動程式已載入 |
7 |
影像載入 |
圖片已載入 |
8 |
建立遠端執行緒 |
檢測到 CreateRemoteThread |
9 |
原始存取讀取 |
檢測到 RawAccessRead |
10 |
行程存取 |
存取的行程 |
11 |
檔建立 |
檔已建立 |
12 |
註冊事件 |
添加或刪除了登錄檔物件 |
十三 |
註冊事件 |
登錄檔值設定 |
14 |
註冊事件 |
登錄檔物件已重新命名 |
15 |
檔建立流哈希 |
檔流已建立 |
16 |
無 |
Sysmon 配置變更(無法過濾) |
17 |
管道事件 |
已建立命名管道 |
18 |
管道事件 |
命名管道已連線 |
19 |
事件 |
WMI 篩選器WMI Filter |
20 |
事件 |
WMI 消費者 |
21 |
事件 |
WMI 消費者過濾器 |
22 |
DNS查詢 |
DNS 查詢 |
23 |
檔刪除 |
檔刪除已歸檔 |
24 |
剪貼簿更改 |
剪貼簿中的新內容 |
25 |
流程篡改 |
處理影像變化 |
26 |
檢測到檔刪除 |
檔刪除已記錄 |
27 |
檔塊可執行檔 |
檔塊可執行檔 |
28 |
檔塊粉碎 |
檔塊粉碎 |
29 |
檢測到可執行檔 |
檢測到可執行檔 |