Detecte e evite fraudes de SMS

Neste documento, mostramos como usar a proteção contra fraudes de pedágio por SMS do reCAPTCHA para detectar e evitar ataques de bombeamento de SMS em empresas que dependem de SMS para autenticação de dois fatores (2FA, na sigla em inglês) ou verificação por telefone, que é um possível alvo de fraude de cobrança por SMS.

A 2FA por SMS é um padrão do setor para segurança de login e inscrição, mas não fornece proteção contra fraudes de cobrança de SMS ou de bombeamento de SMS.

A proteção contra fraudes de pedágio do reCAPTCHA por SMS ajuda a proteger sua empresa contra fraudes de ligações telefônicas ou de bombeamento de SMS, mantendo a conveniência da autenticação baseada em SMS. A proteção contra fraudes de tarifas de SMS do reCAPTCHA funciona como um filtro para o tráfego de SMS. Antes de enviar um SMS, a proteção contra fraude de tarifação de SMS do reCAPTCHA fornece uma pontuação de risco que indica a probabilidade desse número de telefone cometer fraude de cobrança de SMS. Com base nessa pontuação, é possível permitir ou bloquear mensagens SMS fraudulentas antes que elas sejam enviadas ao seu provedor de SMS.

Antes de começar

  • Prepare seu ambiente para o reCAPTCHA.
  • Ative a proteção contra fraudes de pedágio por SMS do reCAPTCHA no seu projeto do Google Cloud:

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

      Acessar o reCAPTCHA

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

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

    3. Clique em Configurações.

    4. Se o defensor da conta reCAPTCHA não estiver ativado para seu projeto, faça o seguinte:

      1. No painel Defensor da conta, clique em Ativar.
      2. Na caixa de diálogo Configurar o defensor da conta, clique em Ativar.
    5. No painel Proteção contra fraudes para ligações de SMS, clique em Configurar.

    6. Clique no botão de ativação Ativar e, depois, em Salvar.

    Pode levar alguns minutos para que a ativação da proteção contra fraudes por pedágio de SMS do reCAPTCHA seja propagada para nossos sistemas. Depois que a ativação do recurso for propagada para nossos sistemas, você vai começar a receber respostas relacionadas à proteção contra fraudes para pedágios de SMS do reCAPTCHA como parte das avaliações.

  • Crie uma chave baseada em pontuação para seu site ou aplicativo para dispositivos móveis.

Configurar a proteção contra fraudes de pedágio por SMS do reCAPTCHA

Para configurar a proteção contra fraudes de pedágio por SMS do reCAPTCHA no seu site ou aplicativo para dispositivos móveis, faça o seguinte:

  1. Integre o reCAPTCHA ao seu site ou aplicativo para dispositivos móveis.

  2. Crie uma avaliação com o número de telefone.

  3. Faça anotações na avaliação.

Integrar o reCAPTCHA

Para integrar o reCAPTCHA ao seu site ou aplicativo para dispositivos móveis, siga um destes procedimentos:

Crie uma avaliação com seu número de telefone

Com o token gerado pela função execute(), crie uma avaliação usando as bibliotecas de cliente reCAPTCHA ou a API REST do back-end.

Neste documento, mostramos como criar uma avaliação usando a API REST. Para saber como criar uma avaliação usando 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 apropriado 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 as chaves de API ou a federação de identidade da carga de trabalho.

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

    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 o forneça à 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 o 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, você poderá usá-las como accountId. Quando você fornece esses identificadores entre sites (que podem ser reutilizados entre sites), o reCAPTCHA usa essas informações para melhorar a proteção das contas de usuário com base em modelos entre sites. Ele sinaliza identificadores de conta abusivos e usa o conhecimento de padrões de abuso entre sites relacionados a eles.

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

    Com hash ou criptografado

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

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

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

    • hash: recomendamos gerar hash do identificador da conta usando o método SHA256-HMAC com um sal 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 mapear o identificador de conta com hash 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, faça as substituições a seguir:

  • PROJECT_ID: é seu ID do projeto no Google Cloud.
  • TOKEN: token retornado da chamada grecaptcha.enterprise.execute().
  • KEY_ID: a chave com base na pontuação que você instalou no site.
  • ACCOUNT_ID: um identificador de conta de usuário exclusivo do seu site.
  • PHONE_NUMBER: o número de telefone que precisa ser verificado quanto a mal-intenção. O número de telefone precisa estar no formato E.164 e não pode ser criptografado 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 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:


{
  "event": {
     …
  },
  "name": "ASSESSMENT_ID",
  "smsFraudAssessment": {
    "smsFraudRisk": 0.3
  }
}

A resposta recebida inclui a pontuação smsFraudRisk no campo smsFraudAssessment . 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 que o número seja legítimo.

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

Anote 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 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 dela. No corpo dessa solicitação, 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 os rótulos a serem adicionados no 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 do evento 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 apropriados.

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

    • ASSESSMENT_ID: valor do campo name retornado da chamada projects.assessments.create.
    • ANNOTATION: opcional. Um rótulo que indica se a avaliação é legítima ou fraudulenta.
    • REASONS: motivos que apoiam sua anotação. Para 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 criptografado 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 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/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 de êxito (2xx) e uma resposta vazia.

A seguir