連載 [第3回] :
  脆弱性診断の現場から

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

2024年10月4日(金)
小竹 泰一
第3回の今回は、ByteDances社製のPICO 4というVRヘッドセットでMITMを行う方法を解説します。

はじめに

株式会社ステラセキュリティ 取締役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接続をファイル転送に使えるよう設定されていることを確認してください。

スクリーンショットは/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デフォルトのネットワーク設定画面

プロキシ設定などのネットワーク設定を変更する際の詳細については、こちらのサイトを参考にしてください。

コマンドで設定する

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」からの転載です。
元記事についてはこちらをご覧ください。

株式会社ステラセキュリティ 取締役副社長 CTO
大学卒業後、株式会社ディー・エヌ・エーに入社し、セキュリティエンジニアとして活躍。その後、株式会社アカツキに1人目のセキュリティエンジニアとして入社し、脆弱性診断内製化、セキュリティチーム組成に尽力。 著書に『ポートスキャナ自作ではじめるペネトレーションテスト』『マスタリングGhidra』(いずれもオライリー・ジャパン)、『リバースエンジニアリングツールGhidra実践ガイド』(マイナビ出版)

連載バックナンバー

セキュリティ技術解説
第3回

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

2024/10/4
第3回の今回は、ByteDances社製のPICO 4というVRヘッドセットでMITMを行う方法を解説します。
セキュリティ技術解説
第2回

Nmapの日本語ドキュメントを更新した話&その方法の解説

2024/8/23
第2回の今回は、Nmapの日本語ドキュメントの問題点と、そのコントリビュート方法について紹介します。
セキュリティ技術解説
第1回

32ビットのARM環境のみで有効なディスアセンブルを妨害するテクニック

2024/7/19
第1回の今回は、ARM32のみで有効なアンチディスアセンブルのテクニックを紹介します。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています