SST連載・解説記事

  1. HOMEHOME
  2. SSTコラムSSTコラム
  3. SSTなるほど!コーナー
  4. 05 iOSでHTTPプロキシを使ってみよう!

(2016年2月26日公開, 2018年4月2日更新)

iOSでHTTPプロキシを使ってみよう!

 HTTPプロキシ, HTTP通信, HTTPS通信, Burp, 証明書, インポート, リクエスト, 改ざん, HTTP, レスポンス, iOS, 使い方, 解説, Webセキュリティ ,スマホアプリ

はじめに

前回 はAndroidでのHTTPプロキシの設定方法を紹介してきました。
今回はiOSでBurp Suite Free Edition(原稿執筆時点でv1.6.32:以下、Burp)をHTTPプロキシとして設定する方法を紹介します。スマホアプリの開発時に実際のHTTP/HTTPS通信を確認することができるようになりますので、開発やデバッグ作業の効率アップにも大きな効果を期待できます。

原稿執筆時点の動作確認環境:iOS 9.2.1
2018-04-02での確認環境:iOS 11

※スクリーンショット中の緑色の枠は、強調したい領域を示すために描画した枠になります。iOSの画面デザインの一部ではありません。
※iOSのバージョンや機種によっては設定画面や機能などが異なり、本記事で解説している通りの手順では設定できない場合があります。予めご了承ください。
※スマホアプリの作りによっては、本記事で紹介した手順ではHTTPプロキシを経由しないケースや、正常にHTTP通信できなくなるケースがあります。予めご了承ください。

ネットワーク環境について

今回の解説では以下のようなネットワーク環境を想定します。
iOSのプロキシ設定では、HTTPプロキシツールを起動したPCのIPアドレスをスマートフォン用のHTTPプロキシとして設定しますので、予めipconfigコマンドやネットワークの設定・管理画面などから確認し、控えておいてください。
また、PCは外部からのHTTPリクエストを受け付けることになります。ファイアウォールソフトなどで、HTTPプロキシのポート番号に対する外部からのTCP通信の受信を許可しておいてください。

ネットワーク環境について_01

以下の例では、ipconfigの実行結果によるとPCのIPアドレスは 192.168.1.20 です。(IPアドレスが割り当てられたアダプタが複数存在する場合、スマートフォンからアクセスできるアダプタがどれか、いくつか試行錯誤してみてください)
またBurpのProxyタブのOptionsタブからHTTPプロキシのポート番号は8080番です。この2つの情報は後でスマートフォンのプロキシ設定で入力しますので、メモなどに控えておいてください。

(コマンドプロンプトを起動し、ipconfigを実行)
>ipconfig

Windows IP 構成

(省略)
Wireless LAN adapter ワイヤレス ネットワーク接続:

(省略)
IPv4 アドレス . . . . . . . . . . :  192.168.1.20
(省略)

ネットワーク環境について_02

127.0.0.1:8080 と表示されている場合は、 Edit>Bindingタブ>Bind to address を
「All interfaces」に変更し、OKをクリックしてください。

例:
プロキシのIPアドレス 192.168.1.20
プロキシのポート番号 8080

iOSのプロキシ設定方法

1. iOSの設定画面を起動し、「Wi-Fi」をタップします。

iOSのプロキシ設定方法_01

2. 現在接続中のアクセスポイントの詳細を開きます。

iOSのプロキシ設定方法_02

3. アクセスポイントの詳細画面をスクロールしていき、「HTTPプロキシ」を「手動」に切り替えます。

iOSのプロキシ設定方法_03

4. ここで「ネットワーク環境について」でメモしておいたプロキシのIPアドレスとポート番号を入力します。
今回の例では、IPアドレスは 192.168.1.20 で、ポート番号は8080番でしたので、以下のように入力し、「保存」を実行します。

iOSのプロキシ設定方法_04


5. 入力が終われば詳細画面上部の「Wi-Fi」をタップして戻ります。これでHTTPプロキシ設定が有効になります。


iOSのプロキシ設定方法_05

Safariなどで http://example.com にアクセスして正常にコンテンツが表示され、BurpのプロキシにもHTTP通信が記録されることを確認してください。
またこの状態では前回のAndroidの時と同様、HTTPSのURLにアクセスするとエラー画面が表示されます。次の「iOSに証明書をインポートする方法」を参考にBurpの証明書をインポートする必要があります。

