Esta página descreve como usar a funcionalidade de defesa de palavras-passe do reCAPTCHA para detetar fugas de palavras-passe e credenciais violadas para evitar a apropriação de contas (ATOs) e ataques de preenchimento de credenciais. Com o reCAPTCHA, pode realizar auditorias regulares das credenciais dos utilizadores (palavras-passe) como parte de qualquer avaliação para garantir que não foram divulgadas nem violadas. Para realizar estas avaliações, a Google usa a funcionalidade Verificação de Palavra-passe.
Antes de começar
Verify that billing is enabled for your Google Cloud project.
O reCAPTCHA requer que a faturação esteja associada e ativada no projeto para usar a funcionalidade de defesa de palavras-passe. Pode ativar a faturação através de um cartão de crédito ou de um ID de faturação do projeto existente Google Cloud . Se precisar de assistência com a faturação, contacte o apoio técnico do Cloud Billing.
Verifique se existem credenciais violadas e roubadas
Pode verificar se um conjunto de credenciais foi comprometido através de funções criptográficas ou do contentor Docker.
O contentor Docker é um cliente de código aberto que implementa a computação multipartidária segura necessária para preservar a privacidade do utilizador final e procurar fugas de palavras-passe de forma segura. Para mais informações, consulte o repositório do GitHub. O contentor Docker abstrai a complexidade da implementação dos algoritmos criptográficos e simplifica o processo de instalação. Também lhe permite alojar a app de contentor na sua infraestrutura.
Função criptográfica
Para verificar se um conjunto de credenciais foi comprometido, use a defesa por palavra-passe quando criar avaliações para ações como inícios de sessão, alterações de palavras-passe e reposições de palavras-passe.
Para verificar se existem fugas de palavras-passe e credenciais violadas, conclua os seguintes passos:
- Gerar parâmetros de pedido.
- Crie uma avaliação para detetar fugas de palavras-passe.
- Valide credenciais roubadas de uma avaliação.
- Interprete o veredito e tome medidas.
Gere parâmetros de pedido
Calcule os parâmetros de pedido necessários através das funções criptográficas exigidas pelo protocolo de elevada privacidade. O reCAPTCHA fornece bibliotecas Java e TypeScript para ajudar na geração destes campos:
Para criar validações de verificação das palavras-passe, crie um objeto
PasswordCheckVerifier
.PasswordCheckVerifier verifier = new PasswordCheckVerifier();
Para iniciar uma validação, ligue para
PasswordCheckVerifier#createVerification
. Este método usa o nome de utilizador e a palavra-passe para calcular os parâmetros para fazer a verificação de palavras-passe.PasswordCheckVerification verification = verifier.createVerification("username", "password").get();
Crie uma avaliação através dos parâmetros de validaçã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 palavra-passeAssessment
.
Crie uma avaliação para detetar fugas de palavras-passe
Use o método
projects.assessments.create
.
Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
- PROJECT_ID: o ID do seu Google Cloud projeto
- LOOKUP_HASH_PREFIX: prefixo do prefixo do hash SHA-256 do nome de utilizador
- ENCRYPTED_USER_CREDENTIALS_HASH: hash Scrypt de credenciais de utilizador encriptadas
Método HTTP e URL:
POST https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments
Corpo JSON do pedido:
{ "private_password_leak_verification": { "lookup_hash_prefix": "LOOKUP_HASH_PREFIX", "encrypted_user_credentials_hash": "ENCRYPTED_USER_CREDENTIALS_HASH" } }
Para enviar o seu pedido, escolha uma destas opções:
curl
Guarde o corpo do pedido num ficheiro com o nome request.json
,
e execute o seguinte 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
Guarde o corpo do pedido num ficheiro com o nome request.json
,
e execute o seguinte 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
Deve receber uma resposta JSON semelhante à seguinte:
{ "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="] } }
Valide credenciais roubadas a partir de uma avaliação
Da resposta da avaliação, extraia os campos reEncryptedUserCredentials
e encryptedLeakMatchPrefixes
e transmita-os ao objeto de validação para determinar se as credenciais foram roubadas ou não.
PasswordCheckResult result = verifier.verify(verification,
result.getReEncryptedUserCredentials(),
result.getEncryptedLeakMatchPrefixes()
).get();
System.out.println("Credentials leaked: " + result.areCredentialsLeaked());
Exemplo de código
Node.js (TypeScript)
Para saber como implementar a deteção de fugas de palavras-passe através do Node.js (TypeScript), consulte o exemplo de código TypeScript no GitHub.
Java
Para se autenticar no reCAPTCHA, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
Contentor Docker
Para verificar se as credenciais são divulgadas, envie de forma segura o par de credenciais de nome de utilizador e palavra-passe para o contentor através de uma ligação localhost ou configurando o HTTPS no contentor. Em seguida, o contentor encripta estas credenciais antes de fazer um pedido de API ao reCAPTCHA e valida o resultado reencriptado localmente.
Para enviar pedidos para o contentor Docker, conclua os seguintes passos:
- Configure o Docker.
- Prepare um ambiente para o contentor Docker.
- Crie e execute o contentor.
- Enviar pedidos HTTP para o contentor.
- Interprete o veredito e tome medidas.
Prepare-se para executar o contentor do Docker
Escolha uma estratégia de autenticação.
O contentor suporta a definição de Credenciais padrão da aplicação ou pode aceitar uma chave da API para autenticação.
Configure o contentor da PLD para ser executado com HTTPS ou num modo de demonstração apenas localhost.
Uma vez que o contentor aceita credenciais confidenciais do utilizador final (nomes de utilizador e palavras-passe), tem de ser executado com HTTPS ou num modo de demonstração apenas para localhost. Para orientações sobre a configuração HTTPS, consulte o README no GitHub.
Os passos seguintes usam a autenticação da chave da API e executam o cliente no modo de demonstração apenas no localhost.
Crie e execute o contentor Docker
Clone o repositório:
git clone github.com/GoogleCloudPlatform/reCAPTCHA-PLD
Crie o contentor:
docker build . -t pld-local
Inicie o contentor:
docker run --network host \ -e RECAPTCHA_PROJECT_ID=PROJECT_ID \ -e GOOGLE_CLOUD_API_KEY=API_KEY \ pld-local
O contentor é iniciado e começa a publicar pedidos na porta 8080 de localhost.
Envie pedidos de localhost
Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
- LEAKED_USERNAME: nome de utilizador do par de credenciais roubadas.
- LEAKED_PASSWORD: palavra-passe do par de credenciais roubadas.
Método HTTP e URL:
POST http://localhost:8080/createAssessment/
Corpo JSON do pedido:
{ "username":"LEAKED_USERNAME", "password":"LEAKED_PASSWORD" }
Para enviar o seu pedido, escolha uma destas opções:
curl
Guarde o corpo do pedido num ficheiro com o nome request.json
,
e execute o seguinte comando:
curl -X POST \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"http://localhost:8080/createAssessment/"
PowerShell
Guarde o corpo do pedido num ficheiro com o nome request.json
,
e execute o seguinte 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
Deve receber uma resposta JSON semelhante à seguinte:
{ "leakedStatus":"LEAKED" } OR { "leakedStatus":"NO_STATUS" }
Interprete o veredito e tome medidas
A resposta da avaliação mostra se as credenciais foram roubadas e fornece-lhe informações que pode usar para tomar as medidas adequadas para proteger os seus utilizadores.
A tabela seguinte lista as ações recomendadas que pode realizar quando é detetada uma palavra-passe divulgada:
Palavra-passe divulgada detetada | Ações para proteger o utilizador |
---|---|
Durante o início de sessão |
|
Durante a criação da conta ou a reposição da palavra-passe |
|
Se ainda não estiver a usar um fornecedor de MFA no seu site, pode usar a capacidade de MFA do reCAPTCHA.
O que se segue?
- Saiba como usar a autenticação multifator (MFA)
- Saiba como proteger as contas dos utilizadores com o Account Defender do reCAPTCHA