android-security-review
⚠️ このSkillはレビュー専用です。コード生成ではなく、レビュー結果の出力に使用します。
適用トリガ(いつ使うか)
- •PRやコード差分のセキュリティレビューを行うとき
- •リリース前のセキュリティ監査を行うとき
- •OWASP Mobile Top 10 に基づく脆弱性チェックを行うとき
- •セキュリティインシデントの原因調査を行うとき
出力形式(どう返すか)
必ず以下のフォーマットで出力すること:
markdown
## セキュリティレビュー結果 ### 1. 変更点サマリ(3行以内) - [変更内容を簡潔に記載] - [主要な変更ポイント] - [影響範囲] ### 2. リスク一覧 | # | 重大度 | カテゴリ | 該当箇所 | 根拠 | |---|--------|---------|----------|------| | 1 | High/Med/Low | IPC/Permission/Data/etc | file.kt:123 | [具体的な理由] | ### 3. 攻撃シナリオ #### リスク #1: [リスク名] - **成立条件**: [攻撃が成立するための条件] - **影響範囲**: [攻撃成功時の影響] - **攻撃手順**: 1. [手順1] 2. [手順2] ### 4. 推奨修正 #### リスク #1: [リスク名] - **修正案**: [具体的な修正方法] - **差分案**: \`\`\`diff - old code + new code \`\`\` ### 5. 追加テスト観点 - [ ] [セキュリティ回帰テスト項目1] - [ ] [セキュリティ回帰テスト項目2] ### 6. 総合判定 - [ ] ✅ 承認(セキュリティ上の問題なし) - [ ] ⚠️ 条件付き承認(Low/Med 修正後) - [ ] ❌ 要修正(High が1つ以上)
代表ユースケース
- •PR/MRのセキュリティレビュー
- •機密データ取り扱いの監査
- •公開コンポーネントの脆弱性確認
- •ネットワーク通信のセキュリティ検証
- •サプライチェーンセキュリティ評価
概要
Androidアプリケーションのセキュリティレビューを実施するためのレビュー専用Skillです。コード差分やPRに対してセキュリティリスクを評価し、上記フォーマットで結果を出力します。
レビュー観点(最低限チェックすべき項目)
1. IPC(プロセス間通信)
exported components
- • Activity/Service/Receiver/Provider の
exported属性が明示されているか - • exported=true のコンポーネントに適切な権限保護があるか
- • 不要な公開コンポーネントがないか
AIDL / Binder
- • 呼び出し元の UID/PID 検証が実装されているか
- •
Binder.getCallingUid()による検証が省略されていないか - • DeathRecipient が適切に実装されているか
PendingIntent
- • FLAG_IMMUTABLE または FLAG_MUTABLE が明示されているか
- • 暗黙的 Intent を PendingIntent に渡していないか
- • getActivity/getService/getBroadcast の使い分けが適切か
Broadcast
- • 機密データを含む Broadcast に権限保護があるか
- • LocalBroadcastManager または明示的 Broadcast を使用しているか
- • 受信側で送信元の検証を行っているか
2. Permission(権限)
保護レベル
- • 機密操作に適切な保護レベル(signature等)が設定されているか
- • カスタム権限の protectionLevel が適切か
チェック漏れ
- • 機密操作前に権限チェックが実装されているか
- •
checkCallingPermission/checkSelfPermissionが適切に使用されているか
署名権限の濫用
- • 署名権限を不適切に緩和していないか
- • signature|privileged 権限の要求が妥当か
3. Data(データ保護)
ログ
- • ログに機密情報(PII、トークン、パスワード)が出力されていないか
- • リリースビルドでデバッグログが無効化されているか
PII(個人識別情報)
- • PII が暗号化されて保存されているか
- • PII の収集・送信に同意を取得しているか
暗号化
- • 機密データが適切に暗号化されているか
- • 弱い暗号アルゴリズム(DES, MD5, SHA1)を使用していないか
- • 暗号鍵がハードコードされていないか
KeyStore
- • 機密情報の保存に Android KeyStore を使用しているか
- • EncryptedSharedPreferences を使用しているか
バックアップ
- •
android:allowBackupが適切に設定されているか - • 機密データがバックアップから除外されているか
外部ストレージ
- • 機密データを外部ストレージに保存していないか
- • 外部ストレージ使用時のリスクが考慮されているか
4. Web/Network(通信)
TLS
- • すべての通信が HTTPS を使用しているか
- •
android:usesCleartextTraffic="false"が設定されているか - • TLS 1.2 以上を強制しているか
証明書ピンニング
- • 証明書ピンニングが必要な場合、実装されているか
- • ピンニング失敗時の処理が適切か
TODO: 証明書ピンニング方針を記載(必須/推奨/不要の判断基準)
クリアテキスト
- • HTTP(非HTTPS)通信が存在しないか
- • Network Security Config が適切に設定されているか
SSRF
- • ユーザー入力を URL に使用する場合、ホワイトリスト検証があるか
- • 内部ネットワークへのアクセスが防止されているか
5. Input(入力検証)
Intent 注入
- • 外部 Intent のデータを検証しているか
- • Deep Link パラメータを検証しているか
- • getParcelableExtra 等の戻り値を検証しているか
URI / Path traversal
- • ファイルパスにユーザー入力を使用する場合、正規化・検証しているか
- •
../等のパストラバーサルを防止しているか - • ContentProvider の URI を検証しているか
コマンド実行
- • Runtime.exec() にユーザー入力を渡していないか
- • ProcessBuilder にユーザー入力を渡していないか
WebView
- • JavaScript が不要な場合は無効化されているか
- •
@JavascriptInterfaceの使用が最小限か - • loadUrl に外部 URL を渡す場合の検証があるか
- • ファイルアクセス設定が適切か
6. Supply chain(サプライチェーン)
依存関係
- • 既知の脆弱性を含むライブラリを使用していないか
- • 依存関係が信頼できるリポジトリから取得されているか
- • 依存関係の更新が適切に行われているか
ProGuard/R8
- • リリースビルドで難読化が有効か
- • セキュリティ関連クラスが適切に難読化されているか
debuggable
- • リリースビルドで
android:debuggable="false"か - • デバッグ用コードが残存していないか
テスト用コード残存
- • テスト用のバックドアやモック設定が残存していないか
- • デバッグ用のログ出力が残存していないか
- • BuildConfig.DEBUG の条件分岐が適切か
重大度の判定基準
High(高)
- •認証・認可のバイパスが可能
- •機密データの漏洩・改ざんが可能
- •リモートコード実行が可能
- •権限昇格が可能
Medium(中)
- •条件付きで機密データにアクセス可能
- •ローカル攻撃でのデータ漏洩
- •DoS(サービス拒否)攻撃が可能
- •情報漏洩(非機密情報)
Low(低)
- •情報の間接的な漏洩
- •ベストプラクティスからの逸脱
- •将来的なリスクの可能性
- •防御多層化の不足
カテゴリ略称
| 略称 | 正式名 |
|---|---|
| IPC | Inter-Process Communication |
| PERM | Permission |
| DATA | Data Protection |
| NET | Network/Web Security |
| INPUT | Input Validation |
| SUPPLY | Supply Chain |
参考リンク
- •OWASP Mobile Top 10
- •OWASP Mobile Security Testing Guide
- •Android Security Best Practices
- •CWE - Common Weakness Enumeration
TODO: 社内セキュリティポリシー、インシデント報告フローへのリンクを追加 TODO: 証明書ピンニング方針ドキュメントへのリンクを追加