Compact
true
担当領域:セキュリティ技術センター リスクハンティングチーム
主にペネトレーションテスト、脆弱性診断などを担当し、NECグループのセキュア開発・運用を推進。最近はペネトレーションテスト能力を向上する目的でHack The Boxに取り組み中。

NECサイバーセキュリティ戦略統括部セキュリティ技術センターの谷口です。
今回は、モバイルアプリケーション解析ツールの「MobSF(Mobile-Security-Framework-MobSF)」[1]を用いた動的解析についてご紹介いたします。

MobSF(Mobile-Security-Framework-MobSF)とは

「MobSF」は、Ajin Abraham氏が作成したモバイルアプリケーション用のセキュリティ診断プラットフォームです。OSはAndroid、iOS、Windows Mobileをサポートしており、また、静的解析と動的解析に対応しています。今回はAndoirdアプリの動的解析手法について紹介いたします。静的解析については、「MobSFを用いたiOSアプリのソースコード解析」[2]、「モバイルアプリの脆弱性診断 ~MobSF(Mobile Security Framework)でAndroidアプリを診断してみた~」[3]、「モバイルアプリの脆弱性診断 ~MobSF(Mobile Security Framework)でAndroidアプリを診断してみた 2~」[4]が参考になります。

動的解析機能の特徴は、完全自動化ではなく半自動で解析する点になります。アプリ内にあるユーザー名、パスワードの入力方法などのロジックをMobSFが自動で探索できないため、アプリ内の解析したい画面を手動で操作しながら解析する必要があります。

使用環境

次の環境を使用しました。

Android Studioの準備

「Android Studio」[5]をインストールします。「Android Studio」のインストール方法やシステム要件は「Install Android Studio」[6]をご参考下さい。
Android Studioをインストールして起動したら、図1のように画面右上の「Device manager」を開き、「Create device」を選択します。

(図1)仮想デバイスの作成画面
(図1)仮想デバイスの作成画面
100

図2のようにエミュレーターとして使用したい仮想デバイスの選択を行います。「MobSF」では仮想デバイスとして次のスペックを満たす必要があります。

MobSFのドキュメント「MobSF/docs」[7]によるとAndroid 9.0、API28のデバイスが推奨されていたので、それを満たす「Nexus One」デバイスを選択し「Next」を押下し、図3の画面でデバイスイメージをダウンロードします。

(図2)仮想デバイスの選択画面
(図2)仮想デバイスの選択画面
100
(図3)仮想デバイスのダウンロード画面
(図3)仮想デバイスのダウンロード画面
100

デバイスイメージのダウンロードが完了したら、図4の画面でFinishを押下しAndroid Studioを終了します。

(図4)仮想デバイスのインストール完了画面
(図4)仮想デバイスのインストール完了画面
100

ダウンロードした仮想デバイスがインストールされているか、Windows11上のコマンドプロンプトで次のコマンドを入力して確認します。

> emulator -list-avds
Nexus_One_API_28

反映されたことが確認出来たら、次のコマンドを入力して仮想デバイスを起動します。起動したら図5のように「Extended Controls」から「Help」に記載されているデバイスのシリアルナンバーをメモします。このシリアルナンバーはMobSFを起動する際に指定する必要があります。

> emulator -avd Nexus_One_API_28 -writable-system -no-snapshot

(図5)仮想デバイスのシリアルナンバー表示画面
(図5)仮想デバイスのシリアルナンバー表示画面
100

adbコマンドで解析したいapkを仮想デバイスにインストールします。今回は以下のコマンドでセキュリティ評価用の脆弱に構築された「diva-android」[8]アプリをインストールました。

> adb install DivaApplication.apk
Performing Streamed Install
Success

Androidの環境準備は以上になります。

MobSFの準備

「MobSF」は「Docker Hub」でコンテナイメージが公開されているので[9]、そのイメージを利用してセットアップします。Dockerを起動する際に-eオプションを用いて、仮想デバイス構築の際にメモしておいたデバイスのシリアルナンバーをMOBSF_ANALYZER_IDENTIFIERに指定し、実行します。

> docker pull opensecurity/mobile-security-framework-mobsf:latest
> docker run -it -e MOBSF_ANALYZER_IDENTIFIER=emulator-5554 -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest

Webブラウザでhttp://localhost:8000/にアクセスし、図6のように「DYNAMIC ANALYZER」→「Android Dynamic Analyzer」を選択して、先ほど仮想デバイスにインストールしたapkが画面に表示されることが確認できます。(図7)

(図6)MobSF動的解析プラットフォーム選択画面
(図6)MobSF動的解析プラットフォーム選択画面
100
(図7)MobSF動的解析準備画面
(図7)MobSF動的解析準備画面
100

図7の右上にある、「MobSFy Android Runtime」を押下して実行すると、解析に必要なパッケージである「Frida」[10]や「MobSF」のAgentが仮想デバイスにインストールされるので、実行しておきます。実行が完了すると、図8のようにインストールが成功した実行結果が出力されます。

(図8)MobSFy実行結果
(図8)MobSFy実行結果
100

MobSFの準備は以上になります。

MobSFの動的解析手法

