SST連載・解説記事

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

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

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

はじめに

前回 まで、デスクトップPC向けのWebブラウザでのHTTPプロキシの設定方法を紹介してきました。しかし近年はスマートフォンやタブレット向けのアプリケーション(以下、スマホアプリ)の開発が増え、スマホアプリからWebサーバにリクエストを送信するAPI通信も多く使われるようになりました。

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

原稿執筆時点の動作確認環境:Android 5.1.1

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

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

今回の解説では以下のようなネットワーク環境を想定します。Androidのプロキシ設定では、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

Androidのプロキシ設定方法

1. 設定画面から「Wi-Fi」を選択し、接続中のアクセスポイントを「長押し」

「ネットワークを変更」をタップします。

Androidのプロキシ設定方法_01


Androidのプロキシ設定方法_02

2. ネットワーク設定画面が表示されるので、「詳細説明項目」にチェックを入れます。
(※Androidのバージョンや機種によっては、以下のスクリーンショットのとおりに表示されない可能性があります。その場合、画面をスクロールするなどして、下の方に似たような入力欄が表示されていないか確認してみてください。)

Androidのプロキシ設定方法_03

3. 「プロキシ」の「なし」のところをタップし、プルダウンから「手動」を選択します。

Androidのプロキシ設定方法_04



Androidのプロキシ設定方法_05

4.「プロキシのホスト名」「プロキシポート」の入力欄が表示されます。

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

Androidのプロキシ設定方法_07

以上でHTTPプロキシの設定は完了です。

なお上の図では「HTTPプロキシはブラウザで使用されていますが、他のアプリでは使用できません。」と表示されています。一見、ブラウザ以外のアプリではプロキシが使われないように読み取れます。しかしながら原稿執筆時点のAndroid 5.1.1 で確認したところ、GmailやFacebookなどスマホアプリからの通信をBurpで確認することができました。ただし、スマホアプリの作り方によって、あるいは将来のAndroidのバージョンアップによっては挙動が変わることもありますので、予めご了承ください。

5. 実際にAndroid端末のChromeブラウザで http://example.com/ にアクセスしてみます。以下のようにブラウザ上で正常にサイトのコンテンツが表示され、Burpのほうでも通信内容を確認できれば、HTTPプロキシの設定に成功しています。

Chromeブラウザ画面:

Androidのプロキシ設定方法_Cromeブラウザ画面

Burpの画面:

Androidのプロキシ設定方法_Burpの画面

この状態で https://example.com/ にアクセスしてみると、以下のように証明書のエラー画面が表示され、Burpのプロキシでも通信内容が表示されません。


Androidのプロキシ設定方法_エラー画面

HTTPS通信を見るためには、次の「Androidに証明書をインポートする方法」を参考にBurpの証明書をインポートする必要があります。

6. Proxy設定を解除したい場合は、3.のプルダウンで「なし」を選択し、「保存」をタップしてください。

Androidのプロキシ設定方法_解除方法


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

第二回でBurpがHTTPS通信の内容を確認する仕組みと、その影響として、デフォルトではWebブラウザ上で証明書の検証エラーが発生することを解説しました。また証明書の検証エラーを解消するために、Burpの証明書を信頼できるルート証明書としてインストールする方法も解説しました。

HTTPS通信において証明書を検証する仕組みはAndroidでも同様です 。大きく異なるのが、WebブラウザだけでなくスマホアプリからもHTTPS通信を行う点です。スマホアプリからのHTTPS通信においては、証明書の検証に失敗した場合、通信エラーとなってしまいアプリを使用できません。Webブラウザのように、ユーザ側で危険性を理解した前提でSSL/TLS通信を続行する機能が無いケースがほとんどと思われます。(逆に、証明書の検証に失敗しても何もエラー無くSSL/TLS通信を続行してしまうようなスマホアプリでは、不正なHTTPプロキシがネットワーク経路上に潜んでいた場合に通信内容を盗聴・改ざんされる中間者攻撃に対して脆弱な状態となってしまいます。)

では、ユーザが信頼できるルート証明書をAndroidに追加するにはどうすれば良いでしょうか?古いバージョンのAndroidではroot化という特殊な操作が必要でした。しかし最近のAndroidでは、特殊な操作無しにユーザ自身で追加することが可能となっています。以下にそのやり方を紹介します。

1. 第二回の「Burpの証明書をインポートする」を参考にBurpの証明書をダウンロードし、証明書ファイルの拡張子を「.crt」に変更します。
AndroidをPCと接続し、内部ストレージに証明書ファイルをコピーします。

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


2. 続いて設定の「セキュリティ」→「認証情報ストレージ」の「ストレージからのインストール」をタップします。
なお、ユーザによる証明書のインストールではパスコードなどのセキュリティロックの設定が要求されますので、予め設定しておいてください。

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

初回は以下の様な「次から開く:」画面が表示されます。「内部ストレージ」をタップしてください。


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

内部ストレージ内のフォルダ・ファイル一覧が表示されますので、PCからコピーした証明書ファイルをタップします。


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

以下のような「証明書の名前を指定する」画面が表示されます。


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

「証明書名:」には後で区別できるような分かりやすい名前を英数で入力します。今回は「burp」と入力しました。
「認証情報の使用:」では「WiFi」を選択し、「OK」をタップすると証明書がインストールされます。


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

4. インストールした証明書は、設定の「セキュリティ」→「信頼できる認証情報」→「ユーザー」タブで確認することができます。

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

証明書をタップすると、証明書の内容の詳細が表示されます。


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

5. 実際にAndroid端末のChromeブラウザで https://example.com/ にアクセスしてみます。
以下のようにブラウザ上で正常にサイトのコンテンツが表示され、Burpのほうでも通信内容を確認できれば、Burpの証明書のインストールに成功しています。

Chromeブラウザ画面:

Androidに証明書をインポートする方法_Chromeブラウザ画面


Burpの画面:

Androidに証明書をインポートする方法_Burpの画面

6. インストールした証明書を削除するには、
設定の「セキュリティ」

「信頼できる認証情報」

「ユーザー」タブを開き、削除したい証明書をタップし、証明書内容を表示するウインドウの下の方にある「削除」ボタンをタップします。

Androidに証明書をインポートする方法_削除画面

まとめ


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

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

次回はスマートフォンやタブレットでも大きなシェアを持つiOSでのプロキシ設定方法について紹介します。次回もよろしくお願いいたします。


(2015年10月2日更新)

今までのコラム

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

Page Top