Detectar e evitar fraudes por SMS

Este documento mostra como usar a defesa por SMS para detectar e evitar ataques de bombeamento de SMS em empresas que dependem de SMS para autenticação de dois fatores (2FA) ou verificação por telefone, que é um alvo potencial para fraude de cobrança por SMS.

A autenticação baseada em SMS (autenticação de dois fatores e login) é um padrão do setor para segurança de login e inscrição, mas não oferece proteção contra fraudes de cobrança ou de sobrecarga de SMS. Antes de enviar um SMS, a Defesa de SMS fornece uma pontuação de risco que indica a probabilidade de o número de telefone cometer fraude de cobrança por SMS. Com base nessa pontuação, você pode permitir ou bloquear mensagens SMS fraudulentas antes que elas sejam enviadas ao seu provedor de SMS.

A pontuação de risco da Defesa de SMS funciona de maneira inversa em comparação com a pontuação global do reCAPTCHA. Uma pontuação de risco de defesa de SMS de 0,0 mostra baixa confiança de que uma fraude de cobrança por SMS vai ocorrer. Uma pontuação de risco de 1,0 mostra alta confiança de que uma fraude de cobrança por SMS vai ocorrer. Para mais informações sobre as pontuações do reCAPTCHA, consulte Interpretar avaliações de sites. Se você estiver usando o Firebase Authentication ou o Identity Platform, consulte a documentação do Identity Platform.

Para mais informações, consulte o blog Defesa de SMS.

Antes de começar

Dependendo se você já usa o reCAPTCHA ou se é um usuário novo, siga as instruções na guia apropriada:

Usuário atual do reCAPTCHA

Se você já usa o reCAPTCHA, ative a Defesa de SMS no seu projeto Google Cloud :

  1. No console Google Cloud , acesse a página do reCAPTCHA.

    Acessar o reCAPTCHA

  2. Verifique se o nome do projeto aparece no seletor de recursos.

    Se você não vir o nome do projeto, clique no seletor de recursos e selecione seu projeto.

  3. Clique em Configurações.

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

  5. Clique no botão Ativar e em Salvar.

    Pode levar alguns minutos para que a ativação da Defesa de SMS seja propagada nos nossos sistemas. Depois que a ativação do recurso for propagada para nossos sistemas, você vai começar a receber respostas relacionadas à Defesa de SMS como parte das avaliações.

Novo usuário do reCAPTCHA

Se você não conhece o reCAPTCHA, faça o seguinte:

  1. Dependendo de onde você quer usar a Defesa de SMS, em um site ou aplicativo para dispositivos móveis, siga estas etapas para integrar o reCAPTCHA:

  2. Ative a Defesa de SMS no seu projeto Google Cloud :
    1. No console Google Cloud , acesse a página do reCAPTCHA.

      Acessar o reCAPTCHA

    2. Verifique se o nome do projeto aparece no seletor de recursos.

      Se você não vir o nome do projeto, clique no seletor de recursos e selecione seu projeto.

    3. Clique em Configurações.

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

    5. Clique no botão Ativar e em Salvar.

      Pode levar alguns minutos para que a ativação da Defesa de SMS seja propagada nos nossos sistemas. Depois que a ativação do recurso for propagada para nossos sistemas, você vai começar a receber respostas relacionadas à Defesa de SMS como parte das avaliações.

Criar uma avaliação com o número de telefone

Para a Defesa de SMS, crie testes com o token gerado pela função execute() e o número de telefone usando as bibliotecas de cliente do reCAPTCHA ou a API REST do seu back-end.

Este documento mostra como criar uma avaliação usando a API REST. Para saber como criar uma avaliação usando as bibliotecas de cliente, consulte Criar avaliações.

Antes de criar uma avaliação, faça o seguinte:

  • Configure a autenticação no reCAPTCHA.

    O método de autenticação escolhido depende do ambiente em que o reCAPTCHA está configurado. A tabela a seguir ajuda você a escolher o método de autenticação adequado e a interface compatível para configurar a autenticação:

    Ambiente Interface Método de autenticação
    Google Cloud
    • REST
    • Bibliotecas de cliente
    Use contas de serviço anexadas.
    No local ou em outro provedor de nuvem REST Use chaves de API ou a federação de identidade da carga de trabalho.

    Se você quiser usar chaves de API, recomendamos protegê-las aplicando restrições.

    Bibliotecas de cliente

    Use o seguinte:

  • Escolha um identificador de conta estável accountId que não seja alterado com frequência pelo usuário e forneça-o à avaliação no método projects.assessments.create. Esse identificador de conta estável precisa ter o mesmo valor para todos os eventos relacionados ao mesmo usuário. Você pode fornecer o seguinte como identificador da conta:

    Identificadores de usuários

    Se cada conta puder ser associada de forma exclusiva a um nome de usuário, endereço de e-mail ou número de telefone estável, use isso como o accountId. Quando você fornece esses identificadores entre sites (que podem ser reutilizados em vários sites), o reCAPTCHA usa essas informações para melhorar a proteção das suas contas de usuário com base em modelos entre sites. Para isso, ele sinaliza identificadores de contas abusivas e usa o conhecimento de padrões de abuso entre sites relacionados a esses identificadores.

    Como alternativa, se você tiver um ID de usuário interno associado exclusivamente a cada conta, forneça-o como accountId.

    Criptografadas ou transformadas em hash

    Se você não tiver um ID de usuário interno associado de maneira exclusiva a cada conta, poderá transformar qualquer identificador estável em um identificador de conta opaco e específico do site. Esse identificador ainda é necessário para que o reCAPTCHA Account Defender entenda os padrões de atividade do usuário e detecte comportamentos anômalos, mas não é compartilhado em outros sites.

    Escolha um identificador de conta estável e o torne opaco antes de enviar ao reCAPTCHA usando criptografia ou hash:

    • criptografia (recomendado): criptografe o identificador da conta usando um método de criptografia determinista que produza um texto cifrado estável. Para instruções detalhadas, consulte criptografar dados de forma determinística. Ao escolher a criptografia simétrica em vez do hash, não é necessário manter um mapeamento entre seus identificadores de usuário e os identificadores opacos correspondentes. Descriptografe os identificadores opacos retornados pelo reCAPTCHA para transformá-los no identificador do usuário.

    • Geração de hash: recomendamos gerar hash do identificador da conta usando o método SHA256-HMAC com um salt personalizado de sua escolha. Como os hashes são unidirecionais, é necessário manter um mapeamento entre os hashes gerados e os identificadores de usuário para que seja possível mapear o identificador de conta com hash que é retornado para as contas originais.

