android-security-best-practices について
Android アプリの公開範囲、シークレット、ストレージ、ネットワーク信頼を監査する開発者向けセキュリティスキルです。攻撃対象の棚卸しからリリース確認までの手順を示します。
主な機能
- 01エクスポートコンポーネントと入口の棚卸し
- 02シークレット、ストレージ、ログ、バックアップの確認
- 03ネットワーク信頼と平文通信設定の確認
- 04ファイル共有とPendingIntentの保護
- 05WebViewブリッジと権限の評価
- 06リリース確認と残存リスクの記録
活用シーン
- 01Androidマニフェストとエクスポートコンポーネントの監査
- 02シークレット管理とデータ漏えいリスクの確認
- 03リリース候補前のセキュリティ設定確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ krutikjain/ android-agent-skills --skill android-security-best-practicesインストール後、Claude Code で/android-security-best-practicesを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
agents/openai.yamlreferences/official-links.mdpatterns.mdscenarios.mdscripts/run_examples.sh詳細
Android セキュリティのベストプラクティス
使用する場面
- 次の内容に関する依頼でこのスキルを使用します:Android のセキュリティレビュー、Android アプリでのシークレットの取り扱い、Android のエクスポートコンポーネントのセキュリティ。
- 主な成果:シークレット、ストレージ、ネットワークの信頼性、エクスポートコンポーネント、最小権限に関する Android アプリのセキュリティガイダンスを適用します。
- 攻撃対象領域のチェックリストや、ストレージ/ネットワーク/コンポーネントの判断マトリクスが必要な場合は、
references/patterns.mdを読みます。 - マニフェスト、バックアップ、WebView、リリースの堅牢化に関するレビュー手順については、
references/scenarios.mdを読みます。 - 対象範囲が広がる場合は、次のスキルに引き継ぎます:
android-modernization-upgradeandroid-ci-cd-release-playstore
ワークフロー
- まず攻撃対象領域を洗い出します:エクスポートコンポーネント、インテント/ディープリンクの入口、ファイル共有、WebView の使用、ローカルストレージ、ログ、バックアップ、ネットワークの信頼性設定。
- 詳細な堅牢化に入る前に、回避可能なリスクを取り除きます:広範なアクセス権や長期間有効なシークレットをアプリに含めるのではなく、プラットフォームのピッカーと選択画面、内部ストレージ、サーバー発行の短期間有効なトークン、最小権限を優先します。
- 残る境界を
android:exported、コンポーネント権限、FileProvider、networkSecurityConfig、デバッグ専用の信頼アンカー、不変のPendingIntentを使って明示的に保護します。 - Android アプリで問題が再発しやすい機微な領域をレビューします:WebView の JavaScript ブリッジ、バックアップ/データ抽出のルール、平文通信の例外、ログの秘匿化、同じ開発者による IPC という前提。
- 再現可能なチェックでリリース時のセキュリティ状態を検証し、残存リスクと、バックエンドによる強制適用または Play Integrity が参考情報かブロック条件かを記録します。
ガードレール
- クライアント側のシークレットは攻撃者が復元できるものとして扱い、可能な限り信頼性の判断と特権 API へのアクセスをサーバー側に移します。
- 実際に外部から呼び出す必要がある場合に限りコンポーネントをエクスポートします。契約が非公開の場合は、権限で保護するか署名で保護します。
- 広範なマニフェスト設定を使うのではなく、ネットワークセキュリティ設定でデバッグ用の信頼アンカーや平文通信の例外を対象限定します。
- ログを秘匿化し、バックアップを確認し、共有外部ストレージに機微なデータを保存しないことをデフォルトとします。
アンチパターン
- API キーをリソース、NDK、難読化で隠し、それを安全だと見なすこと。
- 起動可能なコンポーネントや IPC コンポーネントで、
android:exportedやインテントフィルターの指定を曖昧なままにすること。 FileProviderやシステム機能を使わず、生のファイルパスや過度に広範なストレージ権限でファイルを共有すること。- 運用上のローテーション手順やフォールバック計画なしに証明書をピン留めすること。
レビューの重点項目
- エクスポートされたアクティビティ、サービス、レシーバー、プロバイダーの所有者と呼び出し元に関する期待が明確であること。
- シークレット、トークン、バックエンドの信頼性に関する前提。
- ネットワークの信頼性、デバッグ用の上書き設定、平文通信の使用、証明書の取り扱い。
- ファイル共有、バックアップ、ログ、ユーザーデータの漏えい経路。
- Play Integrity などの不正利用の兆候は多層防御の一部としてのみ使用し、唯一の認可モデルにしないこと。
例
通常のケース
- シナリオ:マニフェストと共有機能を監査し、エクスポート、権限、
FileProviderの使用が明示されていることを確認します。 - コマンド:
rg -n "android:exported|android:permission|FileProvider|grantUriPermissions" examples
エッジケース
- シナリオ:リリース候補の公開前に、安全でないバックアップやネットワークのデフォルト設定を検出します。
- コマンド:
rg -n "networkSecurityConfig|usesCleartextTraffic|allowBackup|fullBackupContent|dataExtractionRules" examples
障害からの復旧
- シナリオ:アプリの堅牢化と、モダナイゼーションまたはリリースパイプラインに関する依頼を切り分けます。
- コマンド:
python3 scripts/eval_triggers.py --skill android-security-best-practices
完了チェックリスト
- 外部から到達可能なすべてのコンポーネントで、公開範囲と呼び出し元の制約が明示されています。
- シークレット、トークン、信頼性の判断が、クライアントアプリ内での隠蔽に依存していません。
- ネットワーク、バックアップ、ログ、共有の動作に、リリースに適した明示的なデフォルト設定があります。
- 残存リスクとバックエンドへの依存関係が、明確な後続作業とともに記録されています。
Official References
- https://developer.android.com/privacy-and-security/security-best-practices
- https://developer.android.com/privacy-and-security/security-tips
- https://developer.android.com/privacy-and-security/risks/unsafe-exported-components
- https://developer.android.com/privacy-and-security/risks/access-control-to-exported-components
- https://developer.android.com/privacy-and-security/security-config
- https://developer.android.com/privacy-and-security/minimize-permission-requests
- https://developer.android.com/google/play/integrity/overview
コメント
Markdown 対応