おれさまラボ

実際に手を動かして理解を深めるブログ。

Wireshark:HTTPS通信をデコードしてパケットを解析する

はじめに

プライバシー保護の観点からは通信の暗号化は重要ですが、トラブルシュートを行う際にはパケットの中身が見えないと思うように解析が進みません。WiresharkではTLS通信の暗号キーを読み込む機能があるので、HTTPSの暗号化パケットを復号して確認することができます。

便利な機能なのですが、以外と周囲で知らない人が多かったので、手順をまとめておきます。

SSLKEYLOGとは

SSLKEYLOG は、TLS(Transport Layer Security)通信の暗号キーをログファイルに記録するために使用される環境変数です。SSLKEYLOGFILE環境変数を設定すると、TLS接続のために生成される暗号キーをファイルに記録できます。このファイルをWiresharkのようなネットワーク解析ツールに読み込ませることで、暗号化されたトラフィックを復号できます。

SSLKEYLOGFILEの仕様については以下の提案がIETFに提出されています。

martinthomson.github.io

ファイル形式は以下にまとまっています。

udn.realityripple.com

最近のWebブラウザであれば対応しているものが多く、少なくともMicrosoft edgeGoogle ChromeFirefoxではSSLKEYLOGFILEを使ってTLS通信の暗号キーをファイルに保存できます。

Internet ExplorerMicrosoft edgeIEモードで使用した場合には、SSLKEYLOGFILEを使ってTLS通信の暗号キーを保存することはできません。エンタープライズ系のシステムではIEモード等を使用するケースも多いので注意しましょう。

どうしてもInternet ExplorerMicrosoft edgeIEモードで、どのようなHTTPS通信が行われているか確認したい場合は、Fiddlerを使用するのがおすすめです。

www.telerik.com

SSLKEYLOGFILEの設定

まずはSSLKEYLOGFILE環境変数を設定します。

1.コマンドプロンプト管理者権限で起動します。

2.以下コマンドを実行します。フォルダは任意の場所で構いません。

setx SSLKEYLOGFILE C:\work\tlskeys.txt

3.以下コマンドを実行し、SSLKEYLOGという環境変数が追加されていることを確認します。

set

4.OSを再起動します。

Webブラウザの再起動でも構いませんが、バックグラウンドで動いているサービス/プロセスを停止しきれない可能性があるので、OSの再起動を行うのが確実です。

5.WebブラウザHTTPSサイトへアクセスし、C:\work\tlskeys.txt が作成されていることを確認します。

パケットキャプチャの取得

パケットキャプチャは任意のツールを使用して取得します。

Wiresharkがおすすめですが、WiresharkをインストールできないPC環境であれば、 コマンドプロンプトからnetsh traceを使ったり、PowerShellからPktmonを使用するのも良いでしょう。

HTTPSパケットの復号

取得したパケットキャプチャをWiresharkで開き、TLSデコードを行います。

パケットを取得したPCとパケットの解析を行うPCが異なる場合は、解析を行うPCにパケットキャプチャデータとtlskeys.txtをコピーしてから以下の手順を行ってください。tlskeys.txtさえあれば、他のPCでも問題なくTLSデコードが可能です。

1.Wiresharkを起動します。

2.編集 > 設定 を開きます。

3.[Protocols] から [TLS] を選択します。

4.[(Pre)-Master-Secret log filename] にC:\work\tlskeys.txtを指定します。

5.[OK] を押下し、設定ウィンドウを閉じます。

6.取得したパケットキャプチャファイル(.pcap / .pcapng)を開きます。

7.以下画像のようにtcp/443の通信でもHTTPヘッダの中身(HTTP/1.1 200 OK)が平文で見えるようになっていれば成功です。

SSLKEYLOGFILEの削除

放っておくとC:\work\tlskeys.txtが肥大化するので、不要になったらSSLKEYLOGFILE環境変数は削除しましょう。

1.コマンドプロンプト管理者権限で起動します。

2.以下コマンドを実行します。フォルダは任意の場所で構いません。

setx SSLKEYLOGFILE ""

3.以下コマンドを実行し、SSLKEYLOGという環境変数が削除されていることを確認します。

set

4.OSを再起動します。

Webブラウザの再起動でも構いませんが、バックグラウンドで動いているサービス/プロセスを停止しきれない可能性があるので、OSの再起動を行うのが確実です。

5.C:\work\tlskeys.txt を削除します。

6.WebブラウザHTTPSサイトへアクセスし、C:\work\tlskeys.txt が作成されていないことを確認します。

SSLKEYLOGFILEを空にする

不要になったらSSLKEYLOGFILE環境変数を削除するのも一手ですが、毎回設定するのも面倒、というケースもあると思います。

そんなときはPowerShellとタスクスケジューラを使って定期的に削除するのがおすすめです。

PowerShellスクリプト

Clear-Content というコマンドを使うことで、ファイルは削除せず、ファイルの中身を空にすることができます。

Clear-Content "C:\work\tlskeys.txt"

タスクスケジューラ

Windows PCのユーザーログオン時に、TLS通信の暗号キーファイルを空にするPowerShellスクリプトが実行されるよう登録します。Webブラウザ起動前にTLS通信の暗号キーファイルを操作するのでファイルを掴まれることもなく、日々TLS通信の暗号キーファイルがリセットされるので、ファイルの肥大化を防ぐことができます。

役に立ったなと思う方はビール1杯奢ってください。

この続きはcodocで購入