このページでは、Fraud Defense のパスワード保護機能を使用してパスワード漏洩と認証情報侵害を検出して、アカウントの乗っ取り(ATO)やクルデンシャル スタッフィング攻撃を防止する方法について説明します。Fraud Defense では、評価の一環としてユーザー認証情報(パスワード)を定期的に監査して、漏洩や侵害が発生していないことを確認できます。この評価を行うために Google では パスワード チェックアップ機能を使用しています。
始める前に
プロジェクト Google Cloud に対して課金が有効になっていることを確認します。
Fraud Defense でパスワード防御機能を使用するには、プロジェクトで課金をリンクして有効にする必要があります。課金は、クレジット カードまたは既存の プロジェクトの課金 ID Google Cloud を使用して有効にできます。課金についてサポートが必要な場合は、 Cloud Billing サポートまでお問い合わせください。
認証情報の侵害や漏洩の確認
一連の認証情報が侵害されたかどうかは、暗号関数を使用するか、Docker コンテナを使用して確認できます。
Docker コンテナは、エンドユーザーのプライバシーを保護し、パスワード漏洩を安全に検索するために必要な セキュア マルチパーティ コンピューティング を実装するオープンソース クライアントです。詳細については、GitHub リポジトリをご覧ください。 Docker コンテナは、暗号アルゴリズムの実装の複雑さを抽象化し、インストール プロセスを簡素化します。また、コンテナアプリをインフラストラクチャでホストすることもできます。
暗号関数
一連の認証情報が侵害されたかどうかを確認するには、ログイン、パスワードの変更、パスワードの再設定などのアクションの評価を作成するときにパスワード防御を使用します。
次の手順でパスワードの漏洩や認証情報の侵害を確認します。
リクエスト パラメータを生成する
ハイ プライバシー プロトコルに必要な暗号関数を使用して、必要なリクエスト パラメータを計算します。 パスワード防御には、これらのフィールドの生成に役立つ 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());
コードサンプル
Node.js(TypeScript)
Node.js(TypeScript)を使用してパスワード防御を実装する方法については、GitHub の TypeScript コードサンプルをご覧ください。
Java
Fraud Defense に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、 ローカル開発環境の認証の設定をご覧ください。
Docker コンテナ
認証情報が漏洩しているかどうかを確認するには、localhost 接続を使用するか、コンテナに HTTPS を設定して、ユーザー名とパスワードの認証情報ペアをコンテナに安全に送信します。コンテナは、API リクエストを行う前にこれらの認証情報を暗号化し、再暗号化された結果をローカルで検証します。
Docker コンテナにリクエストを送信するには、次の手順を完了します。
Docker コンテナを実行する準備をする
認証戦略を選択します。
コンテナは、 アプリケーションのデフォルト認証情報 の設定をサポートしているか、認証にAPI キー を受け入れることができます。
HTTPS または localhost 専用のデモモードで実行するように PLD コンテナを構成します。
コンテナは機密性の高いエンドユーザー認証情報(ユーザー名とパスワード)を受け入れるため、HTTPS または localhost 専用のデモモードで実行する必要があります。HTTPS 構成のガイダンスについては、 GitHub の README をご覧ください。
次の手順では、API キー認証を使用し、localhost 専用のデモモードでクライアントを実行します。
Docker コンテナをビルドして実行する
リポジトリのクローンを作成します。
git clone github.com/GoogleCloudPlatform/reCAPTCHA-PLDコンテナを構築します。
docker build . -t pld-localコンテナを起動します。
docker run --network host \ -e RECAPTCHA_PROJECT_ID=PROJECT_ID \ -e GOOGLE_CLOUD_API_KEY=API_KEY \ pld-local
コンテナが起動し、localhost のポート 8080 でリクエストの処理を開始します。
localhost リクエストを送信する
リクエスト データを使用する前に、 次の置換を行います。
- LEAKED_USERNAME: 漏洩した認証情報ペアのユーザー名。
- LEAKED_PASSWORD: 漏洩した認証情報ペアのパスワード。
HTTP メソッドと URL:
POST http://localhost:8080/createAssessment/
リクエストの本文(JSON):
{
"username":"LEAKED_USERNAME",
"password":"LEAKED_PASSWORD"
}
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。
curl -X POST \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"http://localhost:8080/createAssessment/"
PowerShell
リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。
$headers = @{ }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "http://localhost:8080/createAssessment/" | Select-Object -Expand Content次のような JSON レスポンスが返されます。
{ "leakedStatus":"LEAKED" }
OR
{ "leakedStatus":"NO_STATUS" }
判定を解釈して対処する
評価レスポンスには、認証情報が漏洩したかどうかが示され、ユーザーを保護するための適切な措置を講じるために使用できる情報が提供されます。
次の表に、漏洩したパスワードが検出された場合に推奨されるアクションを示します。
| 漏洩したパスワードが検出された | ユーザーを保護するためのアクション |
|---|---|
| ログイン中 |
|
| アカウントの作成時またはパスワードの再設定時 |
|
サイトでもう MFA プロバイダを使用していない場合は、Fraud Defense の MFA 機能を使用できます。
次のステップ
- 多要素認証(MFA)の使用方法について学ぶ
- Fraud Defense アカウント保護を使用してユーザー アカウントを保護する方法を確認する