Wiresharkパケット解析メモ

Wiresharkでパケット解析

QUICプロトコルの解析 - パケットキャプチャ

はじめに

QUICプロトコルは2021年5月にRFC 9000で標準化されたプロトコル。HTTP/3と併せて使うことが想定されている。

UDPベースのトランスポートを提供しており、データに加えてヘッダも暗号化されて伝送されるため、従来のTCPのようなシーケンス番号による解析が難しくなっている。

QUICのパケットキャプチャ

nginxが用意しているQUICのテスト環境を使ってパケットキャプチャしてみる。 テストの環境は以下の通り

Google ChromeTLS pre-master-secret取得モードで起動

QUICはTLSで暗号化がかかるため、Google ChromeTLSのpre-master-secretを取得できるようにして起動する。

SSLKEYLOGFIKE=でファイル名を指定して起動させることで、指定したファイルにTLS復号のためのpre-master-secretが保存される。

% SSLKEYLOGFILE=~/Capture/pre-master-secret.log "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"

f:id:packet_analysis:20210808104540p:plain
ChromeのSSLKEYLOGFILE起動

ChromeのQUICサポートを明示的に有効にする

起動したChromechrome://flagsにアクセスし、実験的なQUICプロトコルのサポートと、DNSでのHTTPSSVCレコードのサポートを有効にしておく。

f:id:packet_analysis:20210808104844p:plain
chrome://flagsの設定

nginxのQUICテスト環境へのアクセス

Wiresharkでパケットキャプチャを開始したのち、nginxが用意しているQUICのテスト環境にアクセスし、TestをRunする。 QUICでアクセスできたセッションは緑色で表示される。

f:id:packet_analysis:20210808105048p:plain
nginxのQUICテスト

WiresharkでのQUICの見え方

InitialとHandshakeの1パケット目まではTLS1.3のネゴシエーション前のため、ヘッダが平文で見える。

f:id:packet_analysis:20210808110524p:plain
Handshake 1パケット目の見え方

Handshakeの2パケット目以降はTLS1.3のネゴシエーションが完了するため、ヘッダ以降が全てTLS暗号化される。

f:id:packet_analysis:20210808110620p:plain
Handshake 2パケット目以降の見え方

WiresharkでのTLSのデコード

Preference->Protocols->TLSからSSLKEYLOGFILEで指定したpre-master-secretのファイルを指定する。

f:id:packet_analysis:20210808111025p:plain
pre-master-secretファイルの指定

pre-master-secretを指定することで、Packet NumberやPayloadなどを復号してみることができるようになる。

f:id:packet_analysis:20210808111235p:plain
TLSパケットのデコード

おわりに

今回はQUICパケットのキャプチャとTLSの復号までを試してみました。


【新品】WEB+DB PRESS Vol.123 特集HTTP/3入門|Next.js|実践WAF|さようならIE