Windows用户模式使用ETW处理Syscall跟踪

时间:2017-06-02 23:39:51

标签: windows logging etw audit-logging

有几个人告诉我,ETW提供了一种机制来捕获用户模式进程所产生的系统调用。我列举了可用的提供程序,并且只提出了两种可能提供此信息的可能性。第一个是Microsoft-Windows-Kernel-Audit-API-Calls。该提供商向我显示以下数据:



<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
	<System>
		<Provider Name="Microsoft-Windows-Kernel-Audit-API-Calls" Guid="{e02a841c-75a3-4fa7-afc8-ae09cf9b7f23}" />
		<EventID>5</EventID>
		<Version>0</Version>
		<Level>4</Level>
		<Task>0</Task>
		<Opcode>0</Opcode>
		<Keywords>0x0</Keywords>
		<TimeCreated SystemTime="2017-06-01T11:59:05.831179100-0500" />
		<Correlation ActivityID="{00000000-0000-0000-0000-000000000000}" />
		<Execution ProcessID="1860" ThreadID="9628" ProcessorID="1" KernelTime="210" UserTime="1260" />
		<Channel />
		<Computer />
	</System>
	<EventData>
		<Data Name="TargetProcessId">4294967295</Data>
		<Data Name="DesiredAccess"> 1052672</Data>
		<Data Name="ReturnCode">3221225483</Data>
	</EventData>
	<RenderingInfo Culture="en-US">
		<Level>Information </Level>
		<Opcode>Info </Opcode>
		<Provider>Microsoft-Windows-Kernel-Audit-API-Calls </Provider>
	</RenderingInfo>
</Event>
&#13;
&#13;
&#13;

这看起来很有希望,但EventId是否与系统调用名称相对应?有没有详细说明EventId实际意味着什么的文档?我在MSDN或其他地方找不到任何相关内容。我特意寻找API调用,如NtCreateFile,NtCreateThreadEx,NtAllocateVirtualMemory等。

我调查的另一个提供商是&#34; Windows内核跟踪&#34;。这个实际上允许关键字,如&#34;系统调用&#34;然后,它将为您提供SysClEnter / SysClExit日志,但是这些日志不提供启动它们的进程ID,也不提供API。它们只是给出了输入的系统调用的内核地址。

是否有人更熟悉ETW的内部运作能否就如何通过ETW收集这些信息提供答案?

1 个答案:

答案 0 :(得分:0)

您可以轻松监控与Windows中任何进程相关的系统调用。使用cmd管理员,运行以下命令:

logman start "NT Kernel Logger" -p "Windows Kernel Trace" (syscall) -o sys.etl -ets

然后停止

logman stop "NT Kernel Logger" -ets

使用tracerpt

解析.etl文件时
tracerpt sys.etl

您可以在dumpfile.xml中看到系统调用地址。 使用windbg并使用以下命令从命令行启动它:

windbg.exe -kl -c x*!nt*

您可以看到映射到系统调用名称的地址。