Windows 事件
etw模型网上有就不说了,这里主要是几个概念的区分
ETW的攻与防
事件跟踪
适用于检测应用程序、将用户或内核事件记录到日志文件,以及使用日志文件中的事件或实时事件
事件日志记录(Event Logging)
历史
事件日志记录为 (的应用程序和操作系统) 记录重要软件和硬件事件提供了一种标准的集中式方法,并将其存储在名为 事件日志的单个集合中。 事件查看器使你能够查看日志;编程接口还可用于检查日志。
(ETW) Event Tracing for Windows 入门
关于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}
项的值
MSDN示例demo:
解决改善方法:
其路径指定的来源于上述的注册表,尚未试过伪造此处是否能够读取通道值
为何不支持通道的原因
关于修改注册表使得其支持通道的想法
API查询中的小疑惑
在OpenEventLog中事件类型由EVENTLOGRECORD结构中EventCategory标识,且仅有ID
而在EvtQuery中事件类型更名为Task字段标识,也仅有ID
事件类型字符串可以使用上述的ID 通过 FormatMessage 从提供者的二进制文件资源中解出,具体示例在OpenEventLog 函数示例中存在相应代码
字段
EventCategory
使用wmi查询则可以直接看到该字符串
各种查询事件日志的方法汇总
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