SMS ベースの認証で reCAPTCHA SMS 防御を有効にする

このドキュメントでは、reCAPTCHA SMS 防御を使用して、Identity Platform の SMS ベースのフロー(電話認証や多要素認証など)を SMS 通信不正利用(SMS ポンピング攻撃ともいう)から保護する方法について説明します。この統合により、不正な SMS トラフィックがユーザーやリソースに悪影響を及ぼすのを防ぐことができます。

概要

アプリが認証に SMS を使用している場合は、reCAPTCHA SMS 防御 の統合を有効にすることをおすすめします。有効にすると、Firebase Authentication と Identity Platform によって、エンドユーザーが次の phoneProvider オペレーションを使用してアプリまたはサイトから確認用 SMS メッセージをリクエストするたびに、reCAPTCHA SMS 防御機能が自動的に呼び出されます。

オペレーション メソッド
電話番号での登録またはログイン sendVerificationCode
MFA 電話番号の登録 mfaSmsEnrollment
MFA 電話番号ログイン mfaSmsSignIn

reCAPTCHA は、ユーザーの電話番号の SMS 通信不正利用の可能性を示すリスクスコアを Firebase Authentication または Identity Platform に提供します。このスコアは、構成済みのしきい値と比較されます。リスクスコアがこのしきい値を超えると、SMS メッセージは送信されず、不正な試みが効果的にブロックされます。

reCAPTCHA SMS 防御スコアの仕組みについては、スコアを解釈するをご覧ください。

reCAPTCHA SMS 防御機能の詳細については、SMS 不正利用を検出して防止するをご覧ください。

reCAPTCHA 電話認証の適用モード

reCAPTCHA SMS 防御の電話認証の適用は、監査モードまたは適用モードのいずれかを使用するように構成できます。

監査モード

電話認証の適用を監査モードに設定すると、Identity Platform はアプリの確認に reCAPTCHA SMS 防御を使用します。ユーザーのリクエストが通信不正利用の評価で合格した場合、SMS 確認コードが送信されます。ユーザーのリクエストが通信不正利用の評価で不合格であり、クライアント SDK を使用している場合、Identity Platform はフォールバックの確認方法をトリガーして、電話認証フローを完了します。受け入れられるフォールバック メソッドは、アプリのプラットフォームによって異なります。

クライアント SDK は、次のシナリオでフォールバックの確認方法をトリガーします。

  • reCAPTCHA トークンがありません。
  • reCAPTCHA トークンが無効であるか、期限切れです。
  • reCAPTCHA トークンがスコアのしきい値を超えていません。
  • reCAPTCHA が正しく設定されていない。

アプリのプラットフォームのフォールバック確認方法が設定され、必要に応じてクライアント SDK によってトリガーされる準備ができていることを確認します。

ウェブ

最初の通話料金詐欺の評価が失敗した場合、監査モードでは確認に reCAPTCHA v2 が使用されます。そのため、reCAPTCHA 検証ツール(RecaptchaVerifier)を設定し、次の電話認証オペレーションに渡す必要があります。

  • verifyPhoneNumber
  • signInWithPhoneNumber
  • linkWithPhoneNumber
  • reauthenticateWithPhoneNumber
reCAPTCHA ベリファイアがない場合、Identity Platform は reCAPTCHA v2 を開始できず、auth/argument-error を返します。reCAPTCHA ベリファイアの設定の詳細については、Firebase のドキュメントの reCAPTCHA ベリファイアを設定するをご覧ください。

Android

最初の通話料詐欺の評価が失敗した場合、監査モードでは Play Integrity API に対してアプリが検証されます。この検証に失敗すると、reCAPTCHA v2 がトリガーされます。reCAPTCHA v2 は、次のような場合にトリガーされることがあります。

  • エンドユーザーのデバイスに Google Play 開発者サービスがインストールされていない場合。
  • (Authentication SDK v21.2.0 以降で)アプリが Google Play ストアを通じて配布されたものでない場合。
  • (Authentication SDK バージョン v21.2.0 より前で)取得した SafetyNet トークンが有効でない場合。
Android アプリの確認の設定について詳しくは、Firebase ドキュメントのアプリの確認を有効にするをご覧ください。

iOS

最初の通話詐欺の評価に失敗した場合、監査モードは検証にサイレント プッシュ通知を使用します。この確認方法では、リクエスト元のデバイスのアプリにサイレント プッシュ通知でトークンを送信します。アプリが通知を正常に受信すると、電話認証フローが続行されます。アプリがプッシュ通知を受信しない場合は、reCAPTCHA v2 がトリガーされます。サイレント プッシュ通知が適切に構成されていない場合、reCAPTCHA v2 がトリガーされることがあります。

iOS アプリの検証の設定について詳しくは、Firebase ドキュメントのアプリの検証を有効にするをご覧ください。

