技术社区
安全培训
技术社群
积分商城
先知平台
漏洞库
历史记录
清空历史记录
相关的动态
相关的文章
相关的用户
相关的圈子
相关的话题
注册
登录
ETW机制详解与安全研究
Arcueid
历史精选
326浏览 · 2025-03-25 09:05
返回文档
记录一下ETW这块的学习
简介
ETW(Event Tracing for Windows) 是Windows提供的一个机制 用于跟踪,记录应用程序产生的事件
整个体系主要由提供者(provider), 跟踪会话(Tracing session) 和 消费者(consumer)构成
每个
Provider
都用唯一的GUID标识,并定义其可用事件
通过
logman query providers
可以查看所有的提供者
可以通过命令
logman query providers "Provider Name"
查看所有该provider提供的事件
这里用我们之前在ppid伪造时提到的进程创建监控举例 提供者是
Microsoft-Windows-Kernel-Process
也可以查看指定GUID的事件
在性能监视器的事件跟踪会话中我们可以看见所有正在运行的消费者
或通过命令
logman query -ets
创建一个跟踪会话 并订阅
Microsoft-Windows-Kernel-Process
的
WINEVENT_KEYWORD_PROCESS
这里事件id的含义可以通过
wevtutil
查找
wevtutil gp Microsoft-Windows-Kernel-Process /ge:true
三环API
介绍一下下面可能要用到的 用户模式下API
EventRegister
注册一个ETW提供者
ProviderId
要求提供一个GUID 用于标识事件源 例如
GUID guid = { 0xd99e9dba, 0x1772, 0x407c, {0xa9, 0x60, 0x81, 0xa3, 0xd4, 0x52, 0x2a, 0x98} };;
EnableCallback
回调函数
CallbackContext
参数
RegHandle
返回的句柄
对应的
EventUnregister
接收句柄并取消注册
EventWrite
RegHandle
句柄
EventDescriptor
描述事件的结构
UserDataCount
UserData的结构数量
UserData
EVENT_DATA_DESCRIPTOR
结构的指针 该结构用
EventDataDescCreate
函数初始化
EVENT_DESCRIPTOR
其中比较重要的
Level
描述事件的重要性
Task
用于事件分类
Keyword
用于事件分类 提供者为消费者提供的事件类型
StartTrace
启动事件追踪
TraceId
写回的id
InstanceName
名字 描述性名称
Properties
指向
EVENT_TRACE_PROPERTIES
结构的指针
对应的关闭操作是利用
ControlTrace
完成的 当ControlCode设置为
EVENT_TRACE_CONTROL_STOP
时停止事件追踪
EVENT_TRACE_PROPERTIES
比较重要的成员
Wnode.BufferSize
结构体大小
Wnode.Flags
特性
Wnode.ClientContext
时间戳来源
LogFileMode
日志存储模式 EVENT_TRACE_FILE_MODE_SEQUENTIAL
EnableFlags
要捕获的事件类型
QueryAllTraces
查询所有正在运行的跟踪会话属性
PropertyArray
写回的指针数组
PropertyArrayCount
数组的元素个数
LoggerCount
写回正在运行的追踪会话的总数
MSDN提供的demo输出类似这样
EnableTraceEx2
ProviderId
provider的GUID
ControlCode
禁用或启用
EnableParameters
指向ENABLE_TRACE_PARAMETERS结构的指针 比较重要
ENABLE_TRACE_PARAMETERS
其中最重要的成员
EnableProperty
也就是用logman查询到的properties
一般都是65 0x41 也就是
EVENT_ENABLE_PROPERTY_SID | EVENT_ENABLE_PROPERTY_ENABLE_KEYWORD_0
TdhEnumerateProviders
获取所有提供者信息 包括GUID nameoffset
EnumerateTraceGuidsEx
获取跟踪会话相关信息 TraceQueryInfoClass枚举的值可以在
evntrace.h
中查看详细介绍
不同的枚举对输入要求不同
这里涉及到三个结构
TRACE_GUID_INFO
TRACE_PROVIDER_INSTANCE_INFO
TRACE_ENABLE_INFO
TRACE_GUID_INFO.InstanceCount 表明 TRACE_PROVIDER_INSTANCE_INFO 的数量
TRACE_PROVIDER_INSTANCE_INFO.EnableCount 表明 TRACE_ENABLE_INFO 的数量
如例子中给出的
InstanceCount
= 2 代表块中一共有两个
TRACE_PROVIDER_INSTANCE_INFO
TRACE_PROVIDER_INSTANCE_INFO.EnableCount = 2 接下来有两个
TRACE_ENABLE_INFO
其中比较重要的成员
TRACE_ENABLE_INFO.LoggerId
也就是
TraceId
调用
EnableTraceEx2
等函数需要
TraceId
可以考虑hook上述函数进行ETW的规避
AMSI
将amsi.dll拖入ida
可以在
GenerateEtwEvent
中找到
EventWrite
的调用
id
: 0x44d
Version
: 0x0
Channel
: 0x10
Level
: 0x4 (TRACE_LEVEL_INFORMATION)
Opcode
: 0x0
Task
0x0
Keyword
0x8000000000000001 event1
相关对抗
1.移除Autologger子项
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\WMI\Autologger
下移除指定事件会话的提供者 在下次开机时无法接受到对应事件
当然修改Enable的值也是一样的
重启后生效
2.修改Properties
前文说到的Provider的Properties 一般是0x65
EVENT_ENABLE_PROPERTY_SID | EVENT_ENABLE_PROPERTY_ENABLE_KEYWORD_0
在事件的扩展数据中包含用户的安全标识符 且 记录keyword为0的事件
将
EVENT_ENABLE_PROPERTY_ENABLE_KEYWORD_0
替换成
EVENT_ENABLE_PROPERTY_IGNORE_KEYWORD_0
也就是0x11 将导致不记录keyword为0的事件
重启后生效
3.从事件会话中移除提供者
需要system权限 立即生效
logman update trace EventLog-Application --p Microsoft-Windows-PowerShell -ets
--p取消订阅 -p订阅
通过winApi实现如下
4.Hook EtwEventWrite
底层调用
EtwpEventWriteFull
最终调用到
NtTraceEvent
进0环
hook就不多说了
这里选择hook 未导出的
EtwpEventWriteFull
比较好
5.会话劫持
首先通过
QueryAllTraces
获取当运行的所有会话
接着遍历traceProps获取目标会话 通过
ControlTrace
停止会话 修改
LogFileName
之后事件将会被写入修改后的logfile中
重新启动
内核
NtAllocateVirtualMemory
调用了
MiAllocateVirtualMemory
其中调用了
EtwTiLogAllocExecVm
这类
EtwTi
开头的函数都是用于记录威胁信息的 这里的ti指的是
Threat-Intelligence
这里的
ProtectionMask
不是三环那个掩码 而是通过
MiMakeProtectionMask
生成的
高低位分开 高位为0则查低位 低位为0则查高位 比如
PAGE_READONLY
对应着0x2 也就是查低位 得到
MM_READONLY
对应的也就是0x1
这里
ProtectionMask
&2 != 0 也就是记录的
MM_EXECUTE
对应的三环0x10
接着看
EtwTiLogAllocExecVm
其中调用了
EtwProviderEnabled
和
EtwEventEnabled
当这两个函数均返回TRUE后才会走进
EtwWrite
记录日志
前者验证Provider是否在指定的level和keyword上启用
后者验证是否启用了事件
参考
https://blog.trailofbits.com/2023/11/22/etw-internals-for-security-research-and-forensics/
https://blog.palantir.com/tampering-with-windows-event-tracing-background-offense-and-defense-4be7ac62ac63
https://www.ired.team/miscellaneous-reversing-forensics/windows-kernel-internals/etw-event-tracing-for-windows-101
https://posts.specterops.io/uncovering-windows-events-b4b9db7eac54
https://github.com/maxamin/Offensive-SysAdmin-Security-Utilities/blob/76bb59a47bbea79017c09e367ff9a34d54b65df2/etwkiller.c
https://www.binarly.io/blog/design-issues-of-modern-edrs-bypassing-etw-based-solutions
https://undev.ninja/introduction-to-threat-intelligence-etw/
https://b4rtik.github.io/posts/evading-windefender-atp-credential-theft-kernel-version/
0
人收藏
0
人喜欢
转载
分享
0
条评论
某人
表情
可输入
255
字
评论
没有评论
发布投稿
热门文章
1
cyberstrikelab-shadow靶场首杀
2
从零开始手搓C2框架
3
契约锁电子签章系统 pdfverifier rce 前台漏洞分析(从源码分析)
4
大华智能物联管理平台1day分析
5
契约锁电子签章系统 pdfverifier 远程代码执行漏洞分析(补丁包逆向分析)
近期热点
一周
月份
季度
1
cyberstrikelab-shadow靶场首杀
2
从零开始手搓C2框架
3
契约锁电子签章系统 pdfverifier rce 前台漏洞分析(从源码分析)
4
大华智能物联管理平台1day分析
5
契约锁电子签章系统 pdfverifier 远程代码执行漏洞分析(补丁包逆向分析)
暂无相关信息
暂无相关信息
优秀作者
1
T0daySeeker
贡献值:41700
2
一天
贡献值:29800
3
Yale
贡献值:25000
4
1674701160110592
贡献值:21800
5
1174735059082055
贡献值:16000
6
手术刀
贡献值:14000
7
Loora1N
贡献值:13000
8
bkbqwq
贡献值:12800
9
Ha1ey
贡献值:11000
10
lufei
贡献值:11000
目录
简介
三环API
EventRegister
EventWrite
EVENT_DESCRIPTOR
StartTrace
EVENT_TRACE_PROPERTIES
QueryAllTraces
EnableTraceEx2
ENABLE_TRACE_PARAMETERS
TdhEnumerateProviders
EnumerateTraceGuidsEx
AMSI
相关对抗
1.移除Autologger子项
2.修改Properties
3.从事件会话中移除提供者
4.Hook EtwEventWrite
5.会话劫持
内核
参考
转载
标题
作者:
你好
http://www.a.com/asdsabdas
文章
转载
自
复制到剪贴板
没有评论