Sterra Security Tech Blog

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

セキュリティ・キャンプ全国大会2023脅威解析クラスで講義を行います

取締役CTOの小竹(aka tkmru)です。

セキュリティ・キャンプ全国大会2023の脅威解析クラスにて「ポートスキャナ自作から始めるペネトレーションテスト入門〜Linux環境で学ぶ攻撃者の思考〜 」という題で講義を行うことになりました。 本記事では、セキュリティ・キャンプ全国大会2023というイベントと、そこで私が行う講義内容の紹介をします。

セキュリティ・キャンプとは

セキュリティ・キャンプは、将来の高度IT人材となり得る優れた人材の発掘と育成を目的としたイベントの総称です。 IT業界で活躍しているエンジニアなど*1が講師になり、学生の皆さんに講義を行います。 講義を聴講できるだけでなく、同世代の同じことに興味がある人たちと交流できるのも良いところです。 参加費は無料で経済産業省が共催しており、主催にIPA独立行政法人情報処理推進機構)もいるので安心して参加できます。

全国各地で2日間程度で開催される地方大会と都内で5日間程度開催される全国大会があり、私が講義を行うのは全国大会の方です。 2020年から2022年にかけてはコロナ禍の影響でオンライン開催でしたが、今年より以前の合宿形式に戻ります。 今年の全国大会は8月7日(月)~8月11日(金)にかけてクロス・ウェーブ府中にて開催されます。 全国大会は、日本国内在住で、日本国内の学校に在籍する13歳以上22歳以下の学生の方が対象です。

www.ipa.go.jp

私も学生時代に参加者として参加していました。 オンライン開催だった2020年と2021年にプロダクトセキュリティトラックにて以前講師を務めましたが、 参加者の皆さんと対面で行う講義はまだ行ったことがないので、直接皆さんにお会いできる今年のセキュキャン*2は楽しみです!

どんな講義をするのか

「ポートスキャナ自作から始めるペネトレーションテスト入門〜Linux環境で学ぶ攻撃者の思考〜 」という題で講義を行います。 講義紹介ページには次のように概要を記載しています。

脆弱性診断やペネトレーションテストで使われる技術のひとつにポートスキャンがあります。 セキュリティエンジニアがネットワークやインフラに対するネットワーク診断やペネトレーションテストを行う際には最初にポートスキャンを行います。 開いているポートがあれば、何かおもしろい情報が返ってこないか確認し、古いミドルウェアが動いていることがわかれば、脆弱性情報を調べて攻撃を試行します。
本講義では、ポートスキャナを自作し、動作原理について理解を深めた後、Dockerコンテナで構成されたLinux環境に対して演習を行い、脆弱性の発見/攻撃手法、端末に侵入後の攻撃者の思考について学びます。侵入後の攻撃者の活動のことを広義にPost-Exploitationと呼びます。

パケットを自由に操作できるようになっておくことや、PoC(Proof of Concept)のコードを素早く実装できることは、ペンテストに必要なスキルです。
例えば、Nmapに実装されていない特殊なプロトコルで通信するソフトウェアの脆弱性を調査したい場合は、プロトコルの仕様に従ったパケットで通信するためのツールを自作する必要があります。このような理由から本講義では、ポートスキャナの自作を行います。

攻撃者の思考を知ることは、マルウェア解析や通信監視業務に従事している人たちも含め、すべてのセキュリティエンジニアが知っておくべき内容であり、 セキュリティエンジニアを目指す初学者にとっても必要不可欠な知識です。 また、セキュリティエンジニアのみならず開発者にとっても大切です。 開発者は日々発見される、OSやライブラリなどの大量の脆弱性の対応を日常的に迫られていますが、 攻撃者の思考を分かっていなければ、何が脅威なのか分からず脆弱性のリスクレベルを評価できません。 脆弱性診断やペネトレーションテストに従事している講師が攻撃手法を解説し、攻撃者側の思考プロセスや、攻撃されないようにするにはどうすればいいのかといった防御側の手法までを解説します。

※本講義では、リバースエンジニアリングは行いません。

ペンテストツールの仕組みや、攻撃者が脆弱性を見つけた後、どのように被害を拡大していくのかについて学べる講義にしようと思っています。 「ツールをただ単に使うだけでは満足できない」「各脆弱性の攻撃方法ではなく、攻撃者の思考を知りたい」という方におすすめです。 ポートスキャナを自作するというアイデアは、私が学生時代に参加したセキュリティ・キャンプキャラバン in 大阪 2014での吉田英二さんによる「パケット工作」という題の講義のオマージュです。

応募お待ちしております!

エントリーの締め切りは5月15日で、応募課題の締め切りが5月22日です。 エントリーしておかないと応募できないので、とりあえずエントリーしておくことをおすすめします! エントリーはこちらからできます。 参加者の皆さんに現地でお会いできるのが楽しみです。 応募お待ちしております!

*1:自分で書くのは恥ずかしいですね...!

*2:セキュキャンはセキュリティ・キャンプの略称です。

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アプリの開発者の方々の参考になれば幸いです。