如何檢測并清除WMI持久性後門
目前,Windows Management Instrumentation(WMI)事件訂閱已經變成了一種非常流行的在端點上建立持久性後門的技術。于是,我決定鼓搗一下Empire的WMI子產品,并分析相關的代碼,看看能不能清除這些持久化後門。此外,文中還介紹了用于檢視和删除WMI事件訂閱的一些PowerShell指令。
關于“Windows Management Instrumentation事件訂閱”的介紹,可以參考MITRE ATT&CK網站上的相關文章。
攻擊者可以使用WMI的功能來訂閱事件,并在事件發生時執行任意代碼,進而在系統上留下持久性後門。
WMI是啥?
“WMI是微軟為基于Web的企業管理(WBEM)規範提供的一個實作版本,而WBEM則是一項行業計劃,旨在開發用于通路企業環境中管理資訊的标準技術。WMI使用公共資訊模型(CIM)行業标準來表示系統、應用程式、網絡、裝置和其他托管元件。”
實際上,所謂事件過濾器隻不過就是一個WMI類,用于描述WMI向事件使用者傳遞的事件。于此同時,事件過濾器還給出了WMI傳遞事件的條件。
配置Sysmon日志記錄
我們可以将Sysmon配置為記錄
WmiEventFilter、WmiEventConsumer
和
WmiEventConsumerToFilter
等活動,并啟用WMI濫用檢測。
如何檢測并清除WMI持久性後門 WMI活動的Sysmon事件ID
Roberto Rodriguez(@Cyb3rWard0g)的Sysmon配置檔案可以捕獲上述事件ID。
為此,可以執行以下指令來安裝Sysmon,并啟用相關的配置檔案。
sysmon.exe -i -c .\config_file.xml 複制
建立持久性後門
下面,讓我們使用Empire提供的Invoke-WMI子產品來建立一個永久的WMI訂閱,使其能夠常駐受害者端點。
如何檢測并清除WMI持久性後門 檢視Empire的WMI相關子產品
如何檢測并清除WMI持久性後門 檢視Empire的Invoke-WMI子產品的選項
如何檢測并清除WMI持久性後門 運作子產品
檢測方法
檢視Sysmon日志,我們就可以看到Empire子產品:
注冊了一個WMI事件過濾器 注冊了一個WMI事件使用者 将事件使用者綁定到事件過濾器 如何檢測并清除WMI持久性後門 執行Empire的Invoke-WMI子產品後,記錄Sysmon事件
WMI事件過濾器為該stager設定了相應的執行條件,其中包括對系統正常運作時間的引用。
如何檢測并清除WMI持久性後門 Sysmon事件ID 19:WmiEvent(檢測到了WmiEventFilter的活動)
WMI事件使用者包含了一個Base64編碼形式的Empire stager,并且在注冊時使用了一個不容易引起人們懷疑的名稱,即Updater。
如何檢測并清除WMI持久性後門 Sysmon事件ID 20:WmiEvent(檢測到了WmiEventConsumer的活動)
WMI事件使用者
CommandLineEventConsumer.Name=\"Updater\"
被綁定到了事件過濾器
__EventFilter.Name=\"Updater\"
上面。
如何檢測并清除WMI持久性後門 Sysmon事件ID 21:WmiEvent(檢測到了WmiEventConsumerToFilter的活動)
現在,事件使用者被綁定到了事件過濾器上面,是以,當事件過濾條件為真時,就會觸發相應的事件使用者(即stager)。
如何清除後門
從WMI資料庫中删除條目的最簡單方法,就是使用Autoruns。為此,我們不妨以管理者身份啟動Autoruns,并選擇WMI頁籤,這樣就可以查找與WMI相關的持久性後門了。
如何檢測并清除WMI持久性後門 使用Autoruns檢視WMI資料庫的内容
為了删除相關條目,隻需右鍵單擊惡意WMI資料庫條目,然後選擇“Delete”即可。
此外,我們也可以從指令行中删除相應的WMI事件訂閱。
在PowerShell中,我們可以使用Get-WMIObject指令來檢視事件篩選器綁定的WMI事件過濾器、事件使用者和使用者過濾器。這裡,我們要特别感謝Boe Prox(@proxb)在他的部落格上對這些指令給出了詳細的解釋。
# Reviewing WMI Subscriptions using Get-WMIObject# Event FilterGet-WMIObject -Namespace root\Subscription -Class __EventFilter -Filter “Name=’Updater’”# Event ConsumerGet-WMIObject -Namespace root\Subscription -Class CommandLineEventConsumer -Filter “Name=’Updater’”# BindingGet-WMIObject -Namespace root\Subscription -Class __FilterToConsumerBinding -Filter “__Path LIKE ‘%Updater%’” 複制
下面,我們使用Remove-WMIObject指令來删除WMI持久性後門的所有元件。
# Removing WMI Subscriptions using Remove-WMIObject# Event FilterGet-WMIObject -Namespace root\Subscription -Class __EventFilter -Filter “Name=’Updater’” | Remove-WmiObject -Verbose# Event ConsumerGet-WMIObject -Namespace root\Subscription -Class CommandLineEventConsumer -Filter “Name=’Updater’” | Remove-WmiObject -Verbose# BindingGet-WMIObject -Namespace root\Subscription -Class __FilterToConsumerBinding -Filter “__Path LIKE ‘%Updater%’” | Remove-WmiObject -Verbose 複制
如何檢測并清除WMI持久性後門 删除WMI事件訂閱
再次運作Autoruns指令,以驗證是否已删除相應的持久性後門。
如何檢測并清除WMI持久性後門 添加收藏