ブラウザのセキュア通信を眺める方法。

ブラウザとウェブサイトの間の通信のセキュア化、つまりウェブのHTTPS化が浸透して久しい昨今ですが、本日はそんなセキュアなHTTPS通信の内容を眺める方法をいくつか紹介したいと思います。

ちなみに対象は、自分のブラウザが行う通信です。他人のブラウザの通信を覗こうという趣旨ではありませんので、その点はあしからず。

デベロッパーツール

これが一番簡単な方法です。

画像5

ブラウザの画面でキーボードのF12キーを叩けば起動するツールです。細かな差異はあれど、ネットワークタブに移るとブラウザとウェブサイトの間の通信の状況を眺めることができます。

ただし世の中には、デベロッパーツールの起動を検知して動きを変えるウェブサイトがあるみたいなので、その点には留意が必要です。

プロキシ系ツール

有名所はFiddlerとmitmproxyだと思います。

Fiddlerは本当に昔からあるウェブのデバッギングツールで、mitmproxyの方が後発のツールになります。どちらもクライアントにルート証明書をインストールする方式で、ブラウザの外からブラウザとウェブサイトの間の通信の状況を眺めることができます。

リッチでお手軽なGUIがほしければFiddler、透過プロキシやスクリプト制御といった尖ったことがしたければmitmproxy、という使い分けを自分はしています。

ただしプロキシという特性上、WebSocketやTransfer-Encoding: chunkedで長く引きずられる通信をリアルタイムに眺める用途には向いていないと、自分は考えています。

フック系(自作)ツール

リアルタイム性を求める場合なんかには、少し手間ですがAPIをフックするツールを自作するのもありだと思います。

ここからは、自分が以前に紹介した本に記載の手法を応用して、ウェブサイトからのレスポンスを眺めるための簡単なツールを、自作してみたいと思います。

1.Dockerで環境を立ち上げる

今回はGUI環境のLinuxを使用しますので、Dockerで環境を立ち上げます。

docker run -it --rm -p 8080:8080 uphy/ubuntu-desktop-jp:18.04

「Dockerなにそれ?」という人は、公式のドキュメントを参考にしながら、まずはDocker CEをインストールして使える状態にしてください。

環境を立ち上げられたら、ブラウザでhttp://localhost:8080へアクセスしてConnectをクリックします。

画像1

2.Firefoxのインストール

これらのコマンドを実行してFirefoxをインストールします。

apt-get update
apt-get install firefox

3.自作ツールの準備

まずは、自作ツールのコンパイルに必要なパッケージ類をインストールします。

apt-get install build-essential libnspr4-dev

次に、こんな感じのソースファイルを準備します。

/* ファイル名:nsprdump.c */

#define _GNU_SOURCE 1

#include <nspr/prio.h>
#include <dlfcn.h>
#include <stdio.h>

typedef PRInt32 (*F_PR_Read)(PRFileDesc*, void*, PRInt32);

extern PRInt32 PR_Read(PRFileDesc *fd, void *buf, PRInt32 amount) {
   PRInt32 read;
   static F_PR_Read _PR_Read;

   if (_PR_Read == NULL) {
       _PR_Read = dlsym(RTLD_NEXT, "PR_Read");
   }

   read = _PR_Read(fd, buf, amount);
   if (read > 0) {
       fwrite(buf, read, 1, stdout);
   }
   return read;
}

最後に、そのソースファイルをコンパイルして完了です。

gcc -fPIC -shared -ldl nsprdump.c -o /tmp/nsprdump.so

4.自作ツールを使ってみる

コマンドで自作ツールを噛ませながら、Firefoxを起動させます。
※ Firefoxをすべて閉じた状態から始めます。

LD_PRELOAD=/tmp/nsprdump.so firefox | grep -a --line-buffered -oP "HTTP\\/\\d\\.[^\r]+"

そしてその状態で色々なウェブサイトを巡ってみてください。そのウェブサイトからのレスポンスが、ターミナルに赤字で表示されるはずです。

画像3

余談ですが、意外とHTTP 2の普及率が高いなぁと感じました。

5.あとがき

ここで紹介したツール類はどれも応用が効くので、一度全部さらっと試してみてから、自分に合うものを選択すれば良いと思います。

Let's きっちり納税。noteでの収益を励みに、皆さんへ有益な情報を届けます!