使用 Sysmon 和 Azure 安全中心檢測內存中的攻擊

撰 / Tim Burrell, Principal Security Engineering Manager, Microsoft Threat Intelligence Center

據報導,內存中的攻擊正在增加並引起越來越多的關注,例如,在這些帖子中,SentinelOne 報導包含:內存中的攻擊越來越強大,留下的蹤跡很少在尋找內存中的攻擊 ,以及尋找內存中的 .NET 攻擊。

這些攻擊涉及攻擊者完全在內存中執行惡意活動,而不是將文件寫入磁盤 - 正如許多惡意軟件感染中發現的更傳統的木馬或植入物所常見的那樣。 CSO 的文章標題為“黑客如何入侵系統而不安裝軟件”提供了一個很好的概述。

檢測可能是十分具有挑戰性的,因為內存中的攻擊通常在很多標準操作系統事件日誌中幾乎沒有佔用空間。雖然許多防病毒解決方案都支持某種級別的內存保護,但它們通常是在檢測磁盤上惡意文件中的威脅方面效率最高 - 而內存方案中也沒有這種方法。

在本文中,我們將介紹兩種內存中的攻擊技術,並展示如何使用 Sysmon 和 Azure 安全中心檢測這些攻擊技術。

攻擊

在此案中攻擊策略如下:

the-attack

這個攻擊鏈的前兩個階段涉及內存技術:

初始妥協 - 流程注入

office

受害者被誘騙點入通過電子郵件發送的 Microsoft Office Word 文檔中的 macro。

#Hancitor就是這樣的一個威脅 - 它使用一個 macro 來注入 verclsid.exe。 惡意代碼直接複製到verclsid.exe 進程空間中,因此永遠不會觸及該磁盤。 由於 verclsid.exe 是一個值得信賴的 Windows 進程,因此它的活動不太可能被入侵檢測產品阻止。

消除未來的檢測 - 過程干擾

Phantom

在受害者機器上立足後,攻擊者會迅速採取措施限制未來發現的可能性。

Invoke-Phant0m 使用進程間 Windows API 調用來查找和終止與 Windows 事件日誌服務相關聯的線程。 該服務仍將顯示為正在運行 - 但它不再將事件寫入事件日誌。

攻擊者現在可以自由地執行其他操作,因為大部分活動都不會被記錄下來。

 

使用 Sysmon 和 Azure 安全中心檢測內存中的攻擊

通過收集和分析安全中心的Sysmon事件,您可以檢測到上述攻擊。 要啟用這些檢測,您必須:

  1. 在雲和本地計算機上安裝Sysmon
  2. 在您的Log Analytics工作區中收集Sysmon事件數據
  3. 在安全中心定義自定義警報來檢測可疑的Sysmon事件

Sysmon 的安裝和配置

所討論的攻擊技術都涉及訪問另一個進程內存的進程。這種基本操作一直作為正常操作系統操作的一部分發生,但這裡涉及的訪問類型與正在修改其內存的目標進程(verclsid.exe和svchost.exe的)。

Sysmon可以以高度可配置的方式記錄此類進程訪問。它可以從文檔下載和安裝。 Sysmon配置是關鍵因素,因為它決定了日誌記錄的級別和數量。

所需的精確配置將與客戶高度相關 - 實際上,Sysmon的一部分基本原理是為客戶提供靈活性,以便選擇超出OS默認值的非常精細的日誌記錄級別。有在線資源和建議的默認Sysmon配置 - @SwiftOnSecurity在GitHub上發布了一個很好的示例。

以下配置僅記錄對特定進程的特權級別的內存訪問權限。這通常是非常低的量,只有在發生攻擊者活動時才記錄Sysmon事件:

exampleSysmonConfig.xml:
<Sysmon schemaversion="3.30">
<EventFiltering>
  <!-- Restrict logging to access targeting svchost.exe and verclsid.exe -->
  <ProcessAccess onmatch="exclude">
     <TargetImage condition="excludes">verclsid.exe</TargetImage>
     <TargetImage condition="excludes">svchost.exe</TargetImage>
  </ProcessAccess>
  <!-- Process access requests with suspect privileged access,
     or call trace indicative of unknown modules -->
      <ProcessAccess onmatch="include">
           <GrantedAccess condition="is">0x1F0FFF</GrantedAccess>
           <GrantedAccess condition="is">0x1F1FFF</GrantedAccess>
           <GrantedAccess condition="is">0x1F2FFF</GrantedAccess>
           <GrantedAccess condition="is">0x1F3FFF</GrantedAccess>
...
     <GrantedAccess condition="is">0x1FFFFF</GrantedAccess>
     <CallTrace condition="contains">unknown</CallTrace>
  </ProcessAccess>
</EventFiltering>
</Sysmon>

然後通過以下方式安裝:

sysmon.exe -i exampleSysmonConfig.xml

Or: sysmon64.exe -i exampleSysmonConfig.xml (for the 64-bit version)

當執行上述攻擊時,Sysmon 會記錄類型 10'ProcessAccess' 事件,如:

收集 Sysmon 事件數據

 

Microsoft Monitoring Agent 現在將為連接到此工作區的所有機器收集 Sysmon 事件。 它只是基於這些數據提供一些警報。

Azure 安全中心收集一組特定的事件以監視威脅。 可以從 Azure 門戶配置其他數據源(如Sysmon事件)的集合:打開Log Analytics工作區,然後選擇“高級設置”。

日誌分析中的數據來源提供了有關如何導入用於分析的多種類型數據的詳細信息。 對於Windows事件數據,只需指定事件日誌的路徑,如下所示。 對於Sysmon事件收集,您只需添加:

Microsoft-Windows-Sysmon/Operational:

 

在 Azure 安全中心中定義自定義警報

Create custom alert rule

 

在上面的示例Sysmon配置中,記錄的唯一事件很可能是惡意的。 因此,我們可以提醒收集的任何ProcessAccess事件。

在Azure門戶中打開安全中心,選擇Customer Alerts和New Custom Alert Rule,指定警報詳細信息,並對任何10型Sysmon事件使用以下查詢:

搜索“Microsoft-Windows-Sysmon / Operational”| EventID == 10

在 Security Center 查看警報

現在檢測到來自第一部分的攻擊,並在 Azure 安全中心中產生警報以及其他內置警報:

 

alerts-security-center

suspect-process

 

細化 - 更細化的警報查詢

您可能希望根據 Sysmon 事件中的特定條件來創建警報,而不是警告所有收集的事件。 這點可以透過創建自定義字段,然後根據這些字段的查詢定義警報規則來實現。

結論

在本文中,我們介紹瞭如何使用 Sysmon 來檢測多個內存中的攻擊,說明如何基於這些數據提供警報,並在 Azure安全中心顯示 - 無論是對於 Azure 虛擬機還是內部部署的機器。

敬祝大家 Hunting 愉快!