Sterra Security Tech Blog

株式会社ステラセキュリティの公式技術ブログです

VRヘッドセットからの通信をプロキシツールで確認する方法

取締役CTOの小竹(aka 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接続をファイル転送に使えるよう設定されていることを確認してください。

スクリーンショットは/sdcard/Pictures/Screenshots/に保存される

プロキシツールの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の詳細設定よりプロキシのアドレス、ポートを指定できます。

インテントから起動されるAndroidデフォルトのネットワーク設定画面

support.google.com

コマンドで設定する

adbコマンドを用いてプロキシのIPアドレス、ポートを設定することもできます。 次のようにadb shell settings put global http_proxyIPアドレス、ポートを指定し、実行してください。

$ 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>

developer.android.com

また、アプリ内の特定の証明書でしか通信できないように制限するSSL Pinning(証明書のピン留め)が実装されている可能性もあります。

おわりに

VR端末からの通信をプロキシツールで確認する方法を解説しました。 脆弱性診断時にはこのような作業を行い、対象のアプリケーションの通信内容を確認・編集しています。 当社はAndroidアプリの脆弱性診断に加えて本記事のようなVR端末のアプリに対する脆弱性診断も実施しております。 詳しくはフォームよりお問い合わせください。 本記事が脆弱性診断に携わるセキュリティエンジニアやVRアプリの開発者の方々の参考になれば幸いです。