ETW windows事件跟踪知识学习的愚见

Windows 事件

etw模型网上有就不说了,这里主要是几个概念的区分
ETW的攻与防

Vista之前
Vista之前
Vista 引入的新事件模型,统一ETW和Event Logging的API
WIn10基于ETW 的TraceLogging 引入的简化的检测代码的方法
Windows事件
事件日志记录 Event Logging
Windows 事件跟踪 ETW
Windows事件日志 windows-event-log
TraceLogging

事件跟踪

适用于检测应用程序、将用户或内核事件记录到日志文件,以及使用日志文件中的事件或实时事件

为应用程序程序员提供
为应用程序程序员提供
检测应用程序以提供
检测应用程序以提供
描述应用程序或操作的当前状态的
描述应用程序或操作的当前状态的
调试应用程序
调试应用程序
ETW概述
启动事件跟踪会话的能力
停止事件跟踪会话的能力
提供跟踪事件的能力
使用跟踪事件的能力
ETW内容包含
事件标头
提供程序定义的数据
ETW能力
执行容量分析
执行容量分析

事件日志记录(Event Logging)

历史

事件日志记录为 (的应用程序和操作系统) 记录重要软件和硬件事件提供了一种标准的集中式方法,并将其存储在名为 事件日志的单个集合中。 事件查看器使你能够查看日志;编程接口还可用于检查日志。

读取EventLog的日志

ETW的各种有意思的实用

(ETW) Event Tracing for Windows 入门

针对 Windows 事件跟踪日志篡改的攻防研究

net中使用ETW事件

关于API查询EventLog 查询之 OpenEventLogW

优缺点:

使用OpenEventLogW 能够最大化兼容各个系统,但是不支持通道值。即下图中带文件夹的路径
使用极其简单

LPWSTR pwsLogName = L"Security";
HANDLE hEventLog = OpenEventLog(nullptr, pwsLogName);

支持的路径为:

即注册表

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog

通道的注册表位置

计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Channels\Microsoft-Windows-PowerShell/Admin

通道查找发布者二进制文件来源

计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Publishers\{a0c1853b-5c40-4b15-8766-3cf1c58f985a}

项的值

ETW windows事件跟踪知识学习的愚见_第1张图片
MSDN示例demo:

查询事件信息

解决改善方法:

其路径指定的来源于上述的注册表,尚未试过伪造此处是否能够读取通道值
为何不支持通道的原因
关于修改注册表使得其支持通道的想法

API查询中的小疑惑

在OpenEventLog中事件类型由EVENTLOGRECORD结构中EventCategory标识,且仅有ID

而在EvtQuery中事件类型更名为Task字段标识,也仅有ID

事件类型字符串可以使用上述的ID 通过 FormatMessage 从提供者的二进制文件资源中解出,具体示例在OpenEventLog 函数示例中存在相应代码

字段
EventCategory

ETW windows事件跟踪知识学习的愚见_第2张图片

使用wmi查询则可以直接看到该字符串
ETW windows事件跟踪知识学习的愚见_第3张图片

各种查询事件日志的方法汇总

API①:OpenEventLog
缺点:不支持通道,只能拿上述注册表的
优点:使用简单,兼容好

HANDLE OpenEventLogW(
 [in] LPCSTR lpUNCServerName,
 [in] LPCSTR lpSourceName
);

API②:EvtQuery
缺点:只有Visita只有才可使用
优点:支持通道,船新的架构。嘎嘎棒

EVT_HANDLE EvtQuery(
 [in] EVT_HANDLE Session,
 [in] LPCWSTR    Path,
 [in] LPCWSTR    Query,
 [in] DWORD      Flags
);

③ wbemtest执行wmi查询,和OpenEventLog 类似,似乎不支持通道

select * from Win32_NTLogEvent where  EventCode = 104

或者PowerShell

Get-WmiObject -Query "select * from Win32_NTLogEvent where  EventCode = 104"

PowerShell可使用FilterHashtable如:

 Get-WinEvent -FilterHashtable @{
 LogName='Microsoft-Windows-PowerShell/Operational'
 }

④wevtutil工具获取

wevtutil query-events Microsoft-Windows-TerminalServices-LocalSessionManager/Operational

你可能感兴趣的:(windows,学习)