このページでは、reCAPTCHA Enterprise のパスワード漏洩検出機能を使用して、パスワードの漏洩と認証情報侵害を検出して、アカウントの乗っ取り(ATO)やクレデンシャル スタッフィング攻撃を防止する方法について説明します。reCAPTCHA Enterprise では、評価の一環としてユーザー認証情報(パスワード)を定期的に監査して、漏洩や侵害が発生していないことを確認できます。この評価を行うために Google ではパスワード チェックアップ機能を使用しています。
準備
Make sure that billing is enabled for your Google Cloud project.
reCAPTCHA Enterprise でパスワード漏洩の検出機能を使用するには、プロジェクトで課金がリンクされ、有効になっている必要があります。課金は、クレジット カードまたは既存の Google Cloud プロジェクトの課金 ID を使用して有効にできます。課金についてサポートが必要な場合は、Cloud Billing サポートまでお問い合わせください。
認証情報侵害や漏洩の確認
一連の認証情報が侵害されたかどうか確認するには、ログイン、パスワードの変更、パスワードの再設定などのアクションの評価を作成する際に、パスワード漏洩の検出を使用します。
パスワードの漏洩や認証情報侵害を確認するには、次の手順を実行します。
リクエスト パラメータを生成する
ハイ プライバシー プロトコルに必要な暗号関数を使用して、必要なリクエスト パラメータを計算します。reCAPTCHA Enterprise には、これらのフィールドの生成に役立つ Java ライブラリと TypeScript ライブラリが用意されています。
パスワード チェックの検証を作成するには、
PasswordCheckVerifier
オブジェクトを作成します。PasswordCheckVerifier verifier = new PasswordCheckVerifier();
検証を開始するには、
PasswordCheckVerifier#createVerification
を呼び出します。この方法では、ユーザー名とパスワードを使用してパラメータを計算し、パスワード チェックを実行します。PasswordCheckVerification verification = verifier.createVerification("username", "password").get();
検証パラメータを使用して評価を作成します。
byte[] lookupHashPrefix = verification.getLookupHashPrefix(); byte[] encryptedUserCredentialsHash = verification.getEncryptedUserCredentialsHash();
バイト配列
lookupHashPrefix
とencryptedUserCredentialsHash
には、パスワード チェックAssessment
を開始するために必要なパラメータが含まれています。
パスワード漏洩を検出する評価を作成する
projects.assessments.create
メソッドを使用します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: 実際の Google Cloud プロジェクト ID
- LOOKUP_HASH_PREFIX: ユーザー名のプレフィックス SHA-256 ハッシュ プレフィックス
- ENCRYPTED_USER_CREDENTIALS_HASH: 暗号化されたユーザー認証情報 Scrypt ハッシュ
HTTP メソッドと URL:
POST https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments
リクエストの本文(JSON):
{ "private_password_leak_verification": { "lookup_hash_prefix": "LOOKUP_HASH_PREFIX", "encrypted_user_credentials_hash": "ENCRYPTED_USER_CREDENTIALS_HASH" } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を request.json
という名前のファイルに保存して、次のコマンドを実行します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments"
PowerShell
リクエスト本文を request.json
という名前のファイルに保存して、次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments" | Select-Object -Expand Content
次のような JSON レスポンスが返されます。
{ "name": "projects/698047609967/assessments/fb22000000000000", "score": 0, "reasons": [], "privatePasswordLeakVerification": { "lookupHashPrefix": "zoxZwA==", "encryptedUserCredentialsHash": "AyRihRcKaGLj/FA/r2uqQY/fzfTaDb/nEcIUMeD3Tygp", "reencryptedUserCredentialsHash": "Aw65yEbLM39ww1ridDEfx5VhkWo11tzn/R1B88Qqwr/+" "encryptedLeakMatchPrefixes": [ "n/n5fvPD6rmQPFyb4xk=", "IVQqzXsbZenaibID6OI=", ..., "INeMMndrfnlf6osCVvs=", "MkIpxt2x4mtyBnRODu0=", "AqUyAUWzi+v7Kx03e6o="] } }
評価から漏洩した認証情報を確認する
reEncryptedUserCredentials
レスポンスからフィールド encryptedLeakMatchPrefixes
と を抽出し、検証オブジェクトに渡して認証情報が漏洩しているかどうかを判断します。
PasswordCheckResult result = verifier.verify(verification,
result.getReEncryptedUserCredentials(),
result.getEncryptedLeakMatchPrefixes()
).get();
System.out.println("Credentials leaked: " + result.areCredentialsLeaked());
判定を解釈してアクションを実行する
評価レスポンスには認証情報が漏洩したかどうかが表示され、ユーザーを保護するための適切なアクションに使用できる情報が提供されます。
次の表は、漏洩したパスワードが検出されたときに実行できる推奨操作の一覧です。
パスワード漏洩が検出されました | ユーザーを保護するためのアクション |
---|---|
ログイン中 |
|
アカウントの作成中またはパスワードの再設定 |
|
サイトでもう MFA プロバイダを使用していない場合は、reCAPTCHA Enterprise の MFA 機能を使用できます。
コードサンプル
Java
reCAPTCHA Enterprise への認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
Node.js (TypeScript)
reCAPTCHA Enterprise への認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
次のステップ
- 多要素認証(MFA)の使用方法について学ぶ
- reCAPTCHA Enterprise アカウント防御を使用してユーザー アカウントを保護する方法を学ぶ