如何通过ETW实时捕获Microsoft-Windows-Security-Auditing事件?
解决Microsoft-Windows-Security-Auditing ETW捕获为空的问题
核心原因
Microsoft-Windows-Security-Auditing作为安全类提供程序,其事件路由和权限要求与普通ETW提供程序(如RPC)不同:
- 默认不会向普通跟踪会话发送事件,需明确指定要捕获的事件级别和关键字
- 需要同时启用
SeSecurityPrivilege和SeAuditPrivilege权限
具体解决方案
1. 检查并启用必要权限
以SYSTEM身份运行PowerShell,执行以下命令确认权限状态:
whoami /priv
确保SeSecurityPrivilege和SeAuditPrivilege的状态为Enabled。若未启用,可通过以下命令启用:
# 启用SeSecurityPrivilege $priv = [System.Security.Principal.WindowsIdentity]::GetCurrent().Privileges | Where-Object {$_.Privilege -eq "SeSecurityPrivilege"} $priv.Attributes = [System.Security.Principal.PrivilegeAttribute]::Enabled # 启用SeAuditPrivilege $priv = [System.Security.Principal.WindowsIdentity]::GetCurrent().Privileges | Where-Object {$_.Privilege -eq "SeAuditPrivilege"} $priv.Attributes = [System.Security.Principal.PrivilegeAttribute]::Enabled
2. 使用指定参数启动logman跟踪会话
必须明确指定事件级别和关键字,否则不会捕获任何安全审计事件。例如,捕获所有成功和失败的审计事件:
logman start trace evt -p Microsoft-Windows-Security-Auditing -level 0x4 -keywords AuditSuccess,AuditFailure -ets
参数说明:
-level 0x4:对应Informational级别,覆盖安全审计事件的常用级别-keywords AuditSuccess,AuditFailure:指定捕获成功和失败的审计事件,可根据需求调整(如仅保留AuditSuccess)
3. 验证捕获结果
执行注销登录等操作生成安全事件后,停止会话:
logman stop evt -ets
使用Get-WinEvent查看ETL文件:
Get-WinEvent -Path .\evt.etl -Oldest
若仍无结果,可尝试用tracerpt工具解析ETL文件,确认是否有原始数据:
tracerpt .\evt.etl -o text -of evt.txt
查看生成的evt.txt文件,若包含事件数据则说明捕获成功,只是Get-WinEvent解析存在兼容问题;若为空则需重新检查权限和跟踪参数。
4. 备选方案:直接导出安全日志到ETL文件
若仅需获取已生成的安全审计事件而非实时捕获,可使用wevtutil直接导出:
wevtutil qe Security /f:etl /o:file /path:security_events.etl
该方法无需ETW跟踪会话,直接从安全日志导出为ETL格式。
内容的提问来源于stack exchange,提问作者1c3
相关产品推荐
相关产品推荐

