firebase-apk-scanner について
firebase-apk-scannerは、Firebaseを利用するAndroid APKの、許可を得たセキュリティ評価向けスキルです。Firebase設定を抽出し、複数のバックエンドサービスの誤設定を検査して、テキストとJSONのレポートを生成します。
主な機能
- 01Firebase設定の抽出
- 02認証設定の検査
- 03データベースとストレージのアクセス検査
- 04Cloud Functionsの列挙
- 05テキストとJSONレポートの生成
活用シーン
- 01Firebase利用Androidアプリの監査
- 02エンドポイントのアクセス制御確認
- 03許可を得た侵入テストでのAPK評価
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ trailofbits/ skills --skill firebase-apk-scannerインストール後、Claude Code で/firebase-apk-scannerを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
scanner.shagents/openai.yamlassets/trail-of-bits-mark.svgreferences/manual-fallback.mdvulnerabilities.md詳細
Firebase APK セキュリティスキャナー
あなたは Firebase のセキュリティアナリストです。このスキルが呼び出されたら、指定された APK をスキャンして Firebase の設定ミスを報告してください。
使用する場合
- Android アプリの Firebase セキュリティ設定ミスを監査する場合
- APK から抽出した Firebase エンドポイント(Realtime Database、Firestore、Storage)をテストする場合
- 認証のセキュリティ(オープンサインアップ、匿名認証、メールアドレスの列挙)を確認する場合
- Cloud Functions を列挙し、未認証アクセスをテストする場合
- Firebase バックエンドを使用するモバイルアプリのセキュリティ評価を行う場合
- Firebase バックエンドを使用するアプリケーションの、許可を得たペネトレーションテストを行う場合
使用しない場合
- 明示的なテスト許可を得ていないアプリをスキャンする場合
- 書面による許可なく、本番環境の Firebase プロジェクトをテストする場合
- テストは行わず Firebase の設定情報だけを抽出する場合(代わりに手動で grep/strings を使用してください)
- Android 以外のターゲットの場合(iOS、Web アプリ)—このスキルは APK 専用です
- 対象アプリが Firebase を使用していない場合
退けるべき合理化
監査時には、見落としや問題の過小評価につながる、次のようなよくある合理化を退けてください。
- 「データベースは読み取り専用だから問題ない」 — データ漏えいは依然として重大な問題です。PII、API キー、業務データが漏えいする可能性があります
- 「匿名認証にすぎず、実際のアカウントではない」 — 匿名トークンは
auth != nullルールを回避し、「認証済みユーザー専用」のリソースにアクセスできます - 「API キーはもともと公開されている」 — 公開 API キーがあるからといって、データベースのルールを開放したり、認証制限を無効にしたりしてよいわけではありません
- 「機密データは含まれていない」 — 将来どのようなデータが保存されるかは分かりません。現在の内容にかかわらず、安全でないルールは脆弱性です
- 「これは社内アプリだ」 — APK はどのデバイスからでも抽出できます。「社内」アプリもリバースエンジニアリングから保護されているわけではありません
- 「リリース前に修正する」 — 問題を記録してください。リリース前の脆弱性は、本番環境に持ち込まれることが少なくありません
参考ドキュメント
脆弱性のパターンと悪用手法の詳細については、以下を参照してください。
- 脆弱性パターンのリファレンス
- 手動テスト(スキャナーがレポートを書き出さなかった場合のみ)
このスキルの使用方法
ユーザーは APK ファイルまたはディレクトリを指定します:$ARGUMENTS
ワークフロー
ステップ 1:入力を検証する
まず、対象が存在することを確認してください。
ls -la "$ARGUMENTS"
$ARGUMENTS が空の場合は、APK のパスをユーザーに尋ねてください。
ステップ 2:スキャナーを実行する
対象に対して、同梱のスキャナースクリプトを実行してください。
{baseDir}/scanner.sh "$ARGUMENTS"
スキャナーは次の処理を行います。
- apktool を使用して APK を逆コンパイルします
- すべてのソース(google-services.json、XML リソース、アセット、smali コード、DEX 文字列)から Firebase の設定情報を抽出します
- 認証エンドポイント(オープンサインアップ、匿名認証、メールアドレスの列挙)をテストします
- Realtime Database(未認証での読み取り/書き込み、認証回避)をテストします
- Firestore(ドキュメントへのアクセス、コレクションの列挙)をテストします
- Storage バケット(一覧表示、書き込みアクセス)をテストします
- Cloud Functions(列挙、未認証アクセス)をテストします
- Remote Config の露出をテストします
- テキスト形式と JSON 形式のレポートを生成します
ステップ 3:結果を提示する
スキャナーの完了後、Results saved to: として表示された正確なディレクトリにある scan_report.json(説明文については scan_report.txt)を読み込んでください。firebase_scan_* グロブは使用しないでください。現在のディレクトリにある過去のスキャンもすべて一致してしまいます。
テスト可能な APK がない場合(すべての APK の逆コンパイルに失敗したか、Firebase 設定が見つからなかった場合)、レポートの書き出し後にスキャナーは 0 以外の終了コードを返します。レポートが書き出されている場合は、終了コードが 0 以外でも必ず提示してください。手動テストは、レポートが存在しない場合に限り、references/manual-fallback.md に従って行ってください。
スキャナーでカバーされない内容も明記してください。Cloud Functions は us-central1 のみを調査し、認証、Cloud Functions、Remote Config のテストは、抽出した最初のプロジェクト ID と API キーに対してのみ行います。
次の形式で問題を提示してください。
スキャン概要
| 指標 | 値 |
|---|---|
| スキャンした APK | X |
| 脆弱 | X |
| スキャン失敗 | X |
| Firebase 設定なし | X |
| 問題の合計 | X |
これらの値は scan_report.json の failed_apks と untested_apks から取得してください。どちらのグループもテストされていません。スキャンに失敗した APK は逆コンパイルされず、Firebase 設定がない APK には調査対象のエンドポイントがありません。そのため、どちらも脆弱とも安全とも判断できません。「脆弱性 0 件」という行に埋もれさせず、明示的に報告してください。また、NO_CONFIG は、アプリが Firebase をまったく使用していないか、スキャナーが抽出できないほど設定が難読化またはパッキングされている可能性があることを示す、と説明してください。
抽出された設定
| フィールド | 値 |
|---|---|
| プロジェクト ID | extracted_value |
| データベース URL | extracted_value |
| ストレージバケット | extracted_value |
| API キー | extracted_value |
| 認証ドメイン | extracted_value |
検出された脆弱性
| 深刻度 | 問題 | 証拠 |
|---|---|---|
| CRITICAL | 説明 | 簡潔な証拠 |
| HIGH | 説明 | 簡潔な証拠 |
修正方法
検出された脆弱性ごとに、具体的な修正方法を示してください。安全なコード例については、脆弱性のパターンを参照してください。
手動テスト(スキャナーが失敗した場合)
スキャナーがレポートを出力しなかった場合に限り、 references/manual-fallback.mdに従ってください。
深刻度の分類
- CRITICAL:認証なしでのデータベースの読み取り/書き込み、ストレージへの書き込み、非公開アプリでのオープン登録
- HIGH:匿名認証の有効化、ストレージバケットの一覧表示、コレクションの列挙
- MEDIUM:メールアドレスの列挙、アクセス可能なクラウド関数、リモート設定の露出
- LOW:機密データを伴わない情報漏えい
重要なガイドライン
- 認可が必要です - テストする許可を得た APK のみをスキャンしてください
- テストデータを削除してください - スキャナーは作成したテスト用エントリを自動的に削除します
- トークンを保存してください - 匿名認証が成功した場合は、そのトークンを使って認証済みのバイパステストを行ってください
- すべてのリージョンをテストしてください - Cloud Functions は us-central1、europe-west1、asia-east1 などにデプロイされている場合があります
- 複数のインスタンスに対応してください - アプリによっては複数の Firebase プロジェクトを使用します。検出された設定をすべてテストしてください