tomohxxの日記

麻雀プログラミング

WSL2にmitmproxyをインストールする

はじめに

最近はWebページを見る際にほぼHTTPSを利用するようになりました。HTTPSでは通信内容が暗号化されているわけですが、これを見たいと思ったことはないでしょうか?それを実現するためにmitmproxyが利用できます。

mitmproxyについて

mitmproxyとは仮想的なプロキシサーバのようなもので、サーバーとクライアントの間に入って平文の通信内容を取り出すプログラムです。以下の動作イメージは公式サイトからの引用です。

https://docs.mitmproxy.org/stable/schematics/how-mitmproxy-works-explicit.png

インストール手順

Windows上のUbuntu-20.04 (WSL2)でmitmproxyを動作させます。適当に作業ディレクトリとPython仮想環境を作ってpipでmitmproxyをインストールします。

$ mkdir work
$ cd work
$ virtualenv venv
$ . venv/bin/activate
$ pip install mitmproxy

使い方

いろいろな使い方があるので詳しくは公式サイトを見てください。ここではWebブラウザでパケットを見る方法を説明します。まずシェルでmitmwebを実行します。

$ mitmweb --web-host=0.0.0.0

すると、mitmproxyが127.0.0.1:8080でリクエストを受け付けるようになります。またこのとき自動的にGUIが起動すると思います。

次にmitmproxyの証明書をインポートします。クライアントから見るとmitmproxyは突如現れた得体の知れない存在なので、mitmproxyを経由してインターネットにアクセスしようとするとWebブラウザが危険と判断してブロックしてしまいます。Webブラウザにmitmproxyが信頼できる存在と教えておく必要があります。http://mitm.itにアクセスしてWindows用の手順に従って証明書をインポートします。[Show Instractions]ボタンをクリックすると以下のように詳しい手順を見られます。

f:id:tomohxx:20201119234315p:plain

証明書のインポートが終わったら、Windowsの設定から[プロキシサーバを使う]をオンにします。ここで入力するアドレスは127.0.0.1ではなくWSL2のIPアドレスです。これはipコマンドで調べられます。注意点としてWSL2のIPアドレスは起動の度に変わるので、その都度プロキシサーバのアドレスを書き換える必要があります。[プロキシサーバを使う]をオンにしたら[保存]ボタンをクリックするのを忘れないようにしましょう。

$ ip a

この状態でWebブラウザから適当なページを開くと、GUIでHTMLやJavaScriptPNGなどのパケットをやりとりしているのが見えると思います。

WebSocketについて

WebSocketのパケットを見たい場合は、
How can I capture websocket traffic · Issue #899 · mitmproxy/mitmproxy · GitHub
が参考になります。

おわりに

mitmproxyの使い方を簡単に説明しました。一応、mimproxyを利用する構図は中間者攻撃のものと同じなんですよね。くれぐれも悪用しないでください。