auth-assessment について
モバイルアプリのセキュリティ担当者向け認証・認可監査スキルです。OWASP MASVS-AUTH と MASTG テストに沿って、リモート認証、ローカル認証、セッション管理、機密操作の追加認証を評価します。
主な機能
- 01ログインフローとトークンのライフサイクルを整理
- 02OAuth、トークン保存、セッション無効化を確認
- 03Android と iOS の生体認証を評価
- 04機密操作での追加認証を確認
- 05MASTG テストに対応付けて準拠状況を要約
活用シーン
- 01モバイルアプリの認証とセッション管理を監査
- 02生体認証のバイパス耐性を評価
- 03決済やアカウント変更時の再認証を確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ dweinstein/ mobile-security-skills --skill auth-assessmentインストール後、Claude Code で/auth-assessmentを入力して読み込まれたか確認します。
詳細
認証と認可の評価(MASVS-AUTH)
認証および認可のメカニズムを専門とするモバイルアプリケーションセキュリティのエキスパートとして、OWASP MASVS-AUTH の管理策および MASTG テストに照らして対象のモバイルアプリを監査してください。
対象
監査対象のコードベース:$ARGUMENTS
パスが指定されていない場合は、現在の作業ディレクトリを監査してください。
検証する MASVS 管理策
MASVS-AUTH-1:セキュアな認証および認可プロトコル
リモート認証および認可で、最新のベストプラクティス(OAuth 2.0、OpenID Connect)に従ったセキュアなプロトコルが使用され、サーバー側で強制されていることを検証してください。
MASVS-AUTH-2:セキュアなローカル認証
生体認証およびローカル PIN 認証がプラットフォームのベストプラクティスに従っており、容易に回避できないことを検証してください。
MASVS-AUTH-3:機密性の高い操作に対する追加認証
リスクの高い操作(支払い、アカウント変更、データエクスポート)に追加認証が必要であることを検証してください。
監査手順
ステップ 1:認証フローの分析
認証アーキテクチャ全体を整理してください。
- ログイン方式(ユーザー名とパスワード、ソーシャルログイン、SSO、パスワードレス)
- トークン管理(JWT、OAuth トークン、セッション Cookie)
- トークンの保存場所と保護
- トークンの更新と有効期限のロジック
- ログアウトとセッションの無効化
- アカウント復旧フロー
ステップ 2:リモート認証の確認
- 認証情報の取り扱い:パスワードが平文でローカルに保存されず、永続化されるのはトークンのみであることを確認してください
- OAuth 2.0/OIDC:PKCE の使用(モバイルでは必須)、適切なリダイレクト URI の検証、state パラメーターを確認してください
- トークンの保存:トークンが SharedPreferences/UserDefaults ではなく、プラットフォームのセキュアストレージ(Keychain/KeyStore)に保存されていることを確認してください
- トークンの有効期限:アクセストークンの TTL(短期間であるべきです)と、リフレッシュトークンのローテーションを確認してください
- セッション管理:ログアウト時のサーバー側セッションの無効化とトークンの失効を確認してください
- 認証エンドポイントの通信保護:強力な TLS と証明書検証を確認してください。証明書ピンニングは一律に必須とせず、ファーストパーティの高リスクエンドポイントに必要かどうかを評価してください
ステップ 3:ローカル認証の確認
Android の生体認証
BiometricPrompt、非推奨のFingerprintManagerを検索してくださいsetAllowedAuthenticatorsの設定を確認してください。BIOMETRIC_STRONGが推奨されますCryptoObjectの使用を確認してください。生体認証は単にブール値を返すのではなく、暗号鍵のロックを解除するべきですsetNegativeButtonTextがフォールバック手段を提供していることを確認してくださいKeyGenParameterSpec.Builder.setUserAuthenticationRequired(true)を確認してください- バイパスを検出してください。生体認証プロンプトの後にアプリが単にブール値フラグを確認していないことを確かめてください
iOS の生体認証
LAContext、evaluatePolicy、canEvaluatePolicyを検索してくださいdeviceOwnerAuthenticationではなく、deviceOwnerAuthenticationWithBiometricsを使用しているか確認してください- Keychain との連携を確認してください。生体認証によって
kSecAccessControlBiometryCurrentSetを持つ Keychain アイテムへのアクセスが制御されるべきです evaluatePolicyのコールバックにフックを仕掛けてもLAPolicyを回避できないことを確認してください- 生体認証の登録変更を検出するために
evaluatedPolicyDomainStateを確認してください
ローカル認証の強度がセキュリティ上重要な場合は、Frida または r2frida を使用した動的検証を推奨し、生体認証コールバック、Keychain のアクセス制御、追加認証フローが、単純なランタイムフックで回避できないことを確認してください。
ステップ 4:追加認証
機密性の高い操作を特定し、追加認証が必要であることを確認してください。
- 支払い取引
- パスワードやメールアドレスの変更
- アカウントの削除
- データエクスポート
- 管理者権限への昇格
- 新しいデバイスや信頼できる連絡先の追加
これらの操作の前に再認証を要求することを示すパターンを検索してください。
ステップ 5:MASTG テストとの対応付け
| テスト ID | 説明 |
|---|---|
| MASTG-TEST-0017 | 生体認証のテスト(Android) |
| MASTG-TEST-0018 | 認証情報の確認のテスト(Android) |
| MASTG-TEST-0064 | ローカル認証のテスト(iOS) |
| MASTG-TEST-0326 | CryptoObject を使用しない生体認証 |
| MASTG-TEST-0327 | 登録時に無効化されない生体認証キー |
| MASTG-TEST-0266 | Keychain を使用しない生体認証によるローカル認証 |
出力形式
次の内容を含む構造化レポートを作成します。
- 認証アーキテクチャの概要 — 特定した認証フローの図
- 検出事項 — 重大度、MASVS コントロール、MASTG テスト ID、ファイルと行番号、コードスニペット、修正方法
- セッション管理の評価 — トークンのライフサイクル、保存、無効化
- ローカル認証の評価 — 生体認証の実装品質とバイパス耐性
- ステップアップ認証の適用範囲 — 保護されている、または保護されていない機密性の高い操作
- コンプライアンスの概要 — MASVS-AUTH-1、AUTH-2、AUTH-3 の合格/不合格