iPhoneアプリ開発でSSL通信を使っていれば本当に安全か試して見た(中間者攻撃・プロキシ)
アプリ開発をしているとよく聞く「SSL通信しているからうちのアプリは安全!」「通信傍受なんてできないよ! SSLだもん」っていうのがなんとなく広まっている気がします。
実はそんなことはない!っていうのが結論らしい…というのを耳にしたので試して見た。
やることはプロキシサーバーを立てて、サーバーとアプリの通信の仲介を装い通信内容を取得するっていうもの。
生データを送っていればプロキシで通信内容がわかるらしい。
そんな恐ろしいことがあるのか……
つかったのが「mitmproxy」というツール。
インストールはMacOSの場合、簡単。pythonがはいっているのでpipを使う。
easy_install pip pip install mitmproxy
私の場合Anacondaが悪さをしていてかなり苦労したが….とりあえず起動
mitmproxy -p 8080
ポートはお好きにしていい。
プロキシサーバーにするPCとiPhoneがきちんと同じWifiを利用していることを確認して
「設定」->「Wifi」->利用中のWifi -> 「HTTPプロキシのプロキシを構成」でプロキシサーバーの情報を手動入力
サーバー: PCのIPアドレス(Macはシステム環境設定->ネットワーク->詳細->TCP/IPでIPをいれる)
ポート: プロキシサーバーの起動時にしていしたもの
認証: なし
あとはiPhoneに証明書を入れるらしい。
メールで送る…などの記事があったりするが、ブラウザで「http://mitm.it」にアクセスすると証明書を簡単にインストールできた。
(アクセスできない場合はここまでの設定がミスっている可能性がある。)
当然Appleを選択。
で、試して見たが….
結果としてSafariではhttp通信は傍受できたが、最近のアプリはApp Transport Securityの影響からかほぼほぼSSL通信。
しかも通信エラーになる。(アップルが賢いのかどうなのか、通信系・WebViewのAPIは通信エラーになるっぽい)
何か抜け道がないか検討中….
2017.10.28追記
通信エラーの正体判明!!
どうやらiOS10.3以降の場合、手動インストールしたプロファイルはデフォルトでは信用されないらしい。
参考: https://support.apple.com/ja-jp/HT204477
SSL 通信に対して証明書の信頼を有効にするには、「設定」>「一般」>「情報」>「証明書信頼設定」の順に選択します。「ルート証明書を全面的に信頼する」で、証明書に対する信頼を有効にします。
ということで設定したら普通にいけました。
よかった!!