Esta página descreve como usar o recurso de detecção de vazamento de senha do reCAPTCHA para detectar vazamentos de senhas e credenciais violadas e impedir invasões de conta (ATOs, na sigla em inglês) e ataques de preenchimento de credenciais. Com o reCAPTCHA, é possível fazer auditorias regulares das credenciais do usuário (senhas) como parte de qualquer avaliação para garantir que elas não tenham sido vazadas ou violadas. Para realizar essas avaliações, o Google usa o recurso Check-up de senha.
Antes de começar
Make sure that billing is enabled for your Google Cloud project.
O reCAPTCHA exige que o faturamento seja vinculado e ativado no projeto para usar o recurso de detecção de vazamento de senhas. É possível ativar o faturamento usando um cartão de crédito ou um ID de projeto atual do Google Cloud. Se precisar de ajuda com o faturamento, entre em contato com o suporte do Cloud Billing.
Verificar se há credenciais violadas e vazadas
É possível verificar se um conjunto de credenciais foi comprometido usando funções criptográficas ou o contêiner do Docker.
O contêiner do Docker é um cliente de código aberto que implementa a computação segura multilateral necessária para preservar a privacidade do usuário final e procurar vazamentos de senha com segurança. Para mais informações, consulte o repositório do GitHub. O contêiner do Docker abstrai a complexidade da implementação dos algoritmos criptográficos e simplifica o processo de instalação. Ele também permite hospedar o app de contêiner na sua infraestrutura.
Função criptográfica
Para verificar se um conjunto de credenciais foi comprometido, use a detecção de vazamento de senhas ao criar avaliações para ações, como logins, alterações e redefinições de senha.
Para verificar se há vazamentos de senhas e credenciais violadas, siga estas etapas:
- Gerar parâmetros de solicitação.
- Crie uma avaliação para detectar vazamentos de senha.
- Verificar as credenciais vazadas de uma avaliação.
- Interprete o veredito e tome medidas.
Gerar parâmetros de solicitação
Calcule os parâmetros de solicitação necessários usando as funções criptográficas exigidas pelo protocolo de alta privacidade. O reCAPTCHA fornece bibliotecas Java e TypeScript para ajudar a gerar esses campos:
Para criar verificações de verificação de senha, crie um objeto
PasswordCheckVerifier
.PasswordCheckVerifier verifier = new PasswordCheckVerifier();
Para iniciar uma verificação, chame
PasswordCheckVerifier#createVerification
. Esse método usa o nome de usuário e a senha para calcular os parâmetros e realizar a verificação de senha.PasswordCheckVerification verification = verifier.createVerification("username", "password").get();
Crie uma avaliação usando os parâmetros de verificação.
byte[] lookupHashPrefix = verification.getLookupHashPrefix(); byte[] encryptedUserCredentialsHash = verification.getEncryptedUserCredentialsHash();
As matrizes de bytes
lookupHashPrefix
eencryptedUserCredentialsHash
contêm os parâmetros necessários para iniciar uma verificação de senhaAssessment
.
Criar uma avaliação para detectar vazamentos de senhas
Use o método projects.assessments.create
.
Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
- PROJECT_ID: o ID do projeto do Google Cloud
- LOOKUP_HASH_PREFIX: prefixo do hash SHA-256 do nome de usuário
- ENCRYPTED_USER_CREDENTIALS_HASH: hash Scrypt de credenciais do usuário criptografadas
Método HTTP e URL:
POST https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments
Corpo JSON da solicitação:
{ "private_password_leak_verification": { "lookup_hash_prefix": "LOOKUP_HASH_PREFIX", "encrypted_user_credentials_hash": "ENCRYPTED_USER_CREDENTIALS_HASH" } }
Para enviar a solicitação, escolha uma destas opções:
curl
Salve o corpo da solicitação em um arquivo com o nome request.json
e execute o comando a seguir:
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
Salve o corpo da solicitação em um arquivo com o nome request.json
e execute o comando a seguir:
$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
Você receberá uma resposta JSON semelhante a esta:
{ "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 credenciais vazadas de uma avaliação
Extraia os campos
reEncryptedUserCredentials
e encryptedLeakMatchPrefixes
da resposta da avaliação e os transmita ao
objeto de verificador para determinar se as credenciais foram vazadas ou não.
PasswordCheckResult result = verifier.verify(verification,
result.getReEncryptedUserCredentials(),
result.getEncryptedLeakMatchPrefixes()
).get();
System.out.println("Credentials leaked: " + result.areCredentialsLeaked());
Exemplo de código
Para saber como implementar a detecção de vazamento de senha usando TypeScript, consulte o exemplo de código do TypeScript no GitHub.
O exemplo de código abaixo mostra como implementar a detecção de vazamento de senha usando Java:
Java
Para autenticar no reCAPTCHA, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Contêiner do Docker
Para verificar se as credenciais foram vazadas, envie com segurança o par de credenciais de nome de usuário e senha para o contêiner usando uma conexão localhost ou configurando o HTTPS no contêiner. O contêiner, em seguida, criptografa essas credenciais antes de fazer uma solicitação de API para o reCAPTCHA e verifica o resultado recriptografado localmente.
Para enviar solicitações ao contêiner do Docker, siga estas etapas:
- Configure o Docker.
- Prepare um ambiente para o contêiner do Docker.
- Crie e execute o contêiner.
- Enviar solicitações HTTP para o contêiner.
- Interprete o veredito e tome medidas.
Preparar para executar o contêiner do Docker
Escolha uma estratégia de autenticação.
O contêiner oferece suporte à configuração de credenciais padrão do aplicativo ou pode aceitar uma chave de API para autenticação.
Configure o contêiner do PLD para ser executado com HTTPS ou em um modo de demonstração somente para localhost.
Como o contêiner aceita credenciais sensíveis do usuário final (nomes de usuário e senhas), ele precisa ser executado com HTTPS ou no modo de demonstração somente para localhost. Para orientações sobre a configuração do HTTPS, consulte o README no GitHub.
As etapas a seguir usam a autenticação de chave de API e executam o cliente no modo de demonstração somente para localhost.
Criar e executar o contêiner do Docker
Clone o repositório:
git clone github.com/GoogleCloudPlatform/reCAPTCHA-PLD
Criar o contêiner:
docker build . -t pld-local
Inicie o contêiner:
docker run --network host \ -e RECAPTCHA_PROJECT_ID=PROJECT_ID \ -e GOOGLE_CLOUD_API_KEY=API_KEY \ pld-local
O contêiner é iniciado e começa a atender solicitações na porta 8080 do localhost.
Enviar solicitações de localhost
Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
- LEAKED_USERNAME: nome de usuário do par de credenciais vazado.
- LEAKED_PASSWORD: senha do par de credenciais vazado.
Método HTTP e URL:
POST http://localhost:8080/createAssessment/
Corpo JSON da solicitação:
{ "username":"LEAKED_USERNAME", "password":"LEAKED_PASSWORD" }
Para enviar a solicitação, escolha uma destas opções:
curl
Salve o corpo da solicitação em um arquivo com o nome request.json
e execute o comando a seguir:
curl -X POST \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"http://localhost:8080/createAssessment/"
PowerShell
Salve o corpo da solicitação em um arquivo com o nome request.json
e execute o comando a seguir:
$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
Você receberá uma resposta JSON semelhante a esta:
{ "leakedStatus":"LEAKED" } OR { "leakedStatus":"NO_STATUS" }
Interpretar o veredito e tomar medidas
A resposta da avaliação mostra se as credenciais foram vazadas e fornece informações que podem ser usadas para tomar as medidas adequadas e proteger seus usuários.
A tabela a seguir lista as ações recomendadas que você pode realizar quando uma senha vazada é detectada:
Senha vazada detectada | Ações para proteger seu usuário |
---|---|
Durante o login |
|
Durante a criação da conta ou redefinição de senha |
|
Se você ainda não usa um provedor de MFA no seu site, use o recurso de MFA do reCAPTCHA.
A seguir
- Saiba como usar a autenticação multifator (MFA)
- Saiba como proteger as contas dos usuários usando o Defensor da conta do reCAPTCHA