Este documento mostra como usar a defesa por SMS do reCAPTCHA para detetar e evitar ataques de bombeamento de SMS em empresas que dependem de SMS para a autenticação de dois fatores (2FA) ou a validação por telefone, que é um potencial alvo de fraude de custos de SMS.
A autenticação baseada em SMS (2FA e início de sessão) é uma norma da indústria para a segurança de início de sessão e registo, mas não oferece proteção contra fraudes de custos por SMS nem fraudes de bombeamento de SMS. Antes de enviar uma SMS, a defesa por SMS do reCAPTCHA fornece-lhe uma pontuação de risco que indica a probabilidade de esse número de telefone cometer fraude de custos por SMS. Com base nesta pontuação, pode permitir ou bloquear mensagens SMS fraudulentas antes de serem enviadas para o seu fornecedor de SMS.
A pontuação de risco da defesa por SMS do reCAPTCHA funciona de forma inversa em comparação com a pontuação global do reCAPTCHA. Uma pontuação de risco de defesa de SMS do reCAPTCHA de 0,0 mostra uma confiança baixa de ocorrência de fraude de tarifação por SMS; uma pontuação de risco de 1,0 mostra uma confiança elevada de ocorrência de fraude de tarifação por SMS. Para mais informações sobre as pontuações do reCAPTCHA, consulte o artigo Interpretar avaliações para Websites. Se estiver a usar o Firebase Authentication ou a Identity Platform, consulte a documentação da Identity Platform.
Para mais informações, consulte o blogue de defesa por SMS do reCAPTCHA.
Antes de começar
Consoante seja um utilizador existente do reCAPTCHA ou um novo utilizador, siga as instruções no separador adequado:
Utilizador existente do reCAPTCHA
Se já usa o reCAPTCHA, ative a defesa por SMS do reCAPTCHA no seu Google Cloud projeto:
Na Google Cloud consola, aceda à página do reCAPTCHA.
Verifique se o nome do seu projeto aparece no seletor de recursos.
Se não vir o nome do seu projeto, clique no seletor de recursos e, de seguida, selecione o seu projeto.
Clique em
Definições.No painel Defesa contra SMS, clique em Configurar.
Clique no botão para ativar e clique em Guardar.
A ativação da defesa por SMS do reCAPTCHA ativa o Account Defender se ainda não estiver ativado.
A ativação da defesa por SMS do reCAPTCHA pode demorar alguns minutos a propagar-se aos nossos sistemas. Depois de a ativação da funcionalidade ser propagada aos nossos sistemas, deve começar a receber respostas relacionadas com a defesa por SMS do reCAPTCHA como parte das avaliações.
Novo utilizador do reCAPTCHA
Se for a primeira vez que usa o reCAPTCHA, faça o seguinte:
-
Consoante pretenda usar a defesa por SMS do reCAPTCHA num Website ou numa aplicação para dispositivos móveis, siga estes passos para integrar o reCAPTCHA:
Website
Aplicação para dispositivos móveis
- Crie uma chave baseada em pontuação para a sua aplicação para dispositivos móveis.
- Integre o reCAPTCHA com uma app iOS ou uma app Android
- Ative a
defesa por SMS do reCAPTCHA no seu Google Cloud projeto:
Na Google Cloud consola, aceda à página do reCAPTCHA.
Verifique se o nome do seu projeto aparece no seletor de recursos.
Se não vir o nome do seu projeto, clique no seletor de recursos e, de seguida, selecione o seu projeto.
Clique em
Definições.No painel Defesa contra SMS, clique em Configurar.
Clique no botão para ativar e clique em Guardar.
A ativação da defesa por SMS do reCAPTCHA ativa o Account Defender se ainda não estiver ativado.
A ativação da defesa por SMS do reCAPTCHA pode demorar alguns minutos a propagar-se aos nossos sistemas. Depois de a ativação da funcionalidade ser propagada aos nossos sistemas, deve começar a receber respostas relacionadas com a defesa por SMS do reCAPTCHA como parte das avaliações.
Crie uma avaliação com o número de telefone
Para a defesa por SMS do reCAPTCHA, crie avaliações com o token gerado pela função execute()
e o número de telefone, através das bibliotecas de cliente do reCAPTCHA ou da API REST do seu back-end.
Este documento mostra como criar uma avaliação através da API REST. Para saber como criar uma avaliação através das bibliotecas de cliente, consulte o artigo Crie avaliações.
Antes de criar uma avaliação, faça o seguinte:
Configure a autenticação para o reCAPTCHA.
O método de autenticação que escolher depende do ambiente onde o reCAPTCHA está configurado. A tabela seguinte ajuda a escolher o método de autenticação adequado e a interface suportada para configurar a autenticação:
Ambiente Interface Método de autenticação Google Cloud - REST
- Bibliotecas cliente
Use contas de serviço anexadas. Nas instalações ou num fornecedor de nuvem diferente REST Use chaves da API ou a Workload Identity Federation. Se quiser usar chaves da API, recomendamos que as proteja aplicando restrições de chaves da API.
Bibliotecas cliente Use o seguinte:
- Para Python ou Java, use chaves da API ou a Workload Identity Federation.
Se quiser usar chaves da API, recomendamos que as proteja aplicando restrições de chaves da API.
- Para outros idiomas, use a federação de identidades da carga de trabalho.
Escolha um identificador de conta estável
accountId
que não seja alterado com frequência pelo utilizador e faculte-o à avaliação no métodoprojects.assessments.create
. Este identificador de conta estável deve ter o mesmo valor para todos os eventos relacionados com o mesmo utilizador. Pode indicar o seguinte como identificador da conta:Identificadores de utilizadores
Se cada conta puder ser associada de forma exclusiva a um nome de utilizador, um endereço de email ou um número de telefone estável, pode usá-lo como o
accountId
. Quando fornece esses identificadores entre sites (identificadores que podem ser reutilizados em vários sites), o reCAPTCHA usa estas informações para melhorar a proteção das suas contas de utilizador com base em modelos entre sites, ao sinalizar identificadores de contas abusivas e usar o conhecimento de padrões de abuso entre sites relacionados com estes identificadores.Em alternativa, se tiver um ID do utilizador interno associado exclusivamente a cada conta, pode fornecê-lo como o
accountId
.Com hash ou encriptadas
Se não tiver um ID de utilizador interno associado exclusivamente a cada conta, pode transformar qualquer identificador estável num identificador de conta opaco e específico do site. Este identificador continua a ser necessário para o reCAPTCHA account defender compreender os padrões de atividade do utilizador e detetar comportamentos anómalos, mas não é partilhado com outros sites.
Escolha um identificador de conta estável e torne-o opaco antes de o enviar para o reCAPTCHA através de encriptação ou aplicação de hash:
Encriptação (recomendada): encriptar o identificador da conta através de um método de encriptação determinístico que produz um texto cifrado estável. Para ver instruções detalhadas, consulte o artigo sobre como encriptar dados de forma determinística. Quando escolhe a encriptação simétrica em vez da aplicação de hash, não precisa de manter um mapeamento entre os seus identificadores de utilizadores e os identificadores de utilizadores opacos correspondentes. Descriptografar os identificadores opacos devolvidos pelo reCAPTCHA para os transformar no identificador do utilizador.
aplicar hash: recomendamos que aplique hash ao identificador da conta através do método SHA256-HMAC com um sal personalizado à sua escolha. Uma vez que os hashes são apenas de sentido único, tem de manter um mapeamento entre os hashes gerados e os identificadores de utilizadores para poder mapear o identificador da conta com hash que é devolvido às contas originais.
Adicione o parâmetro accountId
e o número de telefone no formato E.164 como o
UserId
a
validar na avaliação no 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.
- TOKEN: token devolvido pela chamada
grecaptcha.enterprise.execute()
. - KEY_ID: a chave baseada em pontuação que instalou no seu Website.
- ACCOUNT_ID: um identificador de uma conta de utilizador que é exclusivo do seu Website.
- PHONE_NUMBER: o número de telefone que tem de ser verificado quanto à maliciosidade. O número de telefone tem de estar no formato E.164 e não deve ser alvo de hash nem encriptado.
Método HTTP e URL:
POST https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments
Corpo JSON do pedido:
{ "event": { "token": "TOKEN", "siteKey": "KEY_ID", "userInfo": { "accountId": "ACCOUNT_ID", "userIds": [ { "phoneNumber": "PHONE_NUMBER" } ] } } }
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:
{ "event": { … }, "name": "ASSESSMENT_ID", "phoneFraudAssessment": { "smsTollFraudVerdict": { "risk": 0.3 } } }
A resposta que recebe inclui a pontuação risk
no campo
phoneFraudAssessment.smsTollFraudVerdict
. Quanto mais elevada for a pontuação, maior é a probabilidade de o número de telefone ser arriscado. Quanto mais baixa for a pontuação, maior é a probabilidade de o número de telefone ser legítimo.
É responsável pelas ações que tomar com base na avaliação.
Para a integração mais simples, pode definir limites em phoneFraudAssessment.smsTollFraudVerdict.risk
para contribuir para a sua decisão.
Anote a avaliação
Para acompanhar o tráfego de SMS e melhorar a deteção de fraudes, tem de anotar as avaliações no prazo de 10 minutos após o envio da SMS ou após a validação bem-sucedida do número de telefone.
Anota uma avaliação enviando um pedido para o método projects.assessments.annotate
com o ID da avaliação. No corpo desse pedido, inclua o número de telefone no formato E.164 no campo phoneAuthenticationEvent
.
Para anotar uma avaliação, faça o seguinte:
Determine as informações e as etiquetas a adicionar no corpo JSON do pedido consoante o seu exemplo de utilização.
A tabela seguinte lista as etiquetas e os valores que pode usar para anotar eventos:
Etiqueta Descrição Exemplo de pedido reasons
Obrigatório. Uma etiqueta para apoiar as suas avaliações.
Forneça detalhes de eventos em tempo real na etiqueta
reasons
alguns segundos ou minutos após o evento, porque influenciam a deteção em tempo real.Valores possíveis:
INITIATED_TWO_FACTOR
: é enviado um código de validação por SMS.PASSED_TWO_FACTOR
: o código de validação foi validado com êxito.FAILED_TWO_FACTOR
: o código de validação é inválido.
{ "reasons": ["INITIATED_TWO_FACTOR"], "phoneAuthenticationEvent": { "phoneNumber": "+18005550175" } }
annotation
Opcional. Uma etiqueta para indicar a legitimidade das avaliações.
Forneça factos sobre eventos de início de sessão e registo para validar ou corrigir as suas avaliações de risco na etiqueta
annotation
.Valores possíveis:
LEGITIMATE
ouFRAUDULENT
.Recomendamos que envie estas informações alguns segundos ou minutos após o evento, uma vez que influenciam a deteção em tempo real.
{ "annotation": "LEGITIMATE" }
Crie um pedido de anotação com as etiquetas adequadas.
Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
- ASSESSMENT_ID: valor do campo
name
devolvido pela chamadaprojects.assessments.create
. - ANNOTATION: opcional. Uma etiqueta para indicar se a avaliação é legítima ou fraudulenta.
- REASONS: motivos que fundamentam a sua anotação. Para ver a lista de valores possíveis, consulte os valores de motivos.
- PHONE_NUMBER: o número de telefone que foi avaliado. O número de telefone tem de estar no formato E.164 e não deve ser alvo de hash nem encriptado.
Método HTTP e URL:
POST https://recaptchaenterprise.googleapis.com/v1/ASSESSMENT_ID:annotate
Corpo JSON do pedido:
{ "annotation": ANNOTATION, "reasons": REASONS, "phoneAuthenticationEvent": { "phoneNumber": "PHONE_NUMBER" } }
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/ASSESSMENT_ID:annotate"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/ASSESSMENT_ID:annotate" | Select-Object -Expand ContentDeve receber um código de estado de êxito (2xx) e uma resposta vazia.
- ASSESSMENT_ID: valor do campo
O que se segue?
- Saiba mais sobre as funcionalidades de proteção de contas de utilizador do reCAPTCHA.