OWASP ZAP で Android の Web通信をインターセプトする方法
※当サイトにはプロモーションが含まれています。
OWASP ZAP で Android の Web通信をインターセプトする方法は、Cloud Security - salesforce.com に書いてある通りなのですが、自分なりに追記しておきたかったのでここに書いておきます。
1. 前提とする環境
- Android 7.0
- OWASP ZAP 2.7.0
- Windows 10
2. ZAP で Android の Web通信をインターセプトするための手順
1. ZAP のルート証明書を Android にインポートする
(1) ZAP の [Options] を開き、[Dynamic SSL Certificates] を選択します。
以下の画面になるので、 [Save] ボタンを押して、ZAPの発行しているルート証明書を任意のパスに保存します。
※ ルート証明書が作成されていない場合は、[Generate] ボタンを押して作成してください。

ZAP のルート証明書を保存する
(2) 保存したルート証明書ファイルを、Android に送ります。
どんな方法でもよいですが、ここでは Gmail でメールに添付して送ります。
(3) Android 側で添付ファイルを開きます。
Android 側 の Gmail で メールを開くと以下のように添付ファイルが表示されますので、添付ファイルの部分をタップします。

メールに添付されたルート証明書ファイル
(4) 以下の項目を入力(または選択)して、[OK]ボタンをタップします。
- 証明署名: 適当に入力します。
- 認証情報: 「VPNとアプリ」を選択します(「Wifi」という選択肢もありますが、そちらではダメです)。

証明書インストーラー
ちなみに、ここでインポートした証明書は、Android の [設定] - [詳細設定] - [セキュリティ] にある以下の2つの項目から確認することができます。ここから削除もできます。
![[設定] - [詳細設定] - [セキュリティ]](/_astro/20190307-012a.min_.B53NohBw_Z1nhd3w.webp)
[設定] - [詳細設定] - [セキュリティ]
2. ZAP のローカルプロキシ設定
ZAP の [Options] を開き、[Local Proxies] を選択します。
以下を入力します。
- Address: ZAP を動かしている PC のIPアドレスをセットします(Android から接続できるIPアドレス)。
- Port: 他のアプリケーションと被らないポート番号をセットします。
入力したら、[OK]ボタンを押して設定を保存します。

ローカルプロキシ設定
3. Android 側のプロキシ設定
(1) [設定] - [Wifi] を開きます。
(2) 現在利用中の接続を長押しします。
以下のように [ネットワークを変更] という項目が表示されますのでタップします。
![[ネットワークを変更]をタップ](/_astro/20190307-005a.min_.DG3tf8_1_Rpd8A.webp)
[ネットワークを変更]をタップ
(3) [詳細オプションを表示する] にチェックを入れ、[プロキシ] をタップします。
![[プロキシ] をタップします](/_astro/20190307-007a.min_.Dg0HrtMf_Z16YNOD.webp)
[プロキシ] をタップします
(4) [手動] を選択します。
![[手動] を選択します](/_astro/20190307-008a.min_.B7xSygVx_4sSjh.webp)
[手動] を選択します
(5) ホスト名(IPアドレス) とポート番号を入力します。
ZAP のローカルプロキシ設定でセットした値を入力して、[保存]をタップします。

ホスト名(IPアドレス) とポート番号
設定は以上です。
3. Android のブラウザで Webアクセスしてみる
1. ZAP にアクセスデータが表示されるか確認します。
Android 上のブラウザアプリで Webサイトにアクセスしてみます。
ブラウザアプリとしては、Chrome を使います。Chrome であれば Android のプロキシ設定をそのまま使ってくれるのでラクです。Firefox はプロキシ設定を独自に持っているためか、すんなりいきません。
それでは、Android の Chrome ブラウザで https://google.com/ にアクセスしてみます。
ZAP を経由してアクセスできていれば、ZAP 上にアクセスデータ(リクエストとレスポンス)が表示されていくはずです。

ZAPでインターセプト成功
2. Chrome が使っているサーバー証明書を確認します。
この時、ZAP は動的に google.com のサーバー証明書を生成して Chrome ブラウザに渡しているはずなので、それを確認しておきます。 ※ このサーバー証明書は、本記事で最初にインポートしたルート証明書に含まれた公開鍵とペアになっている秘密鍵(ZAP が持っています)で署名されているはずです。
Chrome のアドレスバーの緑の鍵アイコンをタップします。

緑の鍵アイコンをタップ
[詳細] をタップします。
![[詳細] をタップ](/_astro/20190307-017a.min_.C4n93SwD_Z1rcEp.webp)
[詳細] をタップ
以下のように、「このウェブサイトの証明書が OWASP Zed Attack Proxy Root CA 発行のものであると確認されました」と表示されれば問題ありません。

証明書の発行元を確認
[証明書情報] をタップすれば、証明書の内容を細かく確認することができます。
以下がその画面ですが、「発行元」が OWASP Zed Attack Proxy Root CA になっています。
「発行先」の「一般名(CN)」はもちろん www.google.com になっていますが、「組織(O)」や「組織単位(OU)」は ZAP の名前に変えられているのが分かります。

証明書の詳細を確認
4. その他のメモ
- Android の Firefox でも少し試してみましたが、うまくいきませんでした。Firefox は 証明書管理やプロキシ設定を独自に持っている(?)ものの、そのあたりを設定画面から簡単に操作できないようで困ってしまいました。
広告