ETW内部机制与安全研究取证
ETW概述
Windows事件追踪(ETW)已成为Windows 10/11端点检测响应(EDR)解决方案的核心组件。其价值在于通过安全ETW通道为安全工具提供智能数据,这也使其成为攻击者试图绕过检测的主要目标。
ETW主要由两个组件构成:
- 提供者(Providers):向ETW GUID发送事件,事件会被写入文件、内存缓冲区或两者
- 消费者(Consumers):从单个或多个提供者接收事件的追踪日志会话
通过logman query providers
命令可查看系统注册的提供者(通常有上千个),每个ETW提供者在清单文件中定义自己的事件类型。
寻找ETW消费者进程
通过性能监视器可查看所有运行的ETW消费者会话,但获取接收事件的进程列表更为复杂。我们采用WinDbg内核调试会话来深入分析:
- 使用JavaScript脚本扫描所有进程的句柄表,查找
EtwConsumer
对象 - 获取关联的
ETW_REALTIME_CONSUMER
结构并提取LoggerId
- 通过
WMI_LOGGER_CONTEXT
结构数组匹配日志会话名称
|
|
更高效的方法是通过EtwSiloState->EtwpLoggerContext
直接枚举日志会话及其消费者。
查找提供者GUID
通过分析ETW_SILODRIVERSTATE
结构的EtwpGuidHashTable
字段,我们可以:
- 遍历64个哈希桶中的GUID条目
- 检查每个
ETW_GUID_ENTRY
的EnableInfo
数组 - 匹配目标
LoggerId
并提取关联进程信息
|
|
实际应用价值
这些技术可帮助:
- 识别EDR软件使用的ETW日志会话
- 发现被禁用的日志会话(安全产品可能因此"失明")
- 从攻击者角度评估哪些ETW提供者可能带来检测风险
所有JavaScript函数可在GitHub仓库获取。
ETW是极其强大的机制,深入了解其内部工作原理对攻击者和防御者都大有裨益。本文仅触及表面,该领域还有更多值得探索的空间。