iOSに証明書をインポートする方法

iOSにBurpの証明書をインポートすることで、Burpをプロキシに設定した状態で正常にHTTPS通信を行えるようになります。
証明書のインポートが必要な理由については、第四回の「Androidに証明書をインポートする方法」を参照してください。

第二回目を参考にBurpの証明書をダウンロードし、証明書ファイルの拡張子を「.crt」に変更します。

1. 証明書ファイルをiOS端末に転送しますが、今回はメールで添付して送りました。iOSのメーラで、受信した証明書(.crt)ファイルをタップします。


iOSに証明書をインポートする方法_01

2. 証明書の内容が表示されますので、「インストール」をタップします。


なお、証明書のインポートではiOS端末にパスコードなどのセキュリティロックの設定が要求されますので、予め設定しておいてください。


iOSのプロキシ設定方法_イメージ画像

3. (iOS 11の場合)設定の「情報」→「証明書信頼設定」を開き、「ルート証明書を全面的に信頼する」で「PortSwigger CA」をONにします(2018-04-02追記)。

iOSの証明書信頼設定_イメージ画像

インストールした証明書(プロファイル)は、設定の「一般」→「プロファイルとデバイス管理」をタップすると確認することができます。

iOSに証明書をインポートする方法_02


iOSに証明書をインポートする方法_03


証明書をタップすると内容を確認できます。また、証明書を削除することも可能です。



SSL Pass ThroughtとiTunes課金処理

2018-04-02追記

プロキシを設定していると、課金処理などでiTunesとの通信に失敗することがあります。 アプリケーションや通信ライブラリ側で、HTTPS通信でサーバ側から提示された証明書が予め期待されたものかチェックしている場合にこの問題が発生します。 なぜなら、例えばBurpをプロキシとして設定していると、HTTPS通信での証明書がBurpで生成されたものになり、アプリケーションやライブラリ側で期待した証明書(例: AppleやGoogleなどの課金処理用サーバ)とは異なるからです。
参考 : 第二回 BurpでHTTPS通信を見ることができる仕組み

ここではBurp側の機能を使い、単純にHTTPS通信を素通し(Pass Through)させてみます。 Pass Through 設定の対象とHTTPS通信をする際は、BurpがHTTPS通信を素通しするようになります。 そのため証明書も本来のサーバ側の証明書が提示されるようになるため、アプリケーションやライブラリ側での証明書チェックをパスするようになります。

その代り、設定したサーバとのHTTPS通信が見れなくなる点に注意してください。

Burp の「Proxy」タブ→「Options」タブ→「SSL Pass Through」で素通しする先のホスト名とポート番号を追加します。

以下は実際にとあるアプリを調査したときの設定例です。正規表現を使って apple.com ドメインのサーバを素通しさせています。対象アプリではその他にも Facebook ログインや Google ログイン機能を提供していましたが、これらの通信も特に詳細を追う必要は無かったため、素通し対象として追加しています。


BurpのSSL_Pass_Through_設定例_イメージ画像

もしBurpを使ってHTTPS通信をどうしても見たい場合は、証明書チェックのコードを無効化する必要があります。 アプリケーション側のプログラマが自分でそのようなコードを書いているのであれば、デバッグ時に一時的に無効化することが可能と思われます。 しかしiOS本体や使用しているライブラリがチェックしているのであれば、無効化は難しいかもしれません。 iOSや使用しているライブラリのドキュメントを調べてみてください。


まとめ


今回説明した内容は以下の2つになります。iOSでもHTTPプロキシを使って、ブラウザやスマホアプリのHTTP通信を確認することができるようになりました。

  • iOSのHTTPプロキシ設定方法
  • iOSに証明書をインポートする方法

ここまでの連載でBurpを使ったHTTPプロキシの設定方法を一通り紹介してきました。
これにより、自分たちが開発するWebアプリケーションについてどんなHTTP通信がやりとりされているのか確認できるようになり、また、診断報告書に記載されている再現手順を再現できるようになりました。
次回はもう一歩進んで、セキュアなWebアプリケーションを開発するための注意点やポイントなどを解説している、無償で利用できる各種ガイドラインや参考資料を紹介したいと思います。
次回もよろしくお願いいたします。

今までのコラム

Webセキュリティをざっくり理解するための3つのMAP

Page Top