
Wireshark の Windows イベントトレーシング (Event Tracing for Windows) 用プラグイン
Microsoft Message Analyzer は廃止され、そのダウンロードパッケージは 2019 年 11 月 25 日に microsoft.com サイトから削除されました。
Wireshark は膨大なネットワークプロトコルディセクタライブラリを備えています。
Windows に最適なツールは、あらゆる種類のログを収集・混合できるものです。
Winshark の登場です!!!
Winshark は ETW (Event Tracing for Windows) をキャプチャするための libpcap バックエンドと、マシン上の既知の ETW プロバイダー向けのすべてのディセクタを生成するジェネレーターを基盤としています。
Windows オペレーティングシステム上のほぼすべてのログ手法をカバーするために、Tracelogging サポートも追加しました。
Winshark と Windows のパワーにより、同じツールでネットワークとイベントログの両方をキャプチャできるようになりました。Windows は多くの ETW プロバイダーを公開しており、特にネットワークキャプチャ用のものもあります ;-) 外部 NDIS ドライバーはもう必要ありません。
これは使用面での大きな改善です:
以下の操作を行いたい場合:
事前に Wireshark をインストールしてください。 その後、Winshark をインストールしてください。
現時点では、Wireshark に DLT_USER 147 を ETW として解釈するよう指示する必要があります。これは、新しいデータリンクに libpcap からの真の値がまだ割り当てられていないためです。
専用の DLT 値を取得するためのプルリクエストを提出しましたが、まだ保留中です。
これを行うには、Edit パネルから Preferences タブを開きます。Protocols の下の DLT_USER を選択し、カプセル化テーブルを Edit します:

そして、DLT = 147 に winshark を設定します:

お楽しみください!
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 は 3 つの部分に分かれています:
プロバイダーにはさまざまな種類があります。最も一般的で使用可能なのは、登録済みプロバイダーです。登録済みプロバイダー (マニフェストベースのプロバイダー) は、レジストリキー 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.
ここでは、イベントロガーが Application セッション、System セッション、Sysmon からログをキャプチャするために使用する興味深いセッションを確認できます。
コンシューマーは、セッションからログを読み取る単純なプログラムです。よく知られているコンシューマーは次のとおりです:
logmannetshtracertそして今度は Winshark です!!! Winshark は単純な ETW コンシューマーです。実際の基盤となるコンシューマーは libpcap (Windows では wpcap.dll) であり、これはパケットキャプチャを担当するプロセス dumpcap.exe によって使用されます。
Wireshark は 3 つの部分に分かれています (これも同様です):
Wireshark.exe - プロトコルの解析とディセクションを担当dumpcap.exe - パケットのキャプチャを担当libpcap (wpcap.dll) - dumpcap.exe とオペレーティングシステムとのインターフェースを担当Winshark は最初と最後の部分に位置します。ETW イベントをキャプチャするための libpcap のバックエンドを実装しています。
Winshark は ETW セッションで動作するため、キャプチャ開始時にネットワークインターフェースの代わりに ETW セッションを選択できます。
次に、Winshark はインストール手順で、コンピュータに登録されている各マニフェストベースのプロバイダー用の lua ディセクタを生成します。
Winshark は、tracelogging ベースのプロバイダーも解析できます。
Winshark を使用してネットワークトラフィックをキャプチャするには、2 つの簡単な方法があります:
pktmon は、Windows 用の組み込みのクロスコンポーネントネットワーク診断ツールです。パケットキャプチャ、パケットドロップ検出、パケットフィルタリングとカウントに使用できます (RS5 以降でサポート)
(https://docs.microsoft.com/ja-jp/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 は各パケットに送信者に関するメタデータを含むヘッダーを付加します。
そのうちの 1 つが送信元の プロセス ID です。これは従来の NDIS ドライバーによるパケットキャプチャからの大きな改善点です。
Wireshark のフィルターフィールドに次の式を入力するだけです:
winshark.header.ProcessId == 1234

@kobykahane は、名前付きパイプで実行されるすべてのアクションに対して ETW を出力するファイルシステムフィルタドライバーを提供しています。
bcdedit /set testsigning on
C:\Program Files\Wireshark\WinsharkUpdate.bat を管理者権限でダブルクリックして Winshark ディセクタを更新cmd.exe を開くsc start NpEtw
logman start namedpipe -p NpEtw -ets -rt
Wireshark を起動し、namedpipe セッションを選択。お楽しみください!
このプロジェクトは、SSTIC で行われた発表の一部です。