Wireshark 插件,用于处理 Windows 事件跟踪
Microsoft Message Analyzer 正在退役,其下载包已于 2019 年 11 月 25 日从 microsoft.com 网站移除。
Wireshark 已经构建了一个庞大的网络协议解析器库。
对于 Windows 而言,最好的工具应该是能够收集并混合所有类型日志的工具...
欢迎 Winshark!!!
Winshark 基于 libpcap 后端来捕获 ETW(Windows 事件跟踪),并有一个生成器,可以为您的机器上已知的 ETW 提供程序生成所有解析器。
我们添加了 Tracelogging 支持,以覆盖 Windows 操作系统上几乎所有的日志技术。
有了 Winshark 和 Windows 的强大功能,我们现在可以在同一个工具中捕获网络和事件日志。Windows 暴露了许多 ETW 提供程序,尤其有一个用于网络捕获的 ;-) 不再需要外部 NDIS 驱动程序。
这在使用方面是一个巨大的改进:
如果您想要:
请先安装 Wireshark。 然后只需安装 Winshark。
目前,您必须让 Wireshark 将 DLT_USER 147 解释为 ETW。这是因为您还没有为我们的新数据链路获得 libpcap 的真正值。
我们已提交了一个拉取请求以获得专用的 DLT 值;目前仍在等待中。
为此,您需要打开 Edit 面板下的 Preferences 选项卡。选择 Protocols 下的 DLT_USER,然后 Edit 封装表:

并将 winshark 设置为 DLT = 147:

尽情享受吧!
Winshark 由 cmake 驱动:
git clone https://github.com/airbus-cert/winshark --recursive
mkdir build_winshark
cd build_winshark
cmake ..\Winshark
cmake --build . --target package --config release
为了更好地理解 Winshark 的工作原理,我们需要先了解 ETW 的工作原理。
ETW 分为三部分:
存在许多不同类型的提供程序。最常见且可用的是注册提供程序。注册提供程序(或基于清单的提供程序)记录在注册表项 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Publishers 下。
这建立了提供程序 ID 与 dll 之间的关联。清单包含在关联 dll 的资源 WEVT_TEMPLATE 中。
您可以使用 logman 列出机器上所有注册的提供程序:
logman query providers
您还可以列出特定进程绑定的所有提供程序:
logman query providers -pid 1234
有些提供程序可能显示无名称;这些类型的提供程序可以生成 WPP 或 TraceLogging 日志。
创建会话以收集来自多个提供程序的日志。
您可以使用 logman 创建自己的会话:
logman start Mysession -p "Microsoft-Windows-RemoteDesktopServices-RdpCoreTS" -ets -rt
logman update MySession -p "Microsoft-Windows-NDIS-PacketCapture" -ets -rt
您可以从管理员命令行列出所有活动会话:
logman query -ets
Data Collector Set Type Status
-------------------------------------------------------------------------------
...
EventLog-Application Trace Running
EventLog-Microsoft-Windows-Sysmon-Operational Trace Running
EventLog-System Trace Running
...
The command completed successfully.
您可以在此处看到事件记录器使用的一些有趣会话,用于从应用程序和系统会话以及 Sysmon 捕获日志。
消费者是一个简单的程序,它将从会话中读取日志。已知的消费者包括:
logmannetshtracert现在还有 Winshark!!! Winshark 是一个简单的 ETW 消费者。真正的底层消费者是 libpcap(Windows 上为 wpcap.dll),它由负责数据包捕获的 dumpcap.exe 使用。
Wireshark 分为三部分(是的,它也是):
Wireshark.exe:负责解析和解析协议dumpcap.exe:负责捕获数据包libpcap(wpcap.dll):负责在 dumpcap.exe 和操作系统之间进行接口Winshark 位于第一部分和最后一部分。它为 libpcap 实现了一个后端,用于捕获 ETW 事件。
Winshark 在 ETW 会话上工作,这就是为什么您可以在捕获开始时选择 ETW 会话而不是网络接口。
然后,在安装步骤中,Winshark 会为您的计算机上注册的每个基于清单的提供程序生成 lua 解析器。
Winshark 还能够解析基于 tracelogging 的提供程序。
要使用 Winshark 捕获网络流量,您可以使用两种简单的方法:
pktmon 是一个内置的、跨组件的 Windows 网络诊断工具。它可以用于数据包捕获、丢包检测、数据包过滤和计数(从 RS5 开始支持)
(https://docs.microsoft.com/zh-cn/windows-server/networking/technologies/pktmon/pktmon)
pktmon start -c -m real-mode
您可以运行 pktmon -h 以获取更多选项(以管理员身份运行)
例如: 为数据包添加过滤器
pktmon filter add -t icmp
pktmon filter add -t tcp -p 80
然后以管理员权限启动 Wireshark 并选择 Pktmon 接口:

这将开始数据包捕获:

netsh.exe trace start capture=yes report=no correlation=no
然后创建一个与 Microsoft-Windows-NDIS-PacketCapture 提供程序关联的 ETW 会话:
logman start Winshark-PacketCapture -p "Microsoft-Windows-NDIS-PacketCapture" -rt -ets
然后以管理员权限启动 Wireshark 并选择 Winshark-PacketCapture 接口:

这将开始数据包捕获:

ETW 为每个数据包标记一个头部,其中包含关于发送者的一些元数据。
其中之一是发送者的 进程 ID。与传统的 NDIS 驱动程序数据包捕获相比,这是一个巨大的改进。
只需在 Wireshark 的过滤字段中输入以下表达式:
winshark.header.ProcessId == 1234

@kobykahane 提供了一个 文件系统过滤驱动程序,该驱动程序对命名管道上的每个操作发出 ETW。
bcdedit /set testsigning on
管理员 身份双击 C:\Program Files\Wireshark\WinsharkUpdate.bat 更新 Winshark 解析器管理员模式 打开 cmd.exesc start NpEtw
logman start namedpipe -p NpEtw -ets -rt
Wireshark 并选择 namedpipe 会话。尽情享受吧!
该项目是 SSTIC 演讲的一部分