ETW机制详解与安全研究
字数 2408 2025-08-29 08:29:59
ETW机制详解与安全研究
1. ETW概述
ETW (Event Tracing for Windows) 是Windows提供的一个高效机制,用于跟踪和记录应用程序产生的事件。整个ETW体系由三个核心组件构成:
- 提供者(Provider): 产生事件的组件,每个Provider都有唯一的GUID标识
- 跟踪会话(Tracing Session): 收集和记录事件的会话
- 消费者(Consumer): 接收和处理事件的组件
2. ETW基础操作
2.1 查询Provider信息
logman query providers # 查看所有提供者
logman query providers "Provider Name" # 查看特定Provider的事件
例如,进程创建监控的Provider是Microsoft-Windows-Kernel-Process
2.2 查询事件ID含义
wevtutil gp Microsoft-Windows-Kernel-Process /ge:true
2.3 查看运行中的消费者
logman query -ets # 查看所有正在运行的跟踪会话
3. 用户模式API
3.1 基本API
-
EventRegister: 注册ETW提供者
- 参数: ProviderId(GUID), EnableCallback(回调函数), CallbackContext, RegHandle(返回句柄)
- 示例GUID:
GUID guid = { 0xd99e9dba, 0x1772, 0x407c, {0xa9, 0x60, 0x81, 0xa3, 0xd4, 0x52, 0x2a, 0x98} };
-
EventUnregister: 取消注册ETW提供者
- 参数: RegHandle(句柄)
-
EventWrite: 写入事件
- 参数: RegHandle(句柄), EventDescriptor(事件描述结构), UserDataCount(用户数据结构数量), UserData(用户数据指针)
3.2 事件描述结构
EVENT_DESCRIPTOR重要成员:
- Level: 事件重要性级别
- Task: 事件分类
- Keyword: 事件分类
3.3 跟踪会话管理
-
StartTrace: 启动事件追踪
- 参数: TraceId(写回ID), InstanceName(名称), Properties(指向EVENT_TRACE_PROPERTIES结构)
EVENT_TRACE_PROPERTIES重要成员:- Wnode.BufferSize: 结构体大小
- Wnode.Flags: 特性
- Wnode.ClientContext: 时间戳来源
- LogFileMode: 日志存储模式
- EnableFlags: 要捕获的事件类型
-
ControlTrace: 控制跟踪会话
- 当ControlCode设置为
EVENT_TRACE_CONTROL_STOP时停止追踪
- 当ControlCode设置为
-
QueryAllTraces: 查询所有运行中的跟踪会话属性
3.4 高级API
-
EnableTraceEx2: 启用/禁用跟踪
- 参数: ProviderId(GUID), ControlCode(禁用/启用), EnableParameters(指向ENABLE_TRACE_PARAMETERS结构)
ENABLE_TRACE_PARAMETERS重要成员:- EnableProperty: 通常为0x41 (
EVENT_ENABLE_PROPERTY_SID | EVENT_ENABLE_PROPERTY_ENABLE_KEYWORD_0)
-
TdhEnumerateProviders: 获取所有提供者信息(GUID, nameoffset等)
-
EnumerateTraceGuidsEx: 获取跟踪会话相关信息
4. ETW安全研究
4.1 ETW对抗技术
-
移除Autologger注册表项
- 路径:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\WMI\Autologger - 移除指定事件会话的提供者或修改Enable值
- 效果: 重启后生效
- 路径:
-
修改Provider Properties
- 将
EVENT_ENABLE_PROPERTY_ENABLE_KEYWORD_0(0x40)替换为EVENT_ENABLE_PROPERTY_IGNORE_KEYWORD_0(0x10) - 结果: 不记录keyword为0的事件
- 效果: 重启后生效
- 将
-
从事件会话中移除提供者
- 需要SYSTEM权限
- 立即生效
- 命令行示例:
logman update trace EventLog-Application --p Microsoft-Windows-PowerShell -ets --p取消订阅 -p订阅
-
Hook ETW相关函数
- 可Hook函数:
EtwEventWrite,EtwpEventWriteFull(未导出),NtTraceEvent - 推荐Hook
EtwpEventWriteFull
- 可Hook函数:
-
会话劫持
- 步骤:
- 通过
QueryAllTraces获取运行中的会话 - 遍历traceProps获取目标会话
- 通过
ControlTrace停止会话 - 修改LogFileName
- 重新启动会话
- 通过
- 步骤:
4.2 内核ETW机制
-
威胁情报记录
- 函数前缀:
EtwTi(Threat-Intelligence) - 示例:
EtwTiLogAllocExecVm记录内存分配执行事件
- 函数前缀:
-
保护掩码转换
MiMakeProtectionMask将三环保护标志转换为内核标志- 例如:
PAGE_READONLY(0x2) →MM_READONLY(0x1)
-
ETW启用检查
EtwProviderEnabled: 检查Provider是否在指定level和keyword上启用EtwEventEnabled: 检查是否启用了事件- 两者都返回TRUE才会记录日志