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 確認コードが送信されます。リスク スコアリングが構成済みのしきい値を超えると、Identity Platform はリクエストをブロックし、確認コードを含む SMS メッセージを送信しません。
reCAPTCHA SMS 防御が有効になっている場合、フォールバック検証は必要ありません。また、アプリに追加の検証方法を設定する必要もありません。ただし、reCAPTCHA SMS 防御を無効にする場合に reCAPTCHA v2 を使用できるように、ウェブアプリに reCAPTCHA 検証ツールを設定することをおすすめします。
reCAPTCHA SMS 防御スコアの仕組みについては、スコアを解釈するをご覧ください。
reCAPTCHA SMS 防御機能の詳細については、SMS 不正利用を検出して防止するをご覧ください。
始める前に
Identity Platform で reCAPTCHA SMS 防御を有効にする前に、次のタスクを完了します。
アプリまたはサイトに応じて、次の設定を行います。
- ユーザーのスマートフォンによるログイン。
- ウェブ、Android、iOS アプリの多要素認証。
アプリまたはサイトに Firebase Authentication を構成します。
- ウェブ: 電話認証の設定
- iOS: 電話 Auth の設定
- Android: 電話認証の設定
reCAPTCHA SMS 防御を有効にする
認証を設定します。
-
Google Cloud コンソールで Cloud Shell をアクティブにします。
サービス ID を作成します。
gcloud beta services identity create \ --service=identitytoolkit.googleapis.com \ --project=PROJECT_IDPROJECT_IDをそのプロジェクトの ID に置き換えます。作成したサービス 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: プロジェクト IDPROJECT_NUMBER: プロジェクト アカウント番号
-
プロジェクトで reCAPTCHA Enterprise API を有効にします。
プロジェクトで reCAPTCHA SMS 防御を有効にします。
Google Cloud コンソールで、[reCAPTCHA] ページに移動します。
リソース セレクタにプロジェクトの名前が表示されていることを確認します。
プロジェクトの名前が表示されない場合は、リソース セレクタをクリックしてプロジェクトを選択します。
[設定] をクリックします。
[SMS 防御] ペインで [構成] をクリックします。
[有効にする] 切り替えをクリックし、[保存] をクリックします。
reCAPTCHA SMS 防御を有効にすると、アカウント保護機能も有効になります(まだ有効になっていない場合)。
reCAPTCHA SMS 防御の有効化がシステムに反映されるまでに数分かかることがあります。反映されると、評価の一環として reCAPTCHA SMS 防御に関連するレスポンスを受信し始めます。
Firebase Authentication または Identity Platform プロジェクトの reCAPTCHA SMS 防御設定を構成するには、次の操作を行います。
次の URL で、
PROJECT_IDとSTART_SCOREを置き換えます。https://cloud.google.com/identity-platform/docs/reference/rest/v2/projects/updateConfig?apix_params={"name":"projects/PROJECT_ID/config","updateMask":"recaptchaConfig.phoneEnforcementState,recaptchaConfig.useSmsTollFraudProtection,recaptchaConfig.tollFraudManagedRules","resource":{"recaptchaConfig":{"phoneEnforcementState":"ENFORCE","useSmsTollFraudProtection":true,"tollFraudManagedRules":[{"action":"BLOCK","startScore":START_SCORE}]}}}PROJECT_ID: Identity Platform が有効になっているプロジェクト ID。START_SCORE: 構成可能なしきい値。SMS リクエストが通信不正利用としてフラグが付けられ、ブロックされる前に、SMS リクエストが持つことができる最高スコアを決定します。最小しきい値は
0.0です。最大しきい値は0.9です。スコアがしきい値を超えるリクエストは、不正なリクエストと見なされます。たとえば、しきい値を0.3に設定すると、reCAPTCHA は不正行為スコアが0.4以上のリクエストをブロックします。不正防止のレベルを上げるには、しきい値を低い値に設定します。不正防止のレベルを下げるには、しきい値をより高い値に設定します。この設定により、スコアの高いリクエストがより多く通過できるようになります。
最初の実装では、
0.8などの高いしきい値から始めて、特定のリスク許容度に応じて繰り返し下げていくことをおすすめします。0.0または1.0のしきい値はおすすめしません。しきい値を0.0に設定すると、すべての SMS メッセージがブロックされます。1.0に設定すると、不正防止が完全に無効になり、リスクの高い地域への SMS 配信が失敗する可能性があります。
Google Cloud コンソールにログインしている新しいブラウザ ウィンドウに URL を入力します。
ウェブまたは Android で Identity Platform を使用している場合は、Firebase コンソールからアプリを登録します。
Android の場合は、Identity Platform を使用する各 Android パッケージ名を登録します。
ウェブの場合は、reCAPTCHA を使用する各ドメインに対して承認済みドメインを追加します。
Google Cloud コンソールで、[Identity Platform] ページに移動します。
[Settings] > [Security] に移動します。
[ドメインを追加] をクリックします。
ドメイン名を入力し、[追加] をクリックしてドメインを保存します。
reCAPTCHA キーのプロビジョニングが完了するまでに数分かかることがあります。
構成を確認します
reCAPTCHA 構成の詳細を取得します。
{replace-your-project}は、projectIdまたはprojectNumberに置き換えます。サイドパネルでGetConfigAPI を実行して、reCAPTCHA 構成を取得します。reCAPTCHA SMS 防御が正しく構成されていることを確認します。
reCAPTCHA 構成が正しく設定されている場合、レスポンスには次のフィールドと指定された値が含まれている必要があります。
recaptchaKeys: フィールドは空にできません。iOS、ウェブ、Android のいずれかのプラットフォーム用に構成されています。useSmsTollFraudProtection: このフィールドの値はtrueに設定する必要があります。phoneEnforcementState: 値はENFORCEに設定する必要があります。tollFraudManagedRules: このフィールド内で、startScoreを選択したしきい値で構成する必要があります。この値は0~0.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 } } ```
SDK のバージョンが正しいことを確認します。
Web
最新バージョンのウェブ SDK に更新します。
- ウェブアプリでのメールアドレスとパスワードによる認証の reCAPTCHA サポートは、JavaScript SDK バージョン 9.20.0 以降で利用できます。
- ウェブアプリでの電話認証の reCAPTCHA サポートは、JavaScript SDK バージョン 11 以降で利用できます。
ウェブ SDK をアプリと統合すると、SDK は reCAPTCHA 構成を自動的に取得し、構成したプロバイダの保護を有効にします。
Android
Android SDK の最新バージョンに更新します。Android アプリでのメールとパスワードによる認証と電話認証の reCAPTCHA サポートは、Android SDK バージョン 23.1.0 以降で利用できます。
また、reCAPTCHA のサポートには、API レベル 23(Marshmallow)以降と Android 6 以降が必要です。
Android SDK をアプリと統合すると、SDK は reCAPTCHA 構成を自動的に取得し、構成したプロバイダに設定したしきい値を適用します。
アプリレベルの
build.gradleファイルの依存関係セクションに、次のビルドルールを追加します。implementation 'com.google.android.recaptcha:recaptcha:18.5.1'reCAPTCHA SDK バージョン 18.5.1 以降を使用していることを確認します。
iOS
- iOS SDK バージョン 11.6.0 以降に更新します。
iOS SDK をアプリと統合すると、SDK は reCAPTCHA 構成を自動的に取得し、構成したプロバイダに設定したしきい値を適用します。
reCAPTCHA iOS SDK をアプリに統合するには、iOS 環境を準備するをご覧ください。
リンカーフラグに
-ObjCが含まれていることを確認するには、[Target] > [Build Settings] > [All] > [Linking] に移動し、[Other Linker Flags] に-ObjCが表示されていることを確認します。
reCAPTCHA SMS 防御の reCAPTCHA 指標をモニタリングする
プロジェクトで出力される reCAPTCHA 指標をモニタリングして、SMS ベースの認証フローが保護されていることを確認します。たとえば、これらの指標は、Identity Platform と reCAPTCHA Enterprise API の統合が正しく設定されているかどうかを判断するのに役立ちます。また、ユーザートラフィックのスコアしきい値を調整するのにも役立ちます。
プロジェクトで Cloud Monitoring に出力される次の指標を調べて、reCAPTCHA SMS 防御機能が動作していることを確認します。
identitytoolkit.googleapis.com/recaptcha/verdict_countidentitytoolkit.googleapis.com/recaptcha/token_countidentitytoolkit.googleapis.com/recaptcha/sms_tf_risk_scores
詳細については、reCAPTCHA 指標をモニタリングするをご覧ください。
bot 対策で reCAPTCHA SMS 防御を使用する
reCAPTCHA SMS 防御は、bot 保護と同時に使用できます。両方が有効で、phoneEnforcementState が ENFORCE に設定されている場合、Identity Platform は両方の評価を満たしている場合にのみリクエストを渡し、リクエストは別の確認方法にフォールバックせずにフェイルクローズします。
両方の機能を有効にするには、Google APIs Explorer を使用してプロジェクト構成を更新します。
recaptchaConfig: {
phoneEnforcementState: 'ENFORCE',
useSmsTollFraudProtection: true,
useSmsBotScore: true
}
bot 保護の使用中に reCAPTCHA SMS 防御を無効にする
reCAPTCHA SMS 防御と bot 保護の両方を使用している場合に、bot 保護を無効にせずに reCAPTCHA SMS 防御を無効にするには、Google APIs Explorer を使用してプロジェクト構成を更新します。
recaptchaConfig: {
phoneEnforcementState: 'ENFORCE',
useSmsTollFraudProtection: false,
useSmsBotScore: true
}
phoneEnforcementState を ENFORCE に設定し、useSmsBotScore を true に設定して、電話認証フローで bot 保護を有効のままにします。
reCAPTCHA SMS 防御を無効にする
reCAPTCHA SMS 防御を含むすべての電話 reCAPTCHA 保護を無効にするには、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.phoneEnforcementState,recaptchaConfig.useSmsTollFraudProtection,recaptchaConfig.useSmsBotScore","resource":{"recaptchaConfig":{"phoneEnforcementState":"OFF","useSmsTollFraudProtection":false,"useSmsBotScore":false}}}
PROJECT_ID をプロジェクト ID で置き換えます。
bot 保護の使用中に reCAPTCHA SMS 防御を無効にするには、bot 保護の使用中に reCAPTCHA SMS 防御を無効にするをご覧ください。
次のステップ
- reCAPTCHA SMS 防御機能の詳細を確認する。