performing-android-app-static-analysis-with-mobsf について
MobSF の静的解析で Android の APK、AAB、ソース ZIP を評価するセキュリティチーム向けの手順スキルです。API スキャン、脆弱性カテゴリの確認、レポート出力、CI/CD 連携を扱います。
主な機能
- 01APK、AAB、ソース ZIP のスキャン
- 02マニフェストとアプリコードの解析
- 03ネットワークとバイナリの安全性確認
- 04PDF と JSON レポートの出力
- 05CI/CD パイプラインへのスキャン追加
活用シーン
- 01リリース前の Android アプリ評価
- 02ペネトレーションテストでの初期選別
- 03サードパーティ製アプリのサプライチェーンリスク確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill performing-android-app-static-analysis-with-mobsfインストール後、Claude Code で/performing-android-app-static-analysis-with-mobsfを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSEassets/template.mdreferences/api-reference.mdstandards.mdworkflows.mdscripts/agent.pyprocess.py詳細
MobSF による Android アプリの静的解析
使用するタイミング
次の場合にこのスキルを使用します。
- 本番リリース前に Android APK または AAB のセキュリティ評価を実施するとき
- CI/CD パイプラインにモバイルセキュリティの自動スキャンを統合するとき
- ペネトレーションテストの実施中に Android アプリの初期トリアージを行うとき
- サプライチェーンのセキュリティリスクについて、サードパーティ製 Android アプリをレビューするとき
手動のコードレビューや動的解析の代わりとして、このスキルを使用しないでください。MobSF の静的解析で検出できるのはパターンベースの脆弱性であり、実行時のロジック上の欠陥は見逃します。
前提条件
- Docker(
docker pull opensecurity/mobile-security-framework-mobsf)またはローカル環境にインストールした MobSF v4.x - 対象の Android APK、AAB、またはソースコード ZIP
- MobSF REST API との連携に使用する Python 3.10 以降
- JADX デコンパイラー(MobSF に同梱)による Java/Kotlin ソースの復元
- MobSF の Web インターフェースへのネットワークアクセス(デフォルト:http://localhost:8000)
ワークフロー
ステップ 1:MobSF をデプロイして API キーを取得する
分離された再現可能なスキャン環境として、Docker を使って MobSF を起動します。
docker run -it --rm -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
MobSF の Web インターフェース(http://localhost:8000/api_docs)または起動時のコンソール出力から REST API キーを取得します。この API キーを使用すると、プログラムからスキャンを実行できます。
ステップ 2:静的解析のために APK をアップロードする
MobSF REST API を使って対象の APK をアップロードします。
curl -F "file=@target_app.apk" http://localhost:8000/api/v1/upload \
-H "Authorization: <API_KEY>"
レスポンスには、以降の API 呼び出しで使用する hash 識別子が含まれます。MobSF は JADX を使って APK を自動的にデコンパイルし、AndroidManifest.xml を抽出して、すべてのリソースにインデックスを付けます。
ステップ 3:静的スキャンを実行して結果を取得する
静的スキャンを開始し、結果を取得します。
# Trigger scan
curl -X POST http://localhost:8000/api/v1/scan \
-H "Authorization: <API_KEY>" \
-d "scan_type=apk&file_name=target_app.apk&hash=<FILE_HASH>"
# Retrieve JSON report
curl -X POST http://localhost:8000/api/v1/report_json \
-H "Authorization: <API_KEY>" \
-d "hash=<FILE_HASH>"
ステップ 4:重大な検出結果を分析する
MobSF の静的解析では、OWASP Mobile Top 10 2024 に対応する以下のカテゴリを対象にします。
マニフェスト解析(M8 - セキュリティ設定の不備):
- 権限による保護がないエクスポート済みアクティビティ、サービス、レシーバー、コンテンツプロバイダー
android:debuggable="true"が有効のままになっている- ADB によるデータ抽出を可能にする
android:allowBackup="true" - 証明書ピンニングに必要な
android:networkSecurityConfigがない
コード解析(M1 - 認証情報の不適切な使用):
- Java/Kotlin ソースにハードコードされた API キー、パスワード、トークン
- 機密データの保存に使用されている安全でない SharedPreferences
- 脆弱または破損した暗号化実装(ECB モード、静的 IV、ハードコードされたキー)
ネットワークセキュリティ(M5 - 安全でない通信):
- 証明書ピンニングの設定がない
- すべての証明書を受け入れるカスタム TrustManager
- 例外ドメインを指定せずに許可されているクリアテキスト HTTP 通信
バイナリ解析(M7 - バイナリ保護の不備):
- ProGuard/R8 による難読化がない
- ネイティブライブラリの脆弱性(スタックカナリア、NX ビット、PIE)
- デバッガー検出機能がない
ステップ 5:レポートを生成してエクスポートする
関係者への共有に向けて、複数の形式で検出結果をエクスポートします。
# PDF report
curl -X POST http://localhost:8000/api/v1/download_pdf \
-H "Authorization: <API_KEY>" \
-d "hash=<FILE_HASH>" -o report.pdf
# JSON for programmatic processing
curl -X POST http://localhost:8000/api/v1/report_json \
-H "Authorization: <API_KEY>" \
-d "hash=<FILE_HASH>" -o report.json
ステップ 6:CI/CD パイプラインに統合する
ビルドゲートとして MobSF スキャンを追加します。
# GitHub Actions example
- name: MobSF Static Analysis
run: |
UPLOAD=$(curl -s -F "file=@app/build/outputs/apk/release/app-release.apk" \
http://mobsf:8000/api/v1/upload -H "Authorization: $MOBSF_API_KEY")
HASH=$(echo $UPLOAD | jq -r '.hash')
curl -s -X POST http://mobsf:8000/api/v1/scan \
-H "Authorization: $MOBSF_API_KEY" \
-d "scan_type=apk&file_name=app-release.apk&hash=$HASH"
SCORE=$(curl -s -X POST http://mobsf:8000/api/v1/scorecard \
-H "Authorization: $MOBSF_API_KEY" -d "hash=$HASH" | jq '.security_score')
if [ "$SCORE" -lt 60 ]; then exit 1; fi
主な概念
| 用語 | 定義 |
|---|---|
| 静的解析 | プログラムを実行せずにアプリケーションのコードとリソースを調査すること。構造上の脆弱性やパターンベースの脆弱性を検出します |
| APK のデコンパイル | JADX や apktool などのツールを使って、コンパイル済みの Dalvik バイトコードから Java/Kotlin ソースを復元するプロセス |
| AndroidManifest.xml | アプリのコンポーネント、権限、セキュリティ属性を宣言する設定ファイル。マニフェスト解析の主な対象です |
| 証明書ピンニング | 不正な CA を介した中間者攻撃を防ぐため、アプリを特定のサーバー証明書に紐付ける手法 |
| ProGuard/R8 | クラス名の変更や未使用コードの削除によってリバースエンジニアリングを困難にする、コードの難読化および縮小ツール |
ツールとシステム
- MobSF:Android/iOS アプリの静的解析と動的解析に対応した、自動モバイルセキュリティ解析フレームワーク
- JADX:Android APK ファイルから読みやすいソースコードを復元するための Dex-to-Java デコンパイラー
- apktool:Android APK ファイルをリバースエンジニアリングし、リソースを元の形式に近い形でデコードするツール
- Android Lint:Android 固有のコード品質とセキュリティの問題を検出する Google の静的解析ツール
- Semgrep:カスタムの脆弱性検出に対応したモバイル固有のルールパックを備える、パターンベースの静的解析エンジン
よくある落とし穴
- 誤検知を無視する:MobSF は、実際の認証情報を保存していない場合でも、変数名に
passwordが含まれるなどのパターンを検出します。報告する前に、HIGH の検出結果をすべて手動でトリアージしてください。 - 難読化されたコードを見落とす:難読化されたアプリでは、静的解析の精度が大幅に低下します。DexGuard やカスタムパッカーを使用するアプリでは、動的解析を併用してください。
- 古い MobSF ルールを使う:セキュリティルールは Android の API レベルに応じて更新されます。MobSF が対象アプリの
targetSdkVersionに対応するよう、最新の状態にしてください。 - ネイティブコード解析を省略する:MobSF は Java/Kotlin を解析しますが、ネイティブの C/C++ ライブラリのカバー範囲は限られています。
.soファイルにはchecksecと手動レビューを使用してください。