「Start Dynamic Analysis」を押下して開始すると、解析用の画面に切り替わり、様々なテスト項目やオプションが搭載されていることが確認できます。また、図9の中央には「MobSF」のアクティビティログとエラーログが出力されており、リアルタイムでMobSFの解析動作とエラー状況を確認することが可能です。
Fridaの機能は次の項目がデフォルトで有効化されています。

その他にもオプションで、ロードされたclassの列挙や文字列のキャプチャなどが使用できます。

(図9)MobSF動的解析画面
(図9)MobSF動的解析画面
100

図9の上部にある「MobSF」の動的解析項目の機能は次の通りです。

[項目]
1
1
[機能]
1
1
Show Screen
1
1
こちらを有効にするとエミュレーター本体を操作せずに、MobSFの画面内で操作することができます。2、3秒ほどのラグがあります。
1
1
Remove Root CA
1
1
Root CA証明書の削除、再インストールができます。
1
1
Unset HTTP(S) Proxy
1
1
HTTPS ProxyのON/OFFができます。
1
1
TLS/SSL Security Tester
1
1
HTTPプロトコル経由でネットワーク接続を実行する場合のみ実行できます。アプリに対して、証明書エラーやTLS/SSLのエラーをバイパスしHTTPS接続を許可できるか、公開鍵のピンニングがされているかなど複数のテストを実行できます。
1
1
Get Dependencies
1
1
アプリの依存関係を収集できます。
1
1
Take a Screenshot
1
1
仮想デバイスで表示している画面のスクリーンショットを撮ることができます。
1
1
Logcat Stream
1
1
仮想デバイスのログをリアルタイムで出力、収集できます。
1
1
Live API Monitor
1
1
アプリと通信しているAPIを10秒おきに表示、収集できます。
1
1
Generate Report
1
1
動的解析を終了して、収集したデータの解析とレポートを出力します。
1
1

解析結果の例

今回は入力フォームの機能に焦点を当てて、アプリで入力した機密情報がローカルストレージに格納されてしまう問題を検出できるか確認します。
図10のようなアプリの入力フォーム画面において、適当なユーザー名やパスワードなどの文字列を入力していきます。

(図10)仮想デバイスでのアプリ入力画面
(図10)仮想デバイスでのアプリ入力画面
25

入力し終えたら「Generate Report」を選択し、解析を終了して解析結果の出力を待ちます。今回は10秒ほどで解析結果が出力されました。

図11のように解析結果が出力され、動的解析画面で実施した複数のログや検出事項がまとめられています。

(図11)MobSF 動的解析結果画面
(図11)MobSF 動的解析結果画面
100

図12のように左メニューの「File Analysis」に移ると、アプリ操作中に使用、更新されたデータベースやxmlが記録されているので、それぞれファイルのの内容を確認します。

(図12)MobSFのFile Analysis項目
(図12)MobSFのFile Analysis項目
100

図13、図14のように、入力したユーザー名やパスワードが内部ストレージに残存していることが確認できました。

(図13)ローカルストレージに保存されたデータベースの中身
(図13)ローカルストレージに保存されたデータベースの中身
100
(図14)ローカルストレージに保存されたxmlの中身
(図14)ローカルストレージに保存されたxmlの中身
100

今回検出できた、ローカルストレージに機微情報が残るような問題を避けるためには、ローカルストレージに資格情報などは保存せずに、メモリやKeyChainを使う方法が対策して挙げられます。

所感・まとめ

手動操作は必要なものの、見やすいUIで直感的に操作、解析できる点が良かったです。また、Webアプリ1つで解析結果をまとめて収集、分析してくれるため検出箇所やログなどが見直しやすく、あまり動的解析の経験がない方でも使いやすいのではないかと感じました。

参考文献

[1] 「MobSF(Mobile-Security-Framework-MobSF)」
(https://github.com/MobSF/Mobile-Security-Framework-MobSF)
[2] 「MobSFを用いたiOSアプリのソースコード解析」
(https://group.nec/jp/ja/solutions/cybersecurity/blog/221021)
[3] 「モバイルアプリの脆弱性診断 ~MobSF(Mobile Security Framework)でAndroidアプリを診断してみた~」
(https://www.secure-iv.co.jp/blog/5153)
[4] 「モバイルアプリの脆弱性診断 ~MobSF(Mobile Security Framework)でAndroidアプリを診断してみた 2~」
(https://www.secure-iv.co.jp/blog/6317)
[5] 「Android Studio」
(https://developer.android.com/studio?hl=ja)
[6] 「Install Android Studio」
(https://developer.android.com/studio/install)
[7] 「MobSF/docs」
(https://github.com/MobSF/docs/blob/master/dynamic_analyzer.md)
[8] 「diva-android」
(https://github.com/payatu/diva-android)
[9] 「Docker Hub」
(https://hub.docker.com/r/opensecurity/mobile-security-framework-mobsf/)
[10] 「Frida」
(https://frida.re/)

執筆者プロフィール

執筆者
original
50

谷口 太郎(たにぐち たろう)
セキュリティ技術センター リスクハンティングチーム

主にペネトレーションテスト、脆弱性診断などを担当し、
NECグループのセキュア開発・運用を推進。
最近はペネトレーションテスト能力を向上する目的でHack The Boxに取り組み中。