VRヘッドセットからの通信をプロキシツールで確認する方法
はじめに
株式会社ステラセキュリティ 取締役CTOの小竹(@tkmru)です。
AndroidベースのVRヘッドセットでは、Android端末と似た方法でMITM(Man In The Middle attack)を行い、プロキシツール上で通信内容を確認できます。脆弱性診断の際には対象のアプリケーションとAPIサーバの通信を確認・編集する必要があり、MITMを行います。また、アプリケーションを開発する際のデバッグにもMITMは有用です。本記事では、ByteDances社製のPICO 4というVRヘッドセット(以下、VR端末)でMITMを行う方法を解説します。
USBデバッグを有効にする
VR端末でプロキシに関する設定を行うには、adbコマンドを多用します。そのため、プロキシの設定を行う前にVR端末で開発者向けオプションを有効にし、USBデバッグを有効にする必要があります。設定アプリを開き、「一般」>「デバイス情報」の順にメニューを操作すると表示される「ソフトウェアバージョン」を連続して7回クリックすると開発者向けオプションを有効にできます。
開発者向けオプションを有効にすると、設定アプリに「開発者」メニューが出現しています。「開発者」メニューを開き、USBデバッグを有効にしてください。また、USB接続をファイル転送に使えるよう設定されていることを確認してください。
プロキシツールのCA証明書をインストール
プロキシツール上でHTTPS通信を見ようと思うと、プロキシツールのCA証明書をVR端末にインストールする必要があります。まず、adbコマンドを用いて、プロキシツールから出力したCA証明書をVR端末内にコピーしてください。Burp Suiteの証明書ファイルをPICO 4にコピーするコマンドは次のようになります。他のプロキシツールをお使いの場合は、ファイル名を適宜変更してください。
$ adb push cacert.der /sdcard/Download/cacert.cer
通常のAndroid端末であれば、端末内の証明書ファイルを何らかのエクスプローラーから選択すれば、証明書のインストーラーが起動しますが、PICO 4の場合は証明書ファイルを選択しても「このファイル形式は現在サポートされていません」と表示され、インストーラーが起動しません。そのため、adbコマンドからインテントを用いて、Androidデフォルトの証明書のインストーラーを起動します。次のコマンドを実行すると、証明書のインストーラーを起動できます。
$ adb shell am start --activity-clear-top -a android.credentials.INSTALL
証明書のインストーラーが起動したら、VR端末内の証明書ファイルを選択してください。
VR端末内の証明書ファイルを選択すると証明書の各種情報を入力できます。証明書の名前を指定し、認証情報を「VPNとアプリ」に使うよう選択してください。OKボタンを押すとCA証明書がインストールされます。
プロキシツールのアドレスを指定する
VR端末から出る通信がプロキシツールを経由するように設定する必要があります。AndroidにはデフォルトでプロキシのIPアドレス、ポートを指定する機能が備わっており、それを用います。GUIの設定アプリから設定する方法とadbコマンドを用いて設定する方法の2つの方法を紹介します。
設定アプリから行う
通常のAndroid端末であれば、設定アプリ内の「ネットワークとインターネット」メニューでプロキシに関する設定を行えます。しかし、PICO 4独自の設定アプリからはプロキシの設定を行うことができません。そのため、adbコマンドからインテントを用いて、Androidデフォルトの設定アプリを起動します。次のコマンドを入力するとAndroidデフォルトの設定アプリが起動します。
$ adb shell am start --activity-clear-top -a android.settings.WIRELESS_SETTINGS
ここからは、通常のAndroidアプリと同様の方法でプロキシを設定できます。接続しているAPの詳細設定よりプロキシのアドレス、ポートを指定できます。
プロキシ設定などのネットワーク設定を変更する際の詳細については、こちらのサイトを参考にしてください。
コマンドで設定する
adbコマンドを用いてプロキシのIPアドレス、ポートを設定することもできます。次のようにadb shell settings put global http_proxy
にIPアドレス、ポートを指定し、実行してください。
$ adb shell settings put global http_proxy 192.168.100.10:8080
プロキシの設定を削除するには次のようにコマンドを実行してください。
$ adb shell settings put global http_proxy :0
設定を正常に行えているか確認
ここまでの設定に成功していれば、プロキシツール上にVR端末からの通信が表示されます。プロキシを正常に設定できているかの確認にはブラウザから何らかのWebサイトへアクセスするのがおすすめです。
Androidアプリに対してMITMを行う場合は、APK内のres/xml/network_security_config.xmlにユーザーが指定したCA証明書を信頼する旨を記述する必要があります。そのため、他の第三者が開発したアプリではパッチを当てない限りMITMを行えません。第三者が開発したアプリをプロキシの設定の確認に使用するには不適です。
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config> <trust-anchors> <certificates src="system" /> <certificates src="user" /> # ユーザーが指定したCA証明書を信頼 </trust-anchors> </base-config> </network-security-config>
信頼できるCA証明書の追加に関する設定の詳細については、こちらのサイトを参考にしてください。
また、アプリ内の特定の証明書でしか通信できないように制限するSSL Pinning(証明書のピン留め)が実装されている可能性もあります。
おわりに
VR端末からの通信をプロキシツールで確認する方法を解説しました。脆弱性診断時にはこのような作業を行い、対象のアプリケーションの通信内容を確認・編集しています。本記事が脆弱性診断に携わるセキュリティエンジニアやVRアプリの開発者の方々の参考になれば幸いです。
※本記事は、株式会社ステラセキュリティが配信しているコンテンツ「Sterra Security Tech Blog」からの転載です。
元記事についてはこちらをご覧ください。