Detetar e prevenir fraudes por SMS

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:

  1. Na Google Cloud consola, aceda à página do reCAPTCHA.

    Aceder ao reCAPTCHA

  2. 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.

  3. Clique em Definições.

  4. No painel Defesa contra SMS, clique em Configurar.

  5. 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:

  1. 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:

  2. Ative a defesa por SMS do reCAPTCHA no seu Google Cloud projeto:
    1. Na Google Cloud consola, aceda à página do reCAPTCHA.

      Aceder ao reCAPTCHA

    2. 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.

    3. Clique em Definições.

    4. No painel Defesa contra SMS, clique em Configurar.

    5. 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:

  • 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étodo projects.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:

  1. 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 ou FRAUDULENT.

    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"
      }
      
  2. 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 chamada projects.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 Content

    Deve receber um código de estado de êxito (2xx) e uma resposta vazia.

O que se segue?