一、ETW模型 事件监测(Event Instrumentation)总会包含两个基本的实体,事件的提供者(ETW Provider)和消费者(ETW Consumer),ETW框架可以视为它们的中介。 ETW Provider会预先注册到ETW框架上,提供者程序在某个时刻触发事件,并将标准化定义的事件提供给ETW框架。 ETW会话的开启和终止是通过 Session的开启和终止是通过ETW控制器(ETW Controller)进行管理的。 除了管理ETW Session之外,ETW Controller还可以禁用(Disable)或者恢复(Enable)注册到某个ETW Session上的ETW Provider。 ? 综上所述,整个ETW模型由ETW框架本身和ETW Provider、ETW Consumer以及ETW Controller组成,上图很好地展示了这四者之间的关系。
领8888元新春采购礼包,抢爆款2核2G云服务器95元/年起,个人开发者加享折上折
幸运的是,Windows 事件跟踪 (ETW) 可以缓解这些问题。 ETW 收集系统范围的数据并分析所有资源(CPU、磁盘、网络和内存),使其对获取整体视图很有用。此外,可对 ETW 生态系统进行调整以减少其开销,使该系统适用于生产诊断。 本文旨在使您了解使用 ETW 分析托管应用程序的好处。我不会介绍所有内容 - 有几个可用于诊断的 OS 事件和 CLR ETW 事件在本文中不会提到。 Method ETW Events 捕获有关用于符号解析的 CLR 方法的信息。 GC ETW Events 捕获有关 GC 的信息。 PerfMonitor 合并命令会将 ETW 文件转换为 XPerf 的可读格式。 总结 使用 ETW 进行性能调查不仅简单而且很有效。
该工具基于纯Python 3 ETL Windows日志文件解析库实现其功能,而ETL则是ETW以及内核日志工具的默认格式。 很多新型的API都基于ETW实现,比如说Tracelogging或WPP等,而这些API都是微软开发者会经常使用的。 etl-parser可以通过引入下列日志格式解析器来帮助广大研究人员解决各种问题: ETW manifest base provider TraceLogging MOF for kernel log event: Trace): """unknown""" def on_event_record(self, event: Event): """ETW 项目地址 https://github.com/airbus-cert/etl-parser 参考资料 https://docs.microsoft.com/en-us/windows/win32/etw
MC.EXE 我们对mc.exe(Message Compiler)的C / C ++ ETW代码生成做了一些重要的更改: 不推荐使用“-mof”参数。 此参数指示MC.exe生成与Windows XP及更早版本兼容的ETW代码。在将来的mc.exe版本中将删除对“-mof”参数的支持。 header将使用ETW_KM宏自动确定是为内核模式还是用户模式编译,并为每种模式调用相应的ETW API。
wpr.exe — 记录ETW产生的数据,命令行模式。 WPRUI.exe — 记录ETW产生的数据,图形化界面,更友好。 ETW是从Windows 2000开始就引入的一种高速的事件记录机制,自那时以后,各种Windows操作系统核心和服务组件都通过ETW记录其活动,它现在是Windows平台上的关键系统仪表技术之一。 在Windows 7中,ETW得到了进一步的增强。 正是基于ETW的优秀性能和强大功能,越来越多的第三方应用程序开始放弃自己的日志系统,逐渐开始使用ETW来追踪和记录其状态和活动,从而进行性能调优或是进行应用程序的日常维护。 Session:它存在于内核中,用于表示一个ETW事件记录会话。
到内存中,如果攻击者重新启动调度程序服务以将修改后的任务加载到内存中,则安全事件日志或“Microsoft-Windows-TaskScheduler/Operational”日志中不会生成任何事件 ETW 篡改 ETW篡改是一种攻击者滥用ETW架构中的缺陷以防止特定进程或整个系统生成ETW遥测的技术,这通过MDSec的研究隐藏您的 .NET - ETW和Palantir的篡改Windows事件跟踪而得到普及 服务生成的,但事件信息是由Scheduler服务使用ETW发送的,这意味着如果攻击者能够篡改调度程序服务上的 ETW,则不会生成日志 CCob最近对无补丁AMSI绕过的研究表明,可以结合硬件断点和向量异常处理程序 我们不会详细介绍该技术的工作原理,因为上面的博客文章在解释所需概念方面做得很好 从博客作者发布的初始PoC开始,将其适应ETW篡改非常容易,唯一的主要修改是提供的PoC中的VEH和断点仅应用于当前线程, 在ETW篡改方面,这些建议并非针对调度程序滥用,而应主要集中在: 检测针对系统进程的内存注入-为了部署ETW补丁,攻击者可能会将代码注入目标进程,检测进程注入是一个超出本研究范围的主题,因此我们不会在这方面花费太多时间
文件内容显示如下,都是以1601/01/01 08:00:00.0000000开头的条目,没有正确解析日志内容 图片.png 打包C:\Windows\logs\WindowsUpdate\目录下的ETW 将ETW日志文件放到某个路径下面,我这里是C:\txt\WindowsUpdate\,然后运行命令:Get-WindowsUpdateLog -ETLPath C:\txt\WindowsUpdate\ 图片.png 注意: 这里能正常解析ETW日志,是因为系统默认会调用我本地%temp%\WindowsUpdateLog\SymCache下的WindowsUpdate符号文件,如果我这里没有相应的符号文件 start wuauserv wuauclt.exe /resetauthorization /detectnow wuauclt.exe /r /reportnow 这里牵扯到2个知识点: 第1:ETW
Microsoft最近发布了SvcPerf,它是一个端到端的基于Windows事件追踪(ETW)的追踪查看器,可用于基于清单的追踪。 这个端到端的追踪分析工具基于Linq over Traces(TX),可以用于WCF、WF以及其他基于活动的ETW跟踪。你能够通过这个工具查看ETL文件或者实时跟踪会话,还能创建自定义的查询。 “.NET Framework能够提供更好的ETW支持真的非常好。事件源是一个不错的开始,但是因为缺乏通道支持事件查看器不能获得好的可见性,” Colin Bowern说。 查看英文原文:SvcPerf - Trace Analysis Tool for WCF Released Sample ETW trace for WCF 针对 Windows 的 WCF 服务和事件跟踪
禁用 Windows 事件跟踪 (ETW) 许多 EDR 解决方案广泛利用 Windows 事件跟踪 (ETW),特别是 Microsoft Defender for Endpoint(以前称为 Microsoft ETW 允许对进程的功能和 WINAPI 调用进行广泛的检测和跟踪。 ETW 在内核中有组件,主要是为系统调用和其他内核操作注册回调,但也包含一个用户态组件,它是ntdll.dll(ETW 深度潜水和攻击向量)的一部分。 用户空间中的ETW有很多不同的绕过方式,但最常见的是修补函数 EtwEventWrite调用它来写入/记录 ETW 事件。 和 AMSI(不是真正必要的,因为我们已经禁用 ETW 并且没有将加载程序注入另一个进程)。
PerfView能够收集Windows事件跟踪(ETW)数据来追踪程序的调用流向,这些程序通过调用哪个函数识别频率。 收集配置数据 PerfView利用Windows事件追踪,而ETW从Windows 2000 Server以来就一直内置于操作系统中。 只是最近才有XPerf和PerfView一类的工具利用ETW数据来解决性能问题。事件数据被收集到一个事件跟踪日志(ETL)中。根据你想要跟踪事件的数量和时间的长度,ETL文件可能会非常大。 PerfView是一个便于用户的工具,可以用来收集和分析ETW数据用于解决配置程序性能数据的问题。这个工具可以快速地显示为这个程序执行的操作系统函数,了解性能问题可能潜藏的位置。
在Windows系统上,这通常使用ETW并监视当前进程的ETW事件来完成。虽然这种方法仍然有效,但使用ETW并不总是容易或可能。 无论您是在低权限环境中运行还是在Linux或macOS上运行,都可能无法使用ETW。 从.NET Core 2.2开始,现在可以使用EventListener类来使用CoreCLR事件。 它们是在Windows上作为CoreCLR ETW提供程序的一部分公开的相同事件。这允许应用程序使用这些事件或使用传输机制将它们发送到遥测聚合服务。
在 Windows 系统上,这通常使用 ETW 和监视当前进程的 ETW 事件来完成。虽然这可以继续很好地工作,但使用 ETW 并不总是方便的,也不总是可用的。 比如您是在低全新环境中运行, 或者是在 Linux 或 MacOS上运行,都可能无法使用 ETW。 从.NET Core 2.2开始,现在可以用EventListener来使用CoreCLR 事件。 它们作为 Windows 上 CoreCLR ETW提供程序的一部分公开的事件。这允许应用程序使用这些事件或使用传输机制将它们发送到遥测聚合服务。
Performance Recorder(WPR)和Windows Performance Analyzer(WPA); (2) WPR用来追踪CPU使用率、磁盘I/O、文件、网络、GPU活动、电源使用情况等,借助ETW wpr.exe —记录ETW产生的数据,命令行模式。 WPRUI.exe —记录ETW产生的数据,图形化界面,更友好。 XPerf的功能类似于wpr+wpaexporter,可以记录ETW产生的数据,也可以导出结果到文本。 3.1 WPR工作原理——ETW技术框架 CONTROLLERS:启动和停止Events发送,以及log路径和大小设置,以及Provider的选择允许;WPR就是一个Controllers,它会使用StartTrace (2) 工具兼容性问题 如果你正在使用ProcessMonitor或ProcessExplorer,需要先关闭它们再启动WPR,否则会报错,因为这两个工具也会通过ETW收集信息。
在Sysmon的情况下,我们从其他很棒的帖子中了解到,ETW大量用于网络连接监控等事情。因此,DNS监控将以类似的方式执行是有道理的。 如果我们使用以下命令,我们首先得到ETW是源的指示: logman -ets 在安装Sysmon之后突出的“数据收集器集”是一个奇怪的名字My Event Trace Session。 Windows如何从DNS激发事件 让我们进行一次常见的DNS API调用,DnsQuery_A并尝试找出ETW数据可能出现的位置。显而易见的起点是内部dnsapi.dll,它承载API调用。 将其与PDB一起加载到Ghidra中,我们可以开始查看可能突出显示正在使用的ETW的功能。由于我们知道GUID与DNS事件相关联,因此在尝试查找起点时,我们将使用此作为数据点。
该工具主要使用了下列两种技术: Execute-Assembly:重新封装一个.NET可执行文件并运行,可以选择需要使用的绕过技术,例如API解钩子、AMSI修复或金庸ETW等。 功能介绍 1、使用静态系统调用实现EDR绕过; 2、使用ShellyCoat刷新NTDLL.dll来解除生成线程中的用户模式API钩子; 3、Windows事件跟踪(ETW)绕过; 4、反恶意软件扫描接口 Anti-Malware Scan Interface (AMSI) -ne, --nodisableetw Do NOT disable Event Tracing for Windows (ETW version show program's version number and exit 工具使用样例 # 封装SharpKatz 在运行时接收参数,绕过NTDLL钩子、AMSI和ETW
▲ 启动 ETW(事件跟踪器) ? ▲ 启动性能分析器 ? 在 用 dotTrace 进行性能分析时,各种不同性能分析选项的含义和用途 一文中,我们可以得知,只有 Timeline 用到了 ETW,而这个是一个系统功能。也许是系统功能无法访问呢? working: issue solution for different Windows versions – .NET Tools Support - JetBrains Can’t start ETW
扫码关注腾讯云开发者
领取腾讯云代金券