ETW(Event Trace For Windows)


什么是ETW?

ETW,全称 Event Trace For Windows,是微软在Windows中提供的一种高效事件记录机制。简单来讲,可以把它看成一个大型日志系统,能够从程序、内核、驱动收集各种运行信息。

  1. ETW的特性:
  • 轻量化:ETW在运行时对系统性能的影响微乎其微,因此可以安全地用于生产环境。
  • 实时性:你可以实时捕获和分析事件,而不需要重启系统或应用。
  • 灵活性:支持自定义事件,开发者可以根据需要定义自己的事件并收集数据。
  1. ETW的主要用途:
  • 性能分析: ETW可以捕获系统和应用程序的性能指标,从而做到优化程序的运行效率。
  • 故障排除: 借助ETW,可以通过程序的UI Delay时间、StackWalk等信息来捕获崩溃信息。
  • 安全检查: ETW 还能记录一些与安全相关的事件,例如登录尝试、系统资源访问等。
  1. ETW 的核心组件(三部分)
  • Provider(事件提供者):
    Provider 是 ETW 的数据生产者。它负责定义并生成事件数据。Provider 可以是 Windows 系统(如内核、驱动程序等),也可以是开发者自定义的应用程序。在实际使用中,每个 Provider 都有一个唯一的标识符(GUID)和一组定义的事件。
  • Controller(控制器):
    Controller 主要负责控制 ETW 会话的行为。它的职责包括启动或停止会话、定义跟踪参数,如记录的事件类型、日志大小等。
  • Consumer(事件消费者):
    日志数据的消费者,根据情况,接收日志信息的对象。

ETW 能采集的典型进程行为包括:

行为类型对应的 ETW Provider说明
进程创建/退出Microsoft-Windows-Kernel-Process捕获 Process Create(Event ID 1)、Process Terminate(Event ID 2)等
线程创建/退出Microsoft-Windows-Kernel-Thread线程级行为跟踪
映像加载(DLL/EXE)Microsoft-Windows-Kernel-Image记录进程加载了哪些模块(如 DLL 注入)
文件 I/O 操作Microsoft-Windows-Kernel-FileIO进程读写文件的行为
网络活动Microsoft-Windows-Kernel-NetworkMicrosoft-Windows-TCPIPTCP/UDP 连接、收发包等
注册表访问Microsoft-Windows-Kernel-Registry进程对注册表的读写操作
上下文切换 / CPU 调度Microsoft-Windows-Kernel-Processor可用于分析进程 CPU 使用情况
安全相关行为(如令牌变化)Microsoft-Windows-Security-Auditing需配合审核策略启用

上述大部分属于 内核提供者(Kernel Providers),由 Windows 内核直接发出事件,覆盖全系统所有进程。


示例:捕获所有进程的启动与退出

使用 Windows Performance Recorder (WPR) 或命令行工具:

# 使用 logman 启动一个会话,监听进程和映像事件
logman start ProcTrace -p "Microsoft-Windows-Kernel-Process" 0x10 0xff -p "Microsoft-Windows-Kernel-Image" 0x10 0xff -o proc_trace.etl -ets
  • 0x10 是进程创建/退出的关键字(Keyword)
  • 0xff 是日志级别(Level),表示记录所有级别(Verbose)

运行一段时间后停止:

logman stop ProcTrace -ets

然后用 Windows Performance Analyzer (WPA)PerfView 打开 proc_trace.etl,即可看到:

  • 每个新进程的 PID、PPID、命令行(如果启用了命令行捕获)
  • 进程退出时间
  • 加载了哪些 DLL
  • 启动该进程的父进程是谁

注意:默认情况下,Process Create 事件 不包含命令行参数。若需命令行,需启用额外的审计策略或使用 Microsoft-Windows-Sysmon(第三方但广泛使用)。


限制与注意事项

  1. 命令行参数默认不可见
    Windows 内核的 Process Create 事件在较新版本(Win10 1809+)中可通过特定配置记录命令行,但需:

    • 启用 “Audit Process Creation” 安全策略(本地安全策略 → 审核策略)
    • 或使用 Sysmon(System Monitor,微软 Sysinternals 工具)
  2. 权限要求
    捕获内核级 ETW 事件通常需要 管理员权限SYSTEM 权限
  3. 性能影响
    虽然 ETW 开销低,但如果同时启用大量高频率事件(如 FileIO + Registry + Network),仍可能影响系统性能。
  4. 隐私与安全策略
    在企业环境或受限制的 Windows 版本中,某些 ETW 提供者可能被组策略禁用。

替代方案:Sysmon

如果你需要更详细、更易用的进程行为监控(如完整命令行、哈希、父子进程链、远程线程创建等),推荐结合使用 Sysmon

  • Sysmon 本身基于 ETW 和驱动实现
  • 输出结构化日志到 Windows Event Log
  • 支持高度可配置的过滤规则

声明:一代明君的小屋|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - ETW(Event Trace For Windows)


欢迎来到我的小屋