Wiresharkの設定(ブラウザのTLS通信をキャプチャ)
次に、ブラウザの通信をキャプチャしてみます。
最近では多くのサイトへの通信は、暗号化(SSLというかTLS)されています。
ですので、Wiresharkで確認しても暗号化されているため、中身を見ることができません。
試しに自分のサーバーとの通信をキャプチャしてみました。
この通り、暗号化されているのが分かります。
Encrpyted Application Data: xxx
そこでブラウザの通信を復号化してみます。
ブラウザはGoogle Chromeを使用しました。
本設定を行うとブラウザ上の、暗号化されている通信を復号化するための情報を、ファイルとして出力します。
Windowsの環境変数へ設定するやり方もありますが、毎回このファイルを出力すると、セキュリティ的にも良くないので、専用のショートカットを用意し、必要な時だけ起動するようにしましょう。
Chromeのexeファイルを探します。
私の環境では以下にありました。
C:\Program Files\Google\Chrome\Application\chrome.exe
chrome.exeファイルを右クリックし、「送る→デスクトップ(ショートカットを作成)」をクリックします。
ショートカットが作成されました。
右クリック→プロパティを開きます。
「リンク先」の後に、復号化のためのファイルを出力する場所を指定します。
任意の場所を指定してください。
ショートカットをダブルクリックで起動すると、ショートカットで指定した場所にファイルが出力されます。
参考までにですが、Firefoxでも同様のことができます。
firefox.batファイルを作成し、中身を以下にします。
バッチファイルを起動すると、Firefoxが起動され、所定の場所にファイルが出力されます。
set SSLKEYLOGFILE=D:\ssl.txt
"C:\Program Files\Mozilla Firefox\firefox.exe"
引き続きWiresharkの設定を行います。
Wiresharkの「編集→設定」をクリックします。
Protocols→TLSをクリックします。
「(Pre)-Master-Secret log filename」に、先程ブラウザの設定で出力したファイルのパスを指定します。
今回の件、ググるとここまでは、この手順を書いている記事があります。
実際、この時点でWiresharkの動作確認を行うと、TLS通信が復号化されていることが確認できます。
ただし、時間が経つと復号化ができなくなる事象が発生します。
引き続き、以下の手順を行う必要があります。
Protocols→TCPをクリックします。
「Reassemble out-of-order segments」にチェックを入れ、「Analyze TCP sequence numbers」のチェックを外します。
(原因解決するのに時間がかかりました・・)
Wiresharkで暗号化された通信内容を見てみよう
それでは、Wiresharkでキャプチャを見てみます。
Chromeは一旦すべて閉じ、必ず先にWiresharkを起動します。
この手順は重要です。手順が違うと復号化できません。
インターフェースを指定し、キャプチャを実行後、フィルタを指定します。
デフォルトではWiresharkはすべての通信を表示しますので、通信を絞ります。
以下の赤枠の部分に条件(フィルタ)を指定します。
以下は、試しに私のサーバーのIPアドレスですが、通信をキャプチャしたい条件を絞りましょう。
ip.addr == 183.90.240.XX
次に、作成したChromeのショートカットを起動します。
その上で、何らかのページを開いてみましょう。
実際に暗号化されていた通信の内容が表示できるようになりました。
Tsharkで通信内容を見てみよう
TsharkはWiresharkのCLI(コマンドライン)版です。
Tsharkは、Wiresharkと一緒にインストールされています。
まずはTsharkで、ネットワークのインターフェース一覧を表示します。
コマンドプロンプトを開き、以下のコマンドを実行します。
(exeの場所は、インストール先により異なります)
C:\Users\xx>"C:\Program Files\Wireshark\tshark.exe" -D
引数「-D」を指定すると、インターフェースの一覧の取得ができ、以下のように表示されます。
(表示内容はPCによって違います)
- \Device\NPF_{xxx} (ローカル エリア接続* 10)
- \Device\NPF_{xxx} (ローカル エリア接続* 9)
- \Device\NPF_{xxx} (ローカル エリア接続* 8)
- \Device\NPF_{xxx} (Bluetooth ネットワーク接続)
- \Device\NPF_{xxx} (ローカル エリア接続* 2)
- \Device\NPF_{xxx} (ローカル エリア接続* 1)
- \Device\NPF_{xxx} (Wi-Fi)
- \Device\NPF_{xxx} (イーサネット 2)
- \Device\NPF_Loopback (Adapter for loopback traffic capture)
この番号が重要になります。
私の場合、「イーサネット 2」がメインのインターフェースなので、インターフェース番号は、8になります。
次に、Tsharkで通信を確認します。
Tsharkは、Wiresharkの設定を参照しているので、Wiresharkの設定が済んでいればOKです。
コマンドプロンプトで、以下のように実行してみましょう。
※「8」という指定については、先程のインターフェースの番号になりますので、各自の番号を指定してください。
"C:\Program Files\Wireshark\tshark.exe" -i 8 -l -e text -Tfields -f "net 183.90.240.XX"
オプションの概要は以下です。
-i : インターフェースの番号を指定
-l : 各パケットの後に標準出力をフラッシュ(リアルタイムで表示)
-e text -Tfields : 通信内容をテキスト表示
-f : キャプチャフィルター(Tsharkは通信内容を一時ファイルに保存しているので、特定のサーバーの通信のみ保存するように指定する)
そうすると通信の内容が、コマンドラインベースで取得できました。
さいごに
暗号化された通信の中身を見ることができました。
特にTsharkを使用すると、別なアプリから制御するといったこともできます。
(C#やPythonから、Tsharkを呼び出し通信の内容によって処理を行うなど)
自作アプリでブラウザの通信をキャプチャする事例は、以下をご覧ください。
他にも私のブログで、ツールについて解説している記事がありますのでご覧ください。
コメント