適用モード

電話認証の適用を適用モードに設定すると、Identity Platform はアプリの確認に reCAPTCHA SMS 防御を使用します。ユーザーのリクエストが通信不正利用の評価で合格した場合、SMS 確認コードが送信されます。ユーザーのリクエストが通信不正利用の評価で不合格になると、Identity Platform はリクエストをブロックし、確認コードを含む SMS メッセージを送信しません。

適用モードではフォールバック検証は必要ないため、アプリに追加の検証方法を設定する必要はありません。ただし、アプリの reCAPTCHA モードを AUDIT または OFF に変更する場合は、reCAPTCHA v2 が有効になるように、ウェブアプリ用の reCAPTCHA 検証ツールを設定することをおすすめします。

始める前に

Identity Platform で reCAPTCHA SMS 防御を有効にする前に、次のタスクを完了します。

reCAPTCHA SMS 防御を有効にする

  1. 認証を設定します。

    1. Google Cloud コンソールで Cloud Shell をアクティブにします。

      Cloud Shell をアクティブにする

    2. サービス ID を作成します。

      gcloud beta services identity create \
          --service=identitytoolkit.googleapis.com \
          --project=PROJECT_ID
      

      PROJECT_ID をそのプロジェクトの ID に置き換えます。

    3. 作成したサービス ID に roles/identitytoolkit.serviceAgent ロールを付与します。

      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-identitytoolkit.iam.gserviceaccount.com \
          --role=roles/identitytoolkit.serviceAgent
      

      次のように置き換えます。

      • PROJECT_ID: プロジェクト ID
      • PROJECT_NUMBER: プロジェクト アカウント番号
  2. プロジェクトで reCAPTCHA Enterprise API を有効にします

  3. プロジェクトで reCAPTCHA SMS 防御 を有効にします。

    1. Google Cloud コンソールで、[reCAPTCHA] ページに移動します。

      [reCAPTCHA] に移動

    2. リソース セレクタにプロジェクトの名前が表示されていることを確認します。

      プロジェクトの名前が表示されない場合は、リソース セレクタをクリックしてプロジェクトを選択します。

    3. [設定] をクリックします。

    4. [SMS 防御] ペインで [構成] をクリックします。

    5. [有効にする] 切り替えをクリックし、[保存] をクリックします。

    reCAPTCHA SMS 防御を有効にすると、アカウント保護機能も有効になります(まだ有効になっていない場合)。

    reCAPTCHA SMS 防御の有効化がシステムに反映されるまでに数分かかることがあります。反映されると、評価の一環として reCAPTCHA SMS 防御に関連するレスポンスを受信し始めます。

  4. Firebase Authentication または Identity Platform プロジェクトの reCAPTCHA SMS 防御 の設定を構成する手順は次のとおりです。

    1. 次の URL で、PROJECT_IDRecaptcha_MODESTART_SCORE を置き換えます。

      https://cloud.google.com/identity-platform/docs/reference/rest/v2/projects/updateConfig?apix_params={"name":"projects/PROJECT_ID/config","updateMask":"recaptchaConfig","resource":{"recaptchaConfig":{"emailPasswordEnforcementState":"OFF","phoneEnforcementState":"Recaptcha_MODE","useSmsTollFraudProtection":true,"tollFraudManagedRules":[{"action":"BLOCK","startScore":START_SCORE}]}}}
      
      • PROJECT_ID: Identity Platform が有効になっているプロジェクト ID。

      • Recaptcha_MODE: reCAPTCHA 電話認証の強制適用に設定するモード。有効な値は OFFAUDITENFORCE です。reCAPTCHA SMS 防御を有効にするには、このパラメータを AUDIT または ENFORCE に設定し、useSmsTollFraudProtectiontrue に設定する必要があります。

        reCAPTCHA SMS 防御 を初めて有効にする場合は、AUDIT モードを使用して、reCAPTCHA SMS 防御 の設定が正しく機能していることを確認します。AUDIT モードは検証専用です。このモードでは、不正な SMS トラフィックを防ぐことはできません。[指標] ダッシュボードにエラーが表示されていないことを確認します。確認後、すぐに ENFORCE モードを有効にします。モードの仕組みの詳細については、reCAPTCHA 電話認証の適用モードをご覧ください。

      • START_SCORE: 構成可能なしきい値。SMS リクエストが有料詐欺としてフラグ設定され、ブロックされる前に取得できる最高スコアを決定します。

        最小しきい値は 0.0 です。最大しきい値は 0.9 です。スコアがしきい値を超えるリクエストは不正と見なされます。たとえば、しきい値を 0.3 に設定すると、reCAPTCHA は不正行為スコアが 0.4 以上のリクエストをブロックします。

        不正防止のレベルを高めるには、しきい値を低い値に設定します。不正防止のレベルを下げるには、しきい値をより高い値に設定します。この設定により、スコアの高いリクエストがより多く通過できるようになります。

        初期実装では、0.8 などの高いしきい値から始めて、特定のリスク許容度に応じてしきい値を段階的に下げることをおすすめします。

        0.0 または 1.0 のしきい値はおすすめしません。しきい値を 0.0 に設定すると、すべての SMS メッセージがブロックされます。1.0 に設定すると、不正防止が完全に無効になり、リスクの高い地域への SMS の配信が失敗する可能性があります。

    2. Google Cloud コンソールにログインしている新しいブラウザ ウィンドウに URL を入力します。

  5. ウェブまたは Android で Identity Platform を使用している場合は、Firebase コンソールからアプリを登録します。

    • Android の場合は、Identity Platform を使用する各 Android パッケージ名を登録します。

    • ウェブの場合は、reCAPTCHA を使用する各ドメインに対して承認済みドメインを追加します。

      1. Google Cloud コンソールで、[Identity Platform] ページに移動します。

        Identity Platform に移動

      2. [設定] > [セキュリティ] に移動します。

      3. [ドメインを追加] をクリックします。

      4. ドメイン名を入力し、[追加] をクリックしてドメインを保存します。

      reCAPTCHA キーのプロビジョニングが完了するまでに数分かかることがあります。

  6. 構成を確認します

    • reCAPTCHA 構成の詳細を取得します。

      {replace-your-project}projectId または projectNumber。 サイドパネルで GetConfig API を実行して、reCAPTCHA 構成を取得します。

    • reCAPTCHA SMS 防御が正しく構成されていることを確認します。

      1. reCAPTCHA 構成が正しく設定されている場合、レスポンスには次のフィールドと指定された値が含まれている必要があります。

        • recaptchaKeys: フィールドは空にできません。また、iOS、ウェブ、Android のいずれかのプラットフォーム用に構成されている必要があります。
        • useSmsTollFraudProtection: このフィールドの値は true に設定する必要があります。
        • phoneEnforcementState: 値は ENFORCE または AUDIT に設定する必要があります。
        • tollFraudManagedRules: このフィールド内で、選択したしきい値を使用して startScore を構成する必要があります。このしきい値は 00.9 の値にする必要があります。

        そうでない場合は、reCAPTCHA SMS 防御を再度構成します。

        レスポンスの例

          {
            "recaptchaConfig": {
                "recaptchaKeys": [
                  {
                    "key": "projects/{your-project}/keys/{recaptcha-key}",
                    "type": "WEB"
                  },
                  {
                    "type": "IOS"
                  },
                  {
                    "type": "ANDROID"
                  }
                ],
                "phoneEnforcementState": "ENFORCE",
                "tollFraudManagedRules": [
                  {
                    "startScore": 0.8,
                    "action": "BLOCK"
                  }
                ],
                "useSmsTollFraudProtection": true
            }
          }
          ```
        
  7. SDK のバージョンが正しいことを確認します。

    Web

    最新バージョンのウェブ SDK に更新します。

    • ウェブアプリでのメールアドレスとパスワード認証の reCAPTCHA サポートは、JavaScript SDK バージョン 9.20.0 以降で利用できます。
    • ウェブアプリでの電話番号認証の reCAPTCHA サポートは、JavaScript SDK バージョン 11 以降で利用できます。

    Web SDK をアプリと統合すると、SDK は reCAPTCHA 構成を自動的に取得し、構成したプロバイダの保護を有効にします。

    Android

    1. Android SDK の最新バージョンに更新します。Android アプリでのメールアドレスとパスワード認証、電話番号認証の reCAPTCHA サポートは、Android SDK バージョン 23.1.0 以降で利用できます。

      また、reCAPTCHA のサポートには API レベル 23(Marshmallow)以上と Android 6 以上が必要です。

      Android SDK をアプリと統合すると、SDK は reCAPTCHA 構成を自動的に取得し、構成したプロバイダに設定したしきい値を適用します。

    2. アプリレベルの build.gradle ファイルの依存関係セクションに、次のビルドルールを追加します。

      implementation 'com.google.android.recaptcha:recaptcha:18.5.1'
      

      reCAPTCHA SDK バージョン 18.5.1 以降を使用していることを確認します。

    iOS

    1. iOS SDK バージョン 11.6.0 以降に更新します。

    iOS SDK をアプリと統合すると、SDK は reCAPTCHA 構成を自動的に取得し、構成したプロバイダに設定したしきい値を適用します。

    1. reCAPTCHA iOS SDK をアプリに統合するには、iOS 環境を準備するをご覧ください。

    2. リンカーフラグに -ObjC が含まれていることを確認するには、[Target] > [Build Settings] > [All] > [Linking] に移動し、[Other Linker Flags] に -ObjC が表示されていることを確認します。

reCAPTCHA SMS 防御 の reCAPTCHA 指標をモニタリングする

プロジェクトで出力される reCAPTCHA 指標をモニタリングして、SMS ベースの認証フローが保護されていることを確認します。たとえば、これらの指標は、Identity Platform と reCAPTCHA Enterprise API の統合が正しく設定されているかどうかを判断するのに役立ちます。また、ユーザー トラフィックのスコアしきい値を調整するのにも役立ちます。

プロジェクトで Cloud Monitoring に出力される次の指標を調べて、reCAPTCHA SMS 防御機能が機能していることを確認します。

詳細については、reCAPTCHA 指標をモニタリングするをご覧ください。

reCAPTCHA SMS 防御を適用する

アプリが許容できるユーザー トラフィックを受信していることを確認した後、reCAPTCHA の ENFORCE モードを有効にして、不正なリクエストを積極的にブロックし、ユーザーを保護します。

プロジェクトまたはテナントで SMS ベースの認証フローの ENFORCE モードを有効にするには、Google APIs Explorer を使用してプロジェクト構成を更新します。新しいブラウザ ウィンドウで次の HTTP URL を入力します。このウィンドウでは、 Google Cloud コンソールにログインしています。

   https://cloud.google.com/identity-platform/docs/reference/rest/v2/projects/updateConfig?apix_params={"name":"projects/PROJECT_ID/config","updateMask":"recaptchaConfig","resource":{"recaptchaConfig":{"phoneEnforcementState":"ENFORCE","useSmsTollFraudProtection":"true"}}}

PROJECT_ID をプロジェクト ID で置き換えます。

bot 対策に reCAPTCHA SMS 防御を使用する

reCAPTCHA SMS 防御は、ボット保護と同時に使用できます。両方の保護機能を使用する構成では、次の点を考慮してください。

  • 電話認証の適用状態を AUDIT に設定すると、Identity Platform は、評価のいずれか 1 つ以上を満たす場合にリクエストを渡します。reCAPTCHA 指標をモニタリングして、reCAPTCHA SMS 防御と bot 保護の両方が妥当なスコア設定で構成されていることを確認することをおすすめします。
  • 電話認証の適用状態を ENFORCE に設定すると、Identity Platform は、評価とリクエストの両方が満たされ、別の確認方法にフォールバックすることなくリクエストの失敗が終了した場合にのみ、リクエストを渡します。

両方の機能を有効にするには、Google API Explorer を使用してプロジェクト構成を更新します。

        recaptchaConfig: {
          phoneEnforcementState:  'ENFORCE_MODE',
          useSmsTollFraudProtection: true,
          useSmsBotScore: true
        }

ENFORCE_MODE は、reCAPTCHA 電話認証の適用に設定するモードに置き換えます。有効な値は OFFAUDITENFORCE です。reCAPTCHA SMS 防御を初めて有効にする場合は、このパラメータを AUDIT に設定し、認証フローが保護されていることを確認してから ENFORCE に設定することをおすすめします。モードの仕組みについて詳しくは、reCAPTCHA 電話認証の適用モードをご覧ください。

bot 保護の使用中に reCAPTCHA SMS 防御を無効にする

reCAPTCHA SMS 防御と bot 保護を同時に使用していて、bot 保護を無効にせずに reCAPTCHA SMS 防御を無効にする場合は、Google APIs Explorer を使用してプロジェクト構成を更新します。

    recaptchaConfig: {
      phoneEnforcementState:  'ENFORCE_MODE',
      useSmsTollFraudProtection: 'false',
      useSmsBotScore: 'true'
    }

ENFORCE_MODE は、reCAPTCHA の電話認証の適用用に以前に設定したモードに置き換えます。この値は AUDIT または ENFORCE のいずれかにする必要があります。モードの仕組みについて詳しくは、reCAPTCHA 電話認証の適用モードをご覧ください。

reCAPTCHA SMS 防御を無効にする

reCAPTCHA SMS 防御を無効にするには、Google APIs Explorer を使用してプロジェクト構成を更新します。新しいブラウザ ウィンドウで、 Google Cloud コンソールにログインした状態で次の HTTP URL を入力します。


   https://cloud.google.com/identity-platform/docs/reference/rest/v2/projects/updateConfig?apix_params={"name":"projects/PROJECT_ID/config","updateMask":"recaptchaConfig","resource":{"recaptchaConfig":{"phoneEnforcementState":"OFF","useSmsTollFraudProtection":"false"}}}

PROJECT_ID をプロジェクト ID で置き換えます。

bot 保護を使用しているときに reCAPTCHA SMS 防御を無効にするには、bot 保護を使用しているときに reCAPTCHA SMS 防御を無効にするをご覧ください。

次のステップ