🥚

AVD(Android 11)でOWASP ZAPの証明書をインストールする

2021/09/12に公開

はじめに

想定環境

  • Android Virtual Device
    • Android Studioを準備して、AVD Managerから作成
    • Android 11
  • OWASP ZAP 2.10.0

作業手順

  1. AVDを予め作成しておきます。
    • 作成方法は、こちらを参考ください。
    • FirdaでAndroid APKをHookingする
    • AVDを起動後、「セキュリティ > 画面ロック」から、ロック解除用のPINコードを設定しておきます。
  2. OWASP ZAPを開き、「オプション > ダイナミックSSL証明書」へ移動し、OWASP ZAPのルートCA証明書を出力します。
  3. 下記のコマンドを実行して、AVDを実行します。
# $ANDROID_HOME="/Users/<user-name>/Library/Android/sdk
$ANDROID_HOME/emulator/emulator -avd Pixel_4a
  • emulatorをパスに通して、直接emulatorコマンドを実行してもOKです。

    export PATH=$ANDROID_HOME/emulator:$PATH
    
    • パスを通す場合、/tools配下のemulatorではなく、上記のように/emulator配下のemulatorにします。
  1. 起動したAVDにて、「設定 > セキュリティ > 暗号化と認証情報 > 信頼できる認証情報」を表示して、「OWASP Root CA」がシステムタブに表示されていないことを確認します。

    5.「設定 > ネットワークとインターネット > Wi-Fi」を開き、現在接続しているWi-Fiの歯車アイコンをタップします。
  • 鉛筆アイコンをタップして詳細設定画面を開き、「詳細設定」を開きます。
  • 下記の設定をし、「保存」ボタンをタップします。
    • プロキシ:手動
    • プロキシのホスト名:10.0.2.2
    • プロキシポート:18080
  1. OWASP ZAPの「オプション > ローカルプロキシ」を開き、下記の設定をし、「保存」ボタンをクリックする
    • アドレス:localhost
    • ポート:18080
  2. AVD上でブラウザを開き、https://www.google.co.jpへアクセスします。
  • AVD上では、下記の画像のように、証明書エラー画面が表示されます。
  • OWASP ZAP上では、http接続の通信ログが表示されます。
  1. 下記のコマンドを実行して、証明書の発行者のハッシュ値を取得します。
openssl x509 -inform PEM -subject_hash_old -in owasp_zap_root_ca.cer | head -1
  1. 8.で取得したハッシュ値を使用して、証明書ファイル名を変更します。
cp owasp_zap_root_ca.cer <hash>.0
  1. 1度AVDを終了し、下記のコマンドを実行して、再度実行します。
$ANDROID_HOME/emulator/emulator -avd Pixel_4a -writable-system
  1. 下記のコマンドを実行して、AVDの/system配下へ書き込みできるようにします。
adb root
adb shell avbctl disable-verification
adb disable-verity
adb reboot
adb root && adb remount
  • 下記のコマンドを実行して、/system配下が書き込みできるようになっているかを確認します。

    adb shell mount | grep system
    /dev/block/dm-1 on /system_ext type ext4 (ro,seclabel,relatime)
    overlay on /system_ext type overlay (rw,seclabel,noatime,lowerdir=/system_ext,upperdir=/mnt/scratch/overlay/system_ext/upper,workdir=/mnt/scratch/overlay/system_ext/work,override_creds=off)
    overlay on /system type overlay (rw,seclabel,noatime,lowerdir=/system,upperdir=/mnt/scratch/overlay/system/upper,workdir=/mnt/scratch/overlay/system/work,override_creds=off)
    
  1. 9.で作成した証明書をAVDへ転送します。
adb push <hash>.0 /system/etc/security/cacerts
  1. 下記のコマンドを実行して、転送した証明書ファイルの権限を変更します。
adb shell "chmod 644 /system/etc/security/cacerts/<hash>.0"
  1. 下記のコマンドを実行して、AVDを再起動します。
adb reboot
  • 再起動時は、writable-system`オプションが有効となっているため、1度AVDを終了して、3.のコマンドを再度実行します。
    • ※ 3.のコマンドを実行した結果、「OWASP Root CA」証明書が表示されない場合、10.のコマンドを実行して確認します。
  1. 起動したAVDにて、「設定 > セキュリティ > 暗号化と認証情報 > 信頼できる認証情報」を表示して、「OWASP Root CA」がシステムタブに表示されることを確認します。
  2. 6.と同様にブラウザを開き、OWASP ZAPで通信を取得できているかを確認します。

補足

emulatorコマンド実行時、PANIC: Missing emulator engine program for 'x86' CPUが出た場合

  • Android SDKのtools系のパスがemulatorより早くが読み込まれると発生します。
    • → パスや環境変数の順番を変更し、emulatorのパスがtoolsより上になるように記載します。

      export ANDROID_HOME=/Users/<username>/Library/Android/sdk
      # emulatorコマンドのパス
      export PATH=$ANDROID_HOME/emulator:$PATH
      # adbコマンドなどのパス
      export PATH=$ANDROID_HOME/platform-tools:$PATH
      

参考

Discussion