Windows 10 quietly got a built-in network sniffer, how to use (ざっくり翻訳)


This is a personal translation memo of the Windows 10 quietly got a built-in network sniffer, how to use content. Thanks to Lawrence Abrams!

この投稿は Windows 10 quietly got a built-in network sniffer, how to use の主要部分をざっくりと意訳したメモです。執筆者の Lawrence Abrams さんに感謝!

概要

マイクロソフトは network packet sniffer (ネットワーク上のパケットをモニターするツール) を Windows 10 October 2018 Update にこっそり実装しましたが、リリース以来、見過ごされてきました。

packet sniffer、または network sniffer は、コンピュータを経由して流れるネットワーク上の活動を個々のパケットレベルまで監視するプログラムです。

これは、ネットワーク管理者がネットワークの問題を診断したり、ネットワークで使用されているプログラムの種類を確認したり、クリアテキストで送信されたネットワークのやりとりを参照するために使用します。

Linux ユーザーは network sniffing を実行する tcpdump ツールを標準で利用できますが、Windows ユーザーは Microsoft Network Monitor や Wireshark などのサードパーティプログラムをインストールする必要がありました。
 
Microsoft による 2018年10月のアップデートにより、状況は変わりました。Windows10 には、pktmon.exe と呼ばれるパケットを監視する新しいプログラムが付属しています。

Windows10 に追加された packet sniffer プログラム

Windows 10 October 2018 Update のリリースに伴い、Microsoft は C:\Windows\system32\pktmon.exe という新しいネットワーク診断およびパケット監視プログラムをこっそり追加しました。

このプログラムには「内部パケット伝達レポートとパケット ドロップ レポートを監視します」という説明があり、ネットワークの問題を診断するために設計されたことを示しています。

Windows の netsh trace コマンドと同様に、コンピューターを介して送信されるデータの完全なパケット検査を実行するために使用できます。

マイクロソフトのサイトにはこのツールに関する言及がなく、自身でプログラムを試すことでその使用方法を学ぶ必要がありました。
 
ありがたいことに、 pktmon [command] help と入力すると、利用方法を表示させることができます。

たとえば pktmon filter help は、filter コマンドのヘルプを表示します。

pktmon の使用方法を学ぶには、ヘルプドキュメントを読み、プログラムを試してみることを強くお勧めします。次のセクションでは、それに役立つ例も提供しています。

pktmon ツールでネットワークトラフィックを監視する

残念ながら、この記事で pktmon の全ての機能を説明するつもりはありません。このツールの使用方法の基本的な例を紹介したいと思います。
 
この例では、pktmon を使用して、実行されているコンピューターからの FTP トラフィックを監視します。

pktmon には管理者権限が必要なため、これを行うには、最初に Windows 10 で管理者権限のコマンドプロンプトを起動する必要があります。

次に、監視するトラフィックを pktmon に通知する2つのパケットフィルターを作成する必要があります。この例では、TCPポート 20 および 21 のトラフィックになります。

これらのフィルターは、監視するポートごとに pktmon filter add -p [port] コマンドを使用して作成できます。

pktmon filter add -p 20
pktmon filter add -p 21

次に、pktmon filter list コマンドを使用して、作成したパケットフィルターを確認できます。

TCPポート 20 および 21 と通信するパケットの監視を開始するには pktmon start --etw コマンドを使用する必要があります。
 
実行されると、pktmon はデバイス上の全てのすべてのネットワークインターフェイス上の全てのパケットを監視し、パケットの最初の128バイトを PktMon.etl というファイルに記録します。

パケット全体を特定のイーサネットデバイスからのみログに記録するには、-p 0 (パケット全体をキャプチャする) および -c 13 (ID 13のアダプターからのみキャプチャする) 引数を使用できます。

アダプターの ID を判別するには、コマンド pktmon comp list コマンドを実行します。

すべての引数を組み合わせると、次の最終コマンドが得られます:

pktmon start --etw -p 0 -c 13


入力されたフィルターに一致する、全てのパケットをキャプチャしている間、pktmon は特に何も表示しません。

パケットのキャプチャを停止するには、pktmon stop コマンドを入力します。キャプチャされた生データが含まれている PktMon.etl というファイル名のログファイルが、現在のフォルダに作成されます。

このファイルのこのデータは直接使用できないため、次のコマンドを使用して、人間が読めるテキスト形式に変換する必要があります:

pktmon format PktMon.etl -o ftp.txt

テキストに変換しても、完全なパケットは表示されず、以下に示すようにネットワークトラフィックの概要のみが表示されます。

キャプチャしたデータを活用するには、Microsoft Network Monitor をダウンロードしてインストールし、それを使用してETLファイルを表示することをお勧めします。

ネットワークモニタを使用すると、クリアテキスト情報を含む、送信された完全なパケットを確認できます。

たとえば、この FTP テストサイトにログインするときに入力したクリアテキストのパスワードを含むパケットを次に示します。

pktmon プログラムを使用して完了すると、次のコマンドを使用して、作成されたすべてのフィルターを削除できます:

pktmon filter remove

リアルタイム監視と pcapng のサポートは近日公開予定

次の Windows 10 May 2020 Update (Windows 10 2004) リリースでは、監視されたパケットをリアルタイムで表示し、ETL ファイルを PCAPNG フォーマットに変換できるように pktmon ツールが更新されました。

次の機能アップデートで提供される pktmon では、-l real-time 引数を使用してリアルタイム監視を有効にできます。

これにより、キャプチャされたパケットが画面に直接表示されると同時に、ETL ファイルに保存されます。

マイクロソフトはまた、ETL ファイルを PCAPNG 形式に変換する機能を追加し、Wireshark などのプログラムで使用できるようにしています。

PCAPNG形式に変換されたファイルを、Wireshark で開くことにより、ネットワーク通信をよりよく表示できます。

繰り返しになりますが、これらの機能は Windows 10 1903/1909 では利用できません。また、月末にリリースされる Windows 10 2004 で提供される予定です。

【2020年5月16日 追記】Windows 10 2004 で追加された新機能について追加