Manjaro Linuxが良くて最近気に入っている
長らく安定志向のdebian GNU/LinuxをデスクトップOSとして使ってきて、安定性重視で言えば非常に満足していました。しかし、先日Arch系の派生として比較的安定性を重視しているManjaro Linuを使ってみて、コレはアリだなと感じたのです。debianの様に頑なな安定志向も良いのですが、Arch系で先進性を負いつつも安定方向に振っているManjaroであれば、実用性は非常に高いということを実感したのです。
と言うのも、動画配信サイトの仕組みを解析していてFirefoxの開発者ツールを起動すると配信がブロックされてしまう細工の施されたサイトに遭遇しました。それでこのブロックの仕組みにも興味を持ったし、開発者ツールで見せないという動画配信の仕組みにも興味を持った次です。隠されると見たくなるものです。
FirefoxにHTTPプロキシ(mitmproxy)を挟む
HTTPプロキシは各種ありますが、オープンソースで開発されていて知名度もある「mitmproxy」を使ってみることにしました。
「mitmproxy」はコマンドラインからも操作出来ますが、Webブラウザを使ってGUI的にも使用出来ます。Python APIが実装されているのでより高度な使い方もできるそうです。私はAPIを使うレベルまでは行きませんが。
さて、LMDE7に「mitmproxy」をインストールしようとしたのですが、debianリポジトリ、Linux Mintリポジトリには存在しない様です。頼りのFlatpakにも存在しません。debian Sid(Unstable)にはあるんですけどね。
どうやら、Python等の依存パッケージのバージョンにかなり依存している様で、debian Stable(安定版)をベースにしているLMDE7では「mitmproxy」を動作させる環境が整わない様です。強引にインストールすることも考えたのですが、ここはLMDE7以外の環境で動作させた方が無難だという考えに至りました。安定している環境を崩したくはありません。
どうやらdebian StableをベースにしているParrot Securityでは「mitmproxy」をすんなりと使用できるみたいです。Parrotはディストリビューション的に安定性を確保しつつも、開発者ツール(ネットワークツール)はなるだけ最新版を追いかけるように努力してくれているので、Parrot OSを使用するのも一案だとわかりました。
mitmproxyをインストールする
ふと、Arch系で検索してみるとArch Linuxでは当然の様にmitmproxyを使用できます。ということはArch派生のManjaroでも行けるのでは?と、Manjaro Linuxを起動してソフトウェアマネージャを起動して検索してみるとアッサリと見つかりました。HTTP解析はManjaroで行う事に決めました。
ソフトウェアマネージャを起動して、「mitmproxy」を検索してインストール指定するだけ。コマンド不使用(GUI)でインストール済です。Arch系ではpacmanコマンドを使うのが流儀でしょうが、私はデスクトップOSの場合はなるだけソフトウェアマネージャを使用しています。

やはり、debian Stable環境でやるよりも、先進的なArch系(でありながら安定志向のManjaro)でやる方が話が早いですし思わぬトラブルも避けられます。何より使い分けることで常用しているLMDE環境を壊すことがありません。PCを複数台所有して使い分けているメリットを享受しなくては勿体ないです。
プロキシと証明書の設定をする
ここからちょっと環境設定を変更する必要があります。Firefoxの通信を「mitmproxy」を通してやる必要がある訳です。mitmproxyパッケージにはGUI版の「mitmweb」もセットになっています。ターミナルから「mitmweb」を起動します。
~$ mitmweb
Firefoxブラウザで新たなタブ(ウィンドウ)として、「mitmproxy is running.」というのが表示されます。ローカルで動いているのでURL欄には「http://127.0.0.1:8081/#/flows」と表示されています。
どうやら通信ポート「8081」がmitmproxyのGUIコンソール、「8080」が実際に通信に使う番号の様です。

mitmproxyが稼働したら、FirefoxのHTTPプロキシの設定を行います。
「設定」ー「一般」の一番下までスクロール。
「プロキシー設定」から「手動でプロキシーを設定する」を選択して、「HTTPプロキシーを設定する」「localhost(127.0.0.1)」でポート「8080」を入力して、「このプロキシーをHTTPSでも使用する」にチェックを入れておきます(HTTPSが今や標準なので)。

この辺りは追々自分で調整していくことになりそうです。
SSL/TLS証明書のインポート
HTTPSのサイトを開いた時に「セキュリティ警告」がいちいち表示されるのは困るので、プロキシー設定を済ませた状態のFirefoxで「mitm.it」にアクセスして証明書ファイルをダウンロードします。
Firefoxの設定「プライバシーとセキュリティ」から、「証明書」「証明書を管理」とアクセスし、インポートで証明書ファイルを指定して、」この認証局によるウェブサイトの識別を信頼する」で受け入れます。
Firefoxの証明書マネージャに「mitmproxy」の認証局証明書が追加されました。これでいちいち警告が表示されなくなります。
FirefoxでHTTP(S)キャプチャする
以上で、いわゆる「串をさした」状態になるので、WebブラウザとWebサーバー(配信サイト)との通信内容をプロキシ経由でモニターできる状態になりました。
FirefoxでHTTPキャプチャをする目的サイトを表示すると、mitmproxyに通信がつらつらと表示されます。虫眼鏡の欄にURLの一部を指定するなどしてフィルターをかけられるので、情報を探しやすい様にその都度工夫して解析をします。
左ペインのURLクリックすると右ペインが表示されて、リクエストやレスポンスなどのHTTP通信が更に詳しくわかります。

後は地道に通信内容を追いかけて解析していくことになります。
Firefox(ウェブブラウザ)の開発者ツールを起動するとブロックされてしまう仕組みになっている配信サイトとのHTTP(HTTPS)通信も、mitmproxyを介することで内容を観ることができます。(配信は止まりませんでしたので成功です!)
mitmwebの終了
ターミナルから起動したmitmwebは、使用中ずっとターミナル内にメッセージが表示されていてプロンプトが返ってきてないと思います。mitmwebを終了させるには、ターミナル内で、CTRL+Cを押すことで終了させてプロンプトが返って来ます。
最後に
一通り流してみるとわかると思いますが、意識的にmitmweb(mitmproxy)を稼働させることになるので、普段はFirefoxのプロキシー設定は使わず、HTTP解析をする時だけプロキシーを使うようにしたりする手間は若干必要です。
ちょっと裏技的なmitmproxyですが、こういうツールの存在も知っておくと開発者ツールが制限されている場合にも有効です。もとい、HTTPプロキシーを介しておくことで通信ログを残すことも可能になるので、色々と応用のアイディアも考え浮かびます。



コメント