searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

ETW注册表监控机制分析

2024-08-02 09:34:18
48
0

ETW注册表监控内核实现分析

ETW是一个高性能、高灵活性的跟踪设施,内置于Windows操作系统中。它提供了一个标准化的机制来收集和记录系统事件和应用程序事件,这对于调试、性能分析、安全审计以及系统监控非常有用。

ETW 体系结构主要有四个主要组件:提供程序Providers、会话Session、控制器Controller和使用者Consumer


Providers

Providers负责生成事件,用户模式应用或内核驱动程序或window系统内核本身,提供程序必须在 ETW 中注册,通过调用 ETW 日志记录 API 发送事件。

Consumer

 Consumer实时地接收ETW缓冲区中的数据或者是日志文件中订阅事件。Consumer主要的作用是提供Event Trace Callback。我们可以设计一个通用的callback来处理所有的事件,也可以为特定的我们感兴趣的事件设计callback。对于通用事件的callback。实时地接收ETW缓冲区中的数据。

常见的ConsumerWPAPerfMonResource Monitor

Session

Session提供了一个接收、存储、处理和分发事件的执行上下文。负责记录Provider生成的事件,管理和刷新缓存,每个进程的内核缓存是不可以换页的内存池,事件可以实时分发给给消费者应用,事件可以存放指定文件

Controller

controller主要控制Session 的启动与停止,利用StartTrace在内存中创建一个Event Trace session,这样Provider就知道该往哪里发生事件,而Controller也会负责将Session里记录的事件送到Consumer

注册表监控内核分析

Windows的内核程序ntoskrnl.exe初始化的时候会启动和初始化很多信息,启动ETW组件就是其中一项内容,在void __fastcall EtwInitialize(unsigned int Phase)函数中,调用EtwRegister函数去注册一些Etw事件,

通过IDA分析,EtwInitialize调用了EtwRegister函数去注册注册表providerEtwRegister注册的回调函数是EtwpRegTraceEnableCallback,注册返回的句柄EtwpRegTraceHandle,最后内核也是通过EtwWrite写句柄EtwpRegTraceHandle方式输出日志。

RegistryProvGuid 为注册表的providerGUID{70eb4f03–c1de–4f73–a051–33d13d5413bd}

           

EtwpRegTraceEnableCallback回调函数中,通过调用标准注册表监控回调接口CmRegisterCallback 注册回调函数EtwpRegTraceCallback

使用中发现监控返回值无法返回键值的基础信息,key路径和键值value等信息不全。

if ( FilterData && FilterData->Size == 4 )

EtwpRegTraceOptions = *Ptr;

       这两行代码是设置过滤条件,设置EtwpRegTraceOptions的全局值,设置不同的数值会输出不同的数据,默认0,当EtwpRegTraceOptions0时内核只会输出一些基本的key Type值,但不会输出一些很具体的key完整路径,value data等数据。

     

       所以我们自己编写注册表的监控程序的时,一定要启用这个对应注册表追溯项,下图是关键参数位置代码

       

     通过IDA交叉引用可以看出,注册表EtwpRegTraceEnableCallback回调函数内部是通过EtwWrite写句柄EtwpRegTraceHandle来输出日志。

       

     参考:   

            learn.microsoft.com/en-gb/windows-hardware/test/weg/instrumenting-your-code-with-etw

0条评论
作者已关闭评论
troyxyz
1文章数
0粉丝数
troyxyz
1 文章 | 0 粉丝
troyxyz
1文章数
0粉丝数
troyxyz
1 文章 | 0 粉丝
原创

ETW注册表监控机制分析

2024-08-02 09:34:18
48
0

ETW注册表监控内核实现分析

ETW是一个高性能、高灵活性的跟踪设施,内置于Windows操作系统中。它提供了一个标准化的机制来收集和记录系统事件和应用程序事件,这对于调试、性能分析、安全审计以及系统监控非常有用。

ETW 体系结构主要有四个主要组件:提供程序Providers、会话Session、控制器Controller和使用者Consumer


Providers

Providers负责生成事件,用户模式应用或内核驱动程序或window系统内核本身,提供程序必须在 ETW 中注册,通过调用 ETW 日志记录 API 发送事件。

Consumer

 Consumer实时地接收ETW缓冲区中的数据或者是日志文件中订阅事件。Consumer主要的作用是提供Event Trace Callback。我们可以设计一个通用的callback来处理所有的事件,也可以为特定的我们感兴趣的事件设计callback。对于通用事件的callback。实时地接收ETW缓冲区中的数据。

常见的ConsumerWPAPerfMonResource Monitor

Session

Session提供了一个接收、存储、处理和分发事件的执行上下文。负责记录Provider生成的事件,管理和刷新缓存,每个进程的内核缓存是不可以换页的内存池,事件可以实时分发给给消费者应用,事件可以存放指定文件

Controller

controller主要控制Session 的启动与停止,利用StartTrace在内存中创建一个Event Trace session,这样Provider就知道该往哪里发生事件,而Controller也会负责将Session里记录的事件送到Consumer

注册表监控内核分析

Windows的内核程序ntoskrnl.exe初始化的时候会启动和初始化很多信息,启动ETW组件就是其中一项内容,在void __fastcall EtwInitialize(unsigned int Phase)函数中,调用EtwRegister函数去注册一些Etw事件,

通过IDA分析,EtwInitialize调用了EtwRegister函数去注册注册表providerEtwRegister注册的回调函数是EtwpRegTraceEnableCallback,注册返回的句柄EtwpRegTraceHandle,最后内核也是通过EtwWrite写句柄EtwpRegTraceHandle方式输出日志。

RegistryProvGuid 为注册表的providerGUID{70eb4f03–c1de–4f73–a051–33d13d5413bd}

           

EtwpRegTraceEnableCallback回调函数中,通过调用标准注册表监控回调接口CmRegisterCallback 注册回调函数EtwpRegTraceCallback

使用中发现监控返回值无法返回键值的基础信息,key路径和键值value等信息不全。

if ( FilterData && FilterData->Size == 4 )

EtwpRegTraceOptions = *Ptr;

       这两行代码是设置过滤条件,设置EtwpRegTraceOptions的全局值,设置不同的数值会输出不同的数据,默认0,当EtwpRegTraceOptions0时内核只会输出一些基本的key Type值,但不会输出一些很具体的key完整路径,value data等数据。

     

       所以我们自己编写注册表的监控程序的时,一定要启用这个对应注册表追溯项,下图是关键参数位置代码

       

     通过IDA交叉引用可以看出,注册表EtwpRegTraceEnableCallback回调函数内部是通过EtwWrite写句柄EtwpRegTraceHandle来输出日志。

       

     参考:   

            learn.microsoft.com/en-gb/windows-hardware/test/weg/instrumenting-your-code-with-etw

文章来自个人专栏
文章 | 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0