Adicione o parâmetro accountId e o número de telefone no formato E.164 como o UserId para verificar na avaliação no 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 Google Cloud .
  • TOKEN: token retornado da chamada grecaptcha.enterprise.execute().
  • KEY_ID: a chave baseada em pontuação que você instalou no seu site.
  • ACCOUNT_ID: um identificador de uma conta de usuário exclusiva do seu site.
  • PHONE_NUMBER: o número de telefone que precisa ser verificado quanto à malícia. O número de telefone precisa estar no formato E.164 e não pode ser codificado com hash ou criptografado.

Método HTTP e URL:

POST https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments

Corpo JSON da solicitação:


{
  "event": {
    "token": "TOKEN",
    "siteKey": "KEY_ID",
    "userInfo": {
      "accountId": "ACCOUNT_ID",
      "userIds": [
        {
          "phoneNumber": "PHONE_NUMBER"
        }
      ]
    }
  }
}

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 abaixo:

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 abaixo:

$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:


{
  "event": {
     …
  },
  "name": "ASSESSMENT_ID",
  "phoneFraudAssessment": {
    "smsTollFraudVerdict": {
      "risk": 0.3
    }
  }
}

A resposta que você recebe inclui a pontuação risk no campo phoneFraudAssessment.smsTollFraudVerdict . Quanto maior a pontuação, maior a probabilidade de o número de telefone ser arriscado. Quanto menor a pontuação, maior a probabilidade de o número de telefone ser legítimo.

Você é responsável pelas ações que tomar com base na avaliação. Para a integração mais simples, defina limites em phoneFraudAssessment.smsTollFraudVerdict.risk para contribuir com sua decisão.

Anotar a avaliação

Para acompanhar o tráfego de SMS e melhorar a detecção de fraudes, anote as avaliações em até 10 minutos após o envio do SMS ou após a verificação do número de telefone.

Para anotar uma avaliação, envie uma solicitação ao método projects.assessments.annotate com o ID da avaliação. No corpo dessa solicitação, inclua o número de telefone no formato E.164 no campo phoneAuthenticationEvent.

Para fazer anotações em uma avaliação, faça o seguinte:

  1. Determine as informações e os rótulos a serem adicionados ao corpo JSON da solicitação, dependendo do seu caso de uso.

    A tabela a seguir lista os rótulos e valores que você pode usar para anotar eventos:

    Rótulo Descrição Exemplo de solicitação
    reasons

    Obrigatório. Um rótulo para apoiar suas avaliações.

    Forneça detalhes de eventos em tempo real no rótulo reasons alguns segundos ou minutos após o evento, porque eles influenciam a detecção em tempo real.

    Valores possíveis:

    • INITIATED_TWO_FACTOR: um código de verificação é enviado por SMS.
    • PASSED_TWO_FACTOR: o código de verificação foi verificado.
    • FAILED_TWO_FACTOR: o código de verificação é inválido.
        {
          "reasons": ["INITIATED_TWO_FACTOR"],
          "phoneAuthenticationEvent": {
            "phoneNumber": "+18005550175"
          }
        }
        
    annotation

    Opcional. Um rótulo para indicar a legitimidade das avaliações.

    Forneça fatos sobre eventos de login e registro para validar ou corrigir suas avaliações de risco no rótulo annotation.

    Valores possíveis: LEGITIMATE ou FRAUDULENT.

    Recomendamos enviar essas informações alguns segundos ou minutos após o evento, porque isso influencia a detecção em tempo real.

      {
       "annotation": "LEGITIMATE"
      }
      
  2. Crie uma solicitação de anotação com os rótulos adequados.

    Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

    • ASSESSMENT_ID: valor do campo name retornado pela chamada projects.assessments.create.
    • ANNOTATION: opcional. Um rótulo para indicar se a avaliação é legítima ou fraudulenta.
    • REASONS: motivos que apoiam sua anotação. Para conferir a lista de valores possíveis, consulte valores de motivos.
    • PHONE_NUMBER: o número de telefone que foi avaliado. O número de telefone precisa estar no formato E.164 e não pode ser codificado com hash ou criptografado.

    Método HTTP e URL:

    POST https://recaptchaenterprise.googleapis.com/v1/ASSESSMENT_ID:annotate

    Corpo JSON da solicitação:

    {
      "annotation": ANNOTATION,
      "reasons": REASONS,
      "phoneAuthenticationEvent": {
        "phoneNumber": "PHONE_NUMBER"
      }
    }
    

    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 abaixo:

    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

    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/ASSESSMENT_ID:annotate" | Select-Object -Expand Content

    Você receberá um código de status bem-sucedido (2xx) e uma resposta vazia.

A seguir