アプリ開発初心者なので
先日、自社で作成したアプリの最終チェックに関わったんですが、その時に「通信内容見たいな~」って思ったんですよ。まあサーバ側が見れればそこで見ればいいんですけど、昨今のアプリはいろんなところと通信するので、すべての通信内容を見れなかったりする事情もあるわけで。なので、そういう時に気軽に通信内容をチェックできるMan-In-The-Middleなproxyを立ててみようと思いました。
mitmproxy
ググると一発目でこいつに行き当たりました。ふーん、Fiddlerじゃないんだ。
Qiitaにも当然のように記事がたくさんあったので、まずは入れてみて動かしてみましょう。
導入手順
WSL導入
動作環境はWindows 10なので、まずはWSLを有効化します。
スタートメニューを右クリック->アプリと機能を選択。
再起動が求められたりするので、立ち上がったらWindows Storeでubuntuを探しましょう。
mitmproxyのインストール
mitmproxyの導入はaptのおかげで至極簡単です。
sudo apt install python3-pip && sudo pip3 install -U pip && sudo pip3 install mitmproxy
mitmproxyの起動と端末側の準備
SHIFT + Fでfollowモード(tailみたいな感じ)にしておきましょう。
これでmitmproxyが起動しましたが、準備はまだ終わっていません。端末側にproxyの設定と、mitmproxyの証明書をインストールする必要があります。
まずはproxyの設定。ポート指定してない場合は8080です。
次に証明書です。
端末側でブラウザを開き、mitm.itとアドレスに打ち込みます。
利用する端末のアイコンを選択して、証明書をダウンロードします。
iOSの場合、これだけでは証明書が有効にならないようです。
設定を開くとプロファイルのインストールがアラートとして出てくるので、それを選択します。
最後に、設定 > 一般 > 情報 > 証明書信頼設定で有効にしておく必要があります。
使ってみる。
アプリも見てましょう。例としてsmartnewsを開いた時の通信を見てみました。
いい感じです。
見れないアプリもある。
証明書のpinning(これ、なんて訳すんでしょうね)という方法で中間者攻撃を無効化するというのは、比較的いろいろなアプリで実施されているようです。
先ほどsmartnewsの通信を垣間見ましたが、yahoo newsでは通信を見ることができません。証明書のpinningに対応しているものと思われます。
同様に、以前は通信内容を見ることができたAmazonなどのアプリも、中間者攻撃に対して対策がされているようで、mitmproxy動作下では正常に動作しないようです。
対策がされているアプリとそうでないアプリを調べていくのもなかなか楽しそうです。
逆に言うと、自分たちが作るアプリでも同様のことをしなくてはいけないケースを想定しなくてはいけませんね。