本頁說明如何使用 reCAPTCHA 的 Password Defense 功能,偵測密碼外洩和遭入侵的憑證,防範帳戶入侵 (ATO) 和憑證填充攻擊。使用 reCAPTCHA 時,您可以定期稽核使用者憑證 (密碼),確保憑證未遭外洩或盜用。Google 會使用密碼安全檢查功能執行這些評估。
事前準備
reCAPTCHA 的密碼防護功能需要專案連結並啟用帳單功能。你可以使用信用卡或現有 Google Cloud 專案帳單 ID 啟用帳單。如需帳單方面的協助,請與 Cloud Billing 支援團隊聯絡。
檢查外洩的憑證
您可以使用加密函式或 Docker 容器,檢查一組憑證是否遭盜用。
Docker 容器是開放原始碼的用戶端,可實作安全的多方運算,確保使用者隱私權,並安全地查詢密碼外洩情形。詳情請參閱 GitHub 存放區。 Docker 容器會抽象化實作加密演算法的複雜度,並簡化安裝程序。您也可以在基礎架構中代管容器應用程式。
密碼編譯函式
如要檢查一組憑證是否遭盜用,請在建立登入、變更密碼和重設密碼等動作的評估時,使用 Password Defense 功能。
如要檢查密碼外洩情況和外洩的憑證,請完成下列步驟:
生成要求參數
使用高隱私權通訊協定所需的加密函式,計算必要的要求參數。reCAPTCHA 提供 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 方法和網址:
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
如要向 reCAPTCHA 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Docker 容器
如要檢查憑證是否外洩,請使用本機主機連線,或在容器上設定 HTTPS,安全地將使用者名稱和密碼憑證組傳送至容器。然後,容器會加密這些憑證,再向 reCAPTCHA 發出 API 要求,並在本地驗證重新加密的結果。
如要將要求傳送至 Docker 容器,請完成下列步驟:
準備執行 Docker 容器
選擇驗證策略。
設定 PLD 容器,以 HTTPS 執行或僅在 localhost 示範模式中執行。
由於容器會接受敏感的使用者憑證 (使用者名稱和密碼),因此必須透過 HTTPS 執行,或以僅限本機主機的示範模式執行。如需 HTTPS 設定指南,請參閱 GitHub 上的 README。
下列步驟會使用 API 金鑰驗證,並在僅限本機主機的示範模式下執行用戶端。
建構並執行 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 上提供要求。
傳送本機主機要求
使用任何要求資料之前,請先修改下列項目的值:
- LEAKED_USERNAME:外洩憑證組合的使用者名稱。
- LEAKED_PASSWORD:外洩憑證組合的密碼。
HTTP 方法和網址:
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 供應商,可以改用 reCAPTCHA 的 MFA 功能。
後續步驟
- 瞭解如何使用多重驗證 (MFA)
- 瞭解如何使用 reCAPTCHA 帳戶防護工具保護使用者帳戶