Windows 内置 Netsh / ETW 抓包与 DNS 解析

Packet Capture

Patrick Young
9 min readMay 21, 2023

开始抓包

以下过程涉及的 cmd.exe / powershell.exe 窗口,在没有抓包完成前请勿关闭!!

适用系统:Windows 7 SP1 / Windows Server 2008 R2 (含)以上

使用方法:

  • 启动一个经过 UAC Elevated 的 Windows Terminal (e.g. cmd.exe / powershell.exe)
  • netsh trace start capture=yes report=disabled 开始,如果 report=enabled 则还会额外输出系统的各类软硬件及系统诊断配置信息并打包为cab格式。
  • netsh trace stop 停止。

默认输出路径:%Temp%\NetTraces 下,可以额外增加参数修改:tracefile=C:\tmp\pktcap.etl maxsize=512mb

适用系统:Windows 10 1809+ / Windows Server 2019 (含)以上

使用方法:

  • 启动一个经过 UAC Elevated 的 Windows Terminal (e.g. cmd.exe / powershell.exe)
  • pktmon filter 增加适当过滤器,pktmon start开启抓包,pktmon stop 停止。

默认输出路径:C:\Windows\System32\PktMon.etl

此方法抓包后得到的 etl 是不携带 trace 数据的,亦不包含进程信息,使用 MMA 分析没有意义,也无法看到有用的数据包和解析,且在转换格式后分析时携带了大量重复且无用的数据。如需携带 trace 数据,自行添加 --trace 参数并写入对应的 Trace Provider。

  • 抓取停止后使用 pktmon unload 卸载系统驱动。

抓包后的分析

Netsh 抓包的只能使用 GitHub 的 etl2pcapng 转换!

  1. 微软已经弃用且不再提供下载的 Microsoft Message Analyzer ,优点:数据全面,包括了 PID / TID 等信息,缺点:格式不通用,需要独立分析工具,下载困难
  2. Wireshark,优点:通用格式,缺点:进程元数据丢失,仅有数据包和PID

MMA 操作:Session — New Viewer — Analysis Grid — Process View

格式转换:https://github.com/microsoft/etl2pcapng,运行参数参见 Readme。使用 pktmon 转换会导致无法读取到数据包。

Win10 系统使用 pktmon 抓包的可以直接转换:

转换过程:

Wireshark 分析:

列举 TraceProvider,使用 Powershell: Get-NetEventProvider -ShowInstalled | Select-Object Name,Guid | sort Name ,添加 Microsoft-Windows-WinHttp 作为 Provider 之后,使用 Powershell Invoke-WebRequest 请求 HTTP 网站,依然没有关联到对应的数据包和 PID。

关于 DNS 解析的问题

  1. 如遇应急场景,需要先确认DNSCache服务所在的 svchost 进程,并尝试清空 DNS 缓存。
  2. 创建一个 Windows DNS Client 的 ETW 追踪器,ETW 追踪时进一步配合系统的进程创建审计可以获得 PID 与进程名+可执行文件名的对应关系。

(1) 创建 “进程创建”审计 — 组策略

(2) 创建 ETW Session — 计算机管理

名字随意。

选择追踪数据即可。

添加追踪提供者,选择 MS-Windows-DNS-Client。

添加后选择 Keywords(Any),点击 Edit,勾选所有项,或者选择 Manual,值为 0xc0001ffff0000100 ,确认即可。

创建完成后右键菜单启动追踪即可。

在对应的 Collector 位置找到 ETL 文件后使用 MMA 分析即可。

测试 DNS 抓取请求完整:

对应 DNSCache 服务所在 svchost 进程可以观察到 DNS 缓存的查询记录:

经过测试,确实存在 DNS 请求 在 ETW Trace 中 “漏报” ,使用 WSL 1 中的 kdig 进行测试,配合 Go 语言的自有 Resolver 进行测试,无法抓取,经验证,原因为使用系统自有 C Resolver 解析,不依赖操作系统解析的应用程序不受 ETW 追踪 MS-Windows-DNS-Client 影响。抓包情况下会发现出现 PID=4 (System 伪进程) 的 DNS 解析,亦为同理。

如需进一步追踪,可参考知识库中其他文章,使用 ALPCLogger 追踪系统内核的 ALPC/RPC 调用。

Reference

--

--

No responses yet