Datenlecks und gehackte Anmeldedaten erkennen

reCAPTCHA Enterprise kann Passwortlecks und gehackte Anmeldedaten erkennen, um Kontoübernahmen und Angriffe mit Anmeldedaten zu verhindern. Mit reCAPTCHA Enterprise können Sie im Rahmen einer Bewertung regelmäßige Audits von Nutzeranmeldedaten (Passwörter) durchführen, um sicherzugehen, dass sie nicht gehackt oder gehackt wurden. Dazu verwendet Google die Funktion Passwortcheck.

Hinweis

  1. Wählen Sie die beste Methode zum Einrichten von reCAPTCHA Enterprise in Ihrer Umgebung und schließen Sie die Einrichtung ab.

  2. Die Passwortleck-Erkennung ist nach einer Sicherheitsüberprüfung verfügbar. Wenden Sie sich an unser Vertriebsteam, um diese Funktion für Ihre Website nutzen zu können.

Auf gehackte bzw. gehackte Anmeldedaten überprüfen

Um zu prüfen, ob eine Reihe von Anmeldedaten manipuliert wurden, fragen Sie bei der Bewertung von Aktionen wie Anmeldungen und Passwortzurücksetzungen die Datenbank zur Passwortcheck-Datenbank ab.

Wenn Sie eine Bewertung erstellen, ändern Sie den Nutzernamen gemäß dem Kanonisierungsprozess und hashen Sie das Passwort mit Scrrypt mit einem bestimmten Salz.

Kanonisierung von Nutzernamen

Um einen Nutzernamen zu kanonisieren, verwenden Sie Kleinbuchstaben für den Nutzernamen, entfernen Sie die Domainkomponente und entfernen Sie alle Punkte wie in den folgenden Beispielen:

  • Kanonisieren von (foo.bar@COM) = foobar
  • Kanonisieren von (TEST@MAIL.COM) = test

Der folgende Code zeigt ein Beispiel für eine Kanonisierungslogik in Python 3.

#!/usr/bin/env python3

def canonicalize_username(username):
  """Canonicalize a username which must be a UTF-8 encoded string."""
  if "@" in username:
    username = username[:username.rfind("@")]
  return username.lower().replace(".", "")

hashed_user_credentials berechnen

  1. Berechnen Sie Scrypt(canonicalized_username + password + username_updated_salt), wobei username_updated_salt = canonicalized_username + fixed_salt und canonicalized_username die kanonische Version des Nutzernamens ist.

    Das folgende Python 3-Beispiel zeigt feste Salt- und Scrypt-Parameter.

    #!/usr/bin/env python3
    import base64
    import hashlib
    
    # Scrypt hash salt
    USER_CREDENTIALS_HASH_SALT = [
        48, 118, 42, 210, 63, 123, 161, 155, 248, 227, 66, 252, 161, 167, 141, 6,
        230, 107, 228, 219, 184, 79, 129, 83, 197, 3, 200, 219, 189, 222, 165, 32
    ]
    
    # Scrypt hash parameters and constants
    SCRYPT_HASH_CPU_MEM_COST = 1 << 12
    SCRYPT_HASH_BLOCK_SIZE = 8
    SCRYPT_HASH_PARALLELIZATION = 1
    SCRYPT_MAX_MEMORY = 1024 * 1024 * 32
    SCRYPT_HASH_KEY_LENGTH = 32
    
    def process_credentials(username, password):
      """Process user credentials to be used with the credentials check service."""
    
      canonicalized_username = canonicalize_username(username)
    
      # Compute the salt by appending the username to the fixed hash salt.
      salt = bytes([ord(character) for character in list(canonicalized_username)] +
                   USER_CREDENTIALS_HASH_SALT)
    
      # Compute the data to be hashed
      data = bytes(canonicalized_username + password, encoding="utf8")
    
      # Compute Scrypt hash using hashlib.
      scrypt_hash = hashlib.scrypt(
          password=data,
          salt=salt,
          n=SCRYPT_HASH_CPU_MEM_COST,
          r=SCRYPT_HASH_BLOCK_SIZE,
          p=SCRYPT_HASH_PARALLELIZATION,
          maxmem=SCRYPT_MAX_MEMORY,
          dklen=SCRYPT_HASH_KEY_LENGTH)
      return canonicalized_username, base64.b64encode(scrypt_hash)
    
  2. Mit dem folgenden erwarteten base64-codierten Hash können Sie prüfen, ob Ihre Implementierung korrekt ist.

     compute_scrypt_hash(`process_credentials`) = `1rzih02go6/dNcr1CQu9Ne+x4CC8xqSVuGaSWe+WhWk=`
    

API-Anfrage

Das Erstellen einer Bewertung zur Erkennung von Passwortlecks und gehackten Anmeldedaten wird nur auf dem v1beta1-Endpunkt unterstützt.

Verwenden Sie die Methode projects.assessments.create.

Ersetzen Sie diese Werte in den folgenden Anweisungen:

  • PROJECT_ID: Ihre Google Cloud-Projekt-ID
  • CANONICALIZED_USERNAME: Kanonisierter Nutzername
  • HASHED_USER_CREDENTIALS: Mit Scrypt gehashte Anmeldedaten

HTTP-Methode und URL:

POST https://recaptchaenterprise.googleapis.com/v1beta1/projects/PROJECT_ID/assessments

JSON-Text der Anfrage:

{
  "password_leak_verification": {
    "canonicalized_username": "CANONICALIZED_USERNAME"
    "hashed_user_credentials": "HASHED_USER_CREDENTIALS"
  }
}

Wenn Sie die Anfrage senden möchten, wählen Sie eine der folgenden Optionen aus:

curl

Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json und führen Sie den folgenden Befehl aus:

curl -X POST \
-H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
https://recaptchaenterprise.googleapis.com/v1beta1/projects/PROJECT_ID/assessments

PowerShell

Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json und führen Sie den folgenden Befehl aus:

$cred = gcloud auth application-default 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/v1beta1/projects/PROJECT_ID/assessments" | Select-Object -Expand Content

Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:

{
  "name": "projects/698047609967/assessments/fb22000000000000",
  "score": 0,
  "reasons": [],
  "passwordLeakVerification": {
    "hashedUserCredentials": "IDuS/soXlsLHmOm1A8zw+mChTI561MufdTaqL3k+zC4=",
    "credentialsLeaked": [true | false],
    "canonicalizedUsername": "test"
  }
}