概要
Webアプリケーション脆弱性診断するときに困ったので、備忘録としてまとめました。
- Android 8.0 で動くアプリについて、 Windows 10 Pro + Burp Suite Pro で HTTPS 通信を取得する方法です。
- Mac をお使いの方は適宜読み替えてください。
- 対象の Android 端末の root 化が必要なのと、システムディレクトリ触るので注意が必要です。
- ご利用される際は自己責任でお願いします。
環境
- Nexus 5X(Android 8.0)
- root 化済み
- Windows 10 Pro バージョン1803 (OSビルド 17134.407)
- OpenSSL Win64 v1.1.1b
- Android Debug Bridge version 1.0.40 Version 4986621
- Burp Suite Pro 1.7.37
- Communityエディションでもいけると思いますが未検証…
通信のイメージ
Android <--無線LAN--> Win10(Burp:8080) <--無線LAN--> サーバー
前提
Burpの設定をしておきます。
Android端末の通信をプロキシできるようにします。
- Win10 を 無線LANに接続します。
- 無線LANの接続方式をプライベートネットワークにしておきます。
- 信頼できないネットワークでやらないようにしてください。
- 無線LANの接続方式をプライベートネットワークにしておきます。
- 対象の Android 端末も Win10 と同じ無線LANに接続します。
- 接続する際、Proxyを設定します。手動設定でWin10のIPアドレスと8080ポートを指定します。
- Burp を起動して、
Proxy > Options > Proxy Listeners
と進み、デフォルトの8080ポートの設定を選択してEditします。- Proxy設定を変更していきます。
-
Binding > Binding to address:
のラジオボタンでAll interfaces
にチェックをいれます。- 信頼できないネットワークでやらないようにしてください。
-
Request handling > Invisible proxy support allows non-proxy-aware clients to connect directory to the listner > Support invisible proxying (enable only if needed)
にチェックをいれます。
-
- 設定後 OK し、 Proxy 設定を反映させます。
- Proxy設定を変更していきます。
これだけだと、https接続時に証明書エラーがおきるので、次のステップで証明書エラーが起きないようにします。
証明書の設定手順
- Burp Suite の
Proxy > Options > Proxy Listeners
のImport/export CA certificate
をクリックします。 -
Export > Certificate in DER format
にチェックを入れてNext
をクリックします。 - 任意のローカルフォルダを設定して、任意のファイル名で保存します。
- 例)
c:\hoge.der
- 例)
- PowerShellなどを用いて、OpenSSLを使って、保存した hoge.der をpem形式に変換します。
PS C:\> openssl x509 -inform DER -in hoge.der -out hoge.pem
- 作成したpemファイルの
subject_hash_old
の1行目の値を取ります(下記だと9a5ba575)
PS C:\> openssl x509 -inform PEM -subject_hash_old -in hoge.pem
9a5ba575
-----BEGIN CERTIFICATE-----
~略~
-----END CERTIFICATE-----
- hoge.pem のファイル名を変更します。(hash + 拡張子が0)
- 例)9a5ba575 の場合は 9a5ba575.0 にファイル名を変更
PS C:\> ren hoge.pem 9a5ba575.0
- adb を使って、Android端末に作成したファイルを保存します。
PS C:\> adb push 9a5ba575.0 /sdcard/
- adb shell を使ってAndroid端末を操作します。
PS C:\> adb shell
- su を叩いて superuser になります。
- もし Android 端末側で確認ダイアログが出たら許可します。
$ su
- 端末に保存した証明書ファイルをシステムにマウントします。
# mount -o rw,remount /system
# mv /sdcard/9a5ba575.0 /system/etc/security/cacerts/
# chmod 644 /system/etc/security/cacerts/9a5ba575.0
- 端末を再起動します。
- 再起動後、端末の設定内のセキュリティ項目で、「信頼できる認証情報」を確認して、
PortSwigger CA
が設定されていることを確認します。
結果、 Burp Suite で通信が取れようになっていると思います。
参考サイト
WindowsにOpenSSLをインストールして証明書を取り扱う(基本編):Tech TIPS - @IT
Configuring Burp Suite with Android Nougat
AndroidのプレインストールされたCAにCAを追加する - 試運転ブログ