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

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

概要

アプリが認証に SMS を使用している場合は、reCAPTCHA SMS 防御の統合を有効にすることをおすすめします。有効にすると、エンドユーザーが次の phoneProvider オペレーションを使用してアプリまたはサイトから確認 SMS メッセージをリクエストするたびに、Firebase Authentication と Identity Platform が自動的に 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. コンソールで Cloud Shell をアクティブにします。 Google Cloud

      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. コンソールで、reCAPTCHA ページに移動します。 Google Cloud

      [reCAPTCHA] に移動

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

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

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

    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 が有効になっているプロジェクト識別子。

      • 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. コンソールにログインしている新しいブラウザ ウィンドウに URL を入力します。 Google Cloud

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

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

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

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

        Identity Platform に移動

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

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

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

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

  6. 構成を確認します

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

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

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

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

        • recaptchaKeys: フィールドは空にできず、iOS、ウェブ、Android のいずれか 1 つ以上のプラットフォーム用に構成されています。
        • 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 のバージョンが正しいことを確認します。

    ウェブ

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

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

    ウェブ 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 防御は、bot 保護と同時に使用できます。両方の保護機能を使用する構成では、次の点を考慮してください。

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

両方の機能を有効にするには、Google APIs 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 を使用してプロジェクト構成を更新します。コンソールにログインしている新しいブラウザ ウィンドウに次の 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":"OFF","useSmsTollFraudProtection":"false"}}}

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

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

次のステップ