En esta página, se describe cómo usar la función de defensa de contraseñas de reCAPTCHA para detectar filtraciones de contraseñas y credenciales vulneradas, y evitar apropiaciones de cuentas (ATO) y ataques de credential stuffing. Con reCAPTCHA, puedes realizar auditorías periódicas de las credenciales de los usuarios (contraseñas) como parte de cualquier evaluación para asegurarte de que no se hayan filtrado ni vulnerado. Para realizar estas evaluaciones, Google usa la función Verificación de contraseñas.
Antes de comenzar
Make sure that billing is enabled for your Google Cloud project.
Para usar la función de defensa contra contraseñas, reCAPTCHA requiere que la facturación esté vinculada y habilitada en el proyecto. Puedes habilitar la facturación con una tarjeta de crédito o un ID de facturación de proyecto Google Cloud existente. Si necesitas ayuda con la facturación, comunícate con el equipo de asistencia de Facturación de Cloud.
Verificar si hay credenciales vulneradas o filtradas
Puedes verificar si un conjunto de credenciales se vio comprometido con funciones criptográficas o con el contenedor de Docker.
El contenedor de Docker es un cliente de código abierto que implementa la computación segura de múltiples partes que se necesita para preservar la privacidad del usuario final y buscar de forma segura las filtraciones de contraseñas. Para obtener más información, consulta el repositorio de GitHub. El contenedor de Docker abstrae la complejidad de implementar los algoritmos criptográficos y simplifica el proceso de instalación. También te permite alojar la app de contenedor en tu infraestructura.
Función criptográfica
Para verificar si un conjunto de credenciales se vio comprometido, usa la Defensa de contraseñas cuando crees evaluaciones para acciones como accesos, cambios de contraseña y restablecimientos de contraseña.
Para verificar si hubo filtraciones de contraseñas y vulneraciones de credenciales, completa los siguientes pasos:
- Genera parámetros de solicitud.
- Crea una evaluación para detectar filtraciones de contraseñas.
- Verificar las credenciales filtradas de una evaluación
- Interpretar el veredicto y tomar medidas
Generar parámetros de solicitud
Calcula los parámetros de solicitud necesarios con las funciones criptográficas que requiere el protocolo de alta privacidad. reCAPTCHA proporciona bibliotecas de Java y TypeScript para ayudarte a generar estos campos:
Para crear verificaciones de revisión de contraseñas, crea un objeto
PasswordCheckVerifier
.PasswordCheckVerifier verifier = new PasswordCheckVerifier();
Para iniciar una verificación, llama a
PasswordCheckVerifier#createVerification
. Este método usa el nombre de usuario y la contraseña para calcular los parámetros para realizar la verificación de la contraseña.PasswordCheckVerification verification = verifier.createVerification("username", "password").get();
Crea una evaluación con los parámetros de verificación.
byte[] lookupHashPrefix = verification.getLookupHashPrefix(); byte[] encryptedUserCredentialsHash = verification.getEncryptedUserCredentialsHash();
Los arrays de bytes
lookupHashPrefix
yencryptedUserCredentialsHash
contienen los parámetros necesarios para iniciar una verificación de contraseñaAssessment
.
Crear una evaluación para detectar filtraciones de contraseñas
Usa el método projects.assessments.create
.
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- PROJECT_ID: El ID de tu proyecto de Google Cloud
- LOOKUP_HASH_PREFIX: Prefijo del hash SHA-256 del nombre de usuario
- ENCRYPTED_USER_CREDENTIALS_HASH: Hash de Scrypt de las credenciales del usuario encriptadas
Método HTTP y URL:
POST https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments
Cuerpo JSON de la solicitud:
{ "private_password_leak_verification": { "lookup_hash_prefix": "LOOKUP_HASH_PREFIX", "encrypted_user_credentials_hash": "ENCRYPTED_USER_CREDENTIALS_HASH" } }
Para enviar tu solicitud, elige una de estas opciones:
curl
Guarda el cuerpo de la solicitud en un archivo llamado request.json
y ejecuta el siguiente comando:
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
Guarda el cuerpo de la solicitud en un archivo llamado request.json
y ejecuta el siguiente comando:
$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
Deberías recibir una respuesta JSON similar a la que se muestra a continuación:
{ "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="] } }
Verificar las credenciales filtradas de una evaluación
De la respuesta de la evaluación, extrae los campos reEncryptedUserCredentials
y encryptedLeakMatchPrefixes
, y pásalos al objeto de verificación para determinar si se filtraron las credenciales.
PasswordCheckResult result = verifier.verify(verification,
result.getReEncryptedUserCredentials(),
result.getEncryptedLeakMatchPrefixes()
).get();
System.out.println("Credentials leaked: " + result.areCredentialsLeaked());
Muestra de código
Node.js (TypeScript)
Para obtener información sobre cómo implementar la detección de filtraciones de contraseñas con Node.js (TypeScript), consulta el ejemplo de muestra de código de TypeScript en GitHub.
Java
Para autenticarte en reCAPTCHA, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Contenedor de Docker
Para verificar si se filtraron las credenciales, envía de forma segura el par de credenciales de nombre de usuario y contraseña al contenedor a través de una conexión de localhost o configurando HTTPS en el contenedor. Luego, el contenedor encripta estas credenciales antes de realizar una solicitud a la API de reCAPTCHA y verifica el resultado reencriptado de forma local.
Para enviar solicitudes al contenedor de Docker, completa los siguientes pasos:
- Configura Docker.
- Prepara un entorno para el contenedor de Docker.
- Compila y ejecuta el contenedor.
- Enviar solicitudes HTTP al contenedor
- Interpretar el veredicto y tomar medidas
Prepárate para ejecutar el contenedor de Docker
Elige una estrategia de autenticación.
El contenedor admite la configuración de credenciales predeterminadas de la aplicación o puede aceptar una clave de API para la autenticación.
Configura el contenedor de PLD para que se ejecute con HTTPS o en un modo de demostración solo para localhost.
Dado que el contenedor acepta credenciales sensibles del usuario final (nombres de usuario y contraseñas), debe ejecutarse con HTTPS o en un modo de demostración solo para localhost. Para obtener orientación sobre la configuración de HTTPS, consulta el README en GitHub.
En los siguientes pasos, se usa la autenticación con clave de API y se ejecuta el cliente en el modo de demostración solo para localhost.
Compila y ejecuta el contenedor de Docker
Clona el repositorio:
git clone github.com/GoogleCloudPlatform/reCAPTCHA-PLD
Compila el contenedor:
docker build . -t pld-local
Inicia el contenedor:
docker run --network host \ -e RECAPTCHA_PROJECT_ID=PROJECT_ID \ -e GOOGLE_CLOUD_API_KEY=API_KEY \ pld-local
El contenedor se inicia y comienza a atender solicitudes en el puerto 8080 de localhost.
Envía solicitudes de localhost
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- LEAKED_USERNAME: Es el nombre de usuario del par de credenciales filtradas.
- LEAKED_PASSWORD: Contraseña del par de credenciales filtradas.
Método HTTP y URL:
POST http://localhost:8080/createAssessment/
Cuerpo JSON de la solicitud:
{ "username":"LEAKED_USERNAME", "password":"LEAKED_PASSWORD" }
Para enviar tu solicitud, elige una de estas opciones:
curl
Guarda el cuerpo de la solicitud en un archivo llamado request.json
y ejecuta el siguiente comando:
curl -X POST \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"http://localhost:8080/createAssessment/"
PowerShell
Guarda el cuerpo de la solicitud en un archivo llamado request.json
y ejecuta el siguiente comando:
$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
Deberías recibir una respuesta JSON similar a la que se muestra a continuación:
{ "leakedStatus":"LEAKED" } OR { "leakedStatus":"NO_STATUS" }
Interpretar el veredicto y tomar medidas
La respuesta de la evaluación muestra si se filtraron las credenciales y te proporciona información que puedes usar para tomar las medidas adecuadas para proteger a tus usuarios.
En la siguiente tabla, se enumeran las acciones recomendadas que puedes realizar cuando se detecta una contraseña filtrada:
Se detectó una contraseña filtrada | Acciones para proteger a tu usuario |
---|---|
Durante el acceso |
|
Durante la creación de la cuenta o el restablecimiento de la contraseña |
|
Si aún no usas un proveedor de MFA en tu sitio, puedes usar la capacidad de MFA de reCAPTCHA.
¿Qué sigue?
- Obtén más información para usar la autenticación de varios factores (MFA)
- Obtén información para proteger las cuentas de los usuarios con la Protección de cuentas de reCAPTCHA