はじめに
Windows 210 October 2018 Updateというリリースで,ひっそりとWindows 10にパケットキャプチャソフトを導入している.
従来は,Microsoft Network MonitorやWiresharkをインストールする必要があったけれど,これが内蔵されているというのは,少々問題があるかもしれない.
今回用いるマシンは,Windows 10の2020 Mayアップデートを適用したもので,pktmonというLANアナライザおよびパケットドロップをレポートするプログラムになる.
このpktmonについては,現時点(2020/05/24)では,Microsoftの公式サイト上でドキュメントはない.
無邪気に実行してみる
コマンドプロンプトで,pktmonを実行してみる.
Microsoft Windows [Version 10.0.18363.836] (c) 2019 Microsoft Corporation. All rights reserved. C:\Users\ujpadmin>pktmon🆑 pktmon { filter | comp | reset | start | stop } [OPTIONS | help] 内部パケット伝達レポートとパケット ドロップ レポートを監視します。 コマンド filter パケット フィルターを管理します。 comp 登録されたコンポーネントを管理します。 reset カウンターをゼロにリセットします。 start パケットの監視を開始します。 stop 監視を停止します。 format ログ ファイルをテキストに変換します。 unload PktMon ドライバーをアンロードします。 help コマンドのヘルプ テキストを表示します。 C:\Users\ujpadmin
ヘルプが表示された. まずは,現在設定を確認してみる.
C:\Users\ujpadmin> pktmon filter list🆑 PktMon ドライバー サービスを開始できませんでした: アクセスが拒否されました。🈁 C:\Users\ujpadmin>
一般ユーザ権限では,実行できないので,管理者権限でコマンドプロンプトを実行する.
現在設定を確認する
コマンドプロンプトを管理者権限で起動する.
フィルタ設定の使い方のヘルプを確認.
C:\Windows\system32>pktmon filter help🆑 pktmon filter { list | add | remove } [OPTIONS | help] コマンド list アクティブなパケット フィルターを表示します。 add 報告対象のパケットを制御するフィルターを追加します。 remove すべてのフィルターを削除します。 help コマンドのヘルプ テキストを表示します。 C:\Windows\system32>
listを使って,現在のパケットフィルタ状態を確認する.
Microsoft Windows [Version 10.0.18363.836] (c) 2019 Microsoft Corporation. All rights reserved. C:\Windows\system32>pktmon filter list🆑 パケット フィルターはありません。 C:\Windows\system32>
パケットキャプチャ設定は設定されてない.
パケットフィルタ設定を追加する addオプション
Webアクセスで用いる,HTTP(80番)とHTTPS(443番)ポートをパケットキャプチャする設定を追加する.
まずは,使い方を確認.
C:\Windows\system32>pktmon filter add help🆑 pktmon filter add <名前> [-m mac [mac2]] [-v vlan] [-d { IPv4 | IPv6 | number }] [-t { TCP [flags...] | UDP | ICMP | ICMPv6 | number }] [-i ip [ip2]] [-p port [port2]] [-e [port]] 報告対象のパケットを制御するフィルターを追加します。パケットを 報告対象にするには、パケットが少なくとも 1 つのフィルターの、指定されたすべての条件に一致する必要があります。 一度に最大 8 つのフィルターをアクティブにすることができます。 name フィルターの名前または説明 (オプション)。 イーサネット フレーム -m, --mac[-address] ソースまたは宛先の MAC アドレスを一致条件とします。2 つの MAC が指定された場合、 ソースか宛先かに関係なく、フィルターはその両方を含む パケットを検出します。 -v, --vlan 802.1Q ヘッダー内の VLAN ID (VID) を一致条件とします。 -d, --data-link[-protocol], --ethertype データ リンク (レイヤー 2) プロトコルを一致条件とします。IPv4、IPv6、ARP、または プロトコル番号とすることができます。 IP ヘッダー -t, --transport[-protocol], --ip-protocol トランスポート (レイヤー 4) プロトコルを一致条件とします。TCP、UDP、ICMP、ICMPv6、または プロトコル番号とすることができます。 TCP パケットをさらにフィルター処理するために、一致条件とする TCP フラグの一覧を指定できます (オプション)。サポートされているフラグは FIN、SYN、RST、PSH、ACK、URG、ECE、CWR です。 -i, --ip[-address] ソースまたは宛先の IP アドレスを一致条件とします。2 つの IP が指定された場合、 ソースか宛先かに関係なく、フィルターはその両方を含む パケットを検出します。 TCP/UDP ヘッダー -p, --port ソースまたは宛先のポート番号を一致条件とします。2 つのポートが指定された場合、 ソースか宛先かに関係なく、フィルターはその両方を含む パケットを検出します。 カプセル化 -e, --encap カプセル化したヘッダーをフィルター条件とします。 サポートされるカプセル化の種類: VXLAN、GRE、NVGRE、IP-in-IP。 カスタム VXLAN ポートはオプションです。既定値は 4789 です。 C:\Windows\system32>
80番ポートを追加する.
C:\Windows\system32>pktmon filter add -p 80🆑 フィルターが追加されました。 C:\Windows\system32>
追加された設定を確認する.
C:\Windows\system32>pktmon filter list🆑 # 名前 ポート - -- --- 1 <empty> 80🈁 C:\Windows\system32>
443番ポートを追加して確認する.
C:\Windows\system32>pktmon filter add -p 443🆑 フィルターが追加されました。 C:\Windows\system32>pktmon filter list🈁 # 名前 ポート - -- --- 1 <empty> 80 2 <empty> 443🈁 C:\Windows\system32>
やっぱり443ポートは止めるので消す.
消す時はremoveコマンドの模様.
C:\Windows\system32>pktmon filter remove help🆑 pktmon filter remove すべてのパケット フィルターを削除します。 C:\Windows\system32>
全部消す方法しかないらしい.
削除して,消えたか確認する.
C:\Windows\system32>pktmon filter remove🆑 すべてのフィルターが削除されました。🈁 C:\Windows\system32>pktmon filter list🆑 パケット フィルターはありません。🈁 C:\Windows\system32>
そして再度,80番ポートだけ追加して,追加を確認する.
C:\Windows\system32>pktmon filter add -p 80🆑 フィルターが追加されました。🈁 C:\Windows\system32>pktmon filter list🆑 # 名前 ポート - -- --- 1 <empty> 80🈁 C:\Windows\system32>
今回は,この80番ポートのみ,キャプチャ対象として実行する.
pktmon startでキャプチャを実行する
pktmonはstartオプションを指定する事で実行できるが,パラメータを確認する.
C:\Windows\system32>pktmon start help🆑 pktmon start [-c { all | nics | [ids...] }] [-d] [--etw [-p size] [-k keywords]] [-f] [-s] [-r] [-m] パケットの監視を開始します。 -c, --components 監視対象のコンポーネントを選択します。すべてのコンポーネント、NIC のみ、または コンポーネント ID の一覧を指定できます。既定値は all です。 -d, --drop-only ドロップされたパケットのみを報告します。既定では、正常に処理されたパケット伝達 も報告します。 ETW ロギング --etw パケット キャプチャのロギング セッションを開始します。 -p, --packet-size 各パケットからログに記録するバイト数。常にパケット全体を ログに記録するには、0 に設定します。既定値は 128 バイトです。 -k, --keywords どのイベントがログに記録されるかを制御する 16 進数の ビットマスク (以下のフラグを合わせたもの)。既定では、すべてのイベントがログに記録されます。 フラグ: 0x001 - 全般構成イベント。 0x002 - カウンターを含むコンポーネント関連情報。 0x004 - 事前に解析されたパケット。 0x008 - パケット メタデータ (NBL OOB)。 0x010 - 未処理のパケット ペイロード。 -f, --file-name .etl ログ ファイル。既定値は PktMon.etl です。 -s, --file-size ログ ファイルの最大サイズ (MB 単位)。既定値は 512 MB です。 ロギング モード -r, --circular 最大ファイル サイズに達すると、新しいイベントによって 最も古いイベントが上書きされます。 -m, --multi-file 最大ファイル サイズに達すると、新しいログ ファイルが作成されます。 ログ ファイルには、PktMon1.etl、PktMon2.etl のように順番に番号が付けられます。 C:\Windows\system32>
ETWとは,Event Tracing for Windowsの事.通信ログはこのETWに流れてくるそうで,これをログイングするために--etwオプションを設定する.またパケットサイズは全てを保存するので0を設定.
そのほかのオプションはデフォルトとする.
次のようにコマンドプロンプトで実行する.
C:\Windows\system32>pktmon start --etw -p 0🆑 ログ ファイル名: C:\Windows\system32\PktMon.etl🈁 ログ モード: 循環 最大ファイル サイズ: 512 MB アクティブな測定を開始しました。 C:\Windows\system32>
ブラウザを使って,適度にWebブラウジングする.
次に,パケットキャプチャを停止する.
C:\Windows\system32>pktmon stop🆑 ログ ファイル: C:\Windows\system32\PktMon.etl (イベントは失われていません) Intel(R) Dual Band Wireless-AC 7265 ID 名前 カウンター 方向 パケット バイト | 方向 パケット バイト -- -- ----- -- ---- --- | -- ---- --- 34 Native WiFi Filter Dr... Upper Rx 828 1,148,635 | Tx 189 25,038 33 VirtualBox NDIS Light... Upper Rx 828 1,148,635 | Tx 189 25,038 32 QoS Packet Scheduler Upper Rx 0 0 | Tx 189 25,038 | 95 TCPIP (NDIS) Lower Rx 828 1,148,635 | Tx 189 25,038 77 LLTDIO Lower Rx 828 1,148,635 | Tx 0 0 73 NDISUIO Lower Rx 828 1,148,635 | Tx 0 0 C:\Windows\system32>
これでキャプチャ完了.
ログファイルを可読化する pkmon format
キャプチャした際のログファイルを確認する.
C:\Windows\system32>dir C:\Windows\system32\PktMon.etl🆑 ドライブ C のボリューム ラベルがありません。 ボリューム シリアル番号は F464-9747 です C:\Windows\system32 のディレクトリ 2020/05/24 20:10 83,886,080 PktMon.etl🈁 1 個のファイル 83,886,080 バイト 0 個のディレクトリ 373,325,750,272 バイトの空き領域 C:\Windows\system32>
83MBのファイルができていた.(キャプチャした内容に依存する)
ETW形式でバイナリなので人間が読めるように変換をし,返還後のファイルサイズを確認.
C:\Windows\system32>pktmon format PktMon.etl -o pktmon.txt🆑 処理しています... 書式設定されたイベント: 15406 書式設定されたファイル: pktmon.txt C:\Windows\system32>dir pktmon.txt🆑 ドライブ C のボリューム ラベルがありません。 ボリューム シリアル番号は F464-9747 です C:\Windows\system32 のディレクトリ 2020/05/24 20:13 7,778,150 pktmon.txt 1 個のファイル 7,778,150 バイト 0 個のディレクトリ 373,320,957,952 バイトの空き領域 C:\Windows\system32>
テキストになった方がサイズは減った.