Detectar e evitar fraudes de SMS

Neste documento, mostramos como usar a proteção contra fraude de cobrança por SMS do reCAPTCHA para detectar e impedir 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 possível alvo para fraude de cobrança por SMS.

A autenticação baseada em SMS (2FA e login) é um padrão do setor para login e segurança de inscrição, mas não oferece proteção contra fraudes de SMS ou Fraude de bombeamento de SMS. Antes de enviar um SMS, a proteção contra fraudes do reCAPTCHA SMS oferece com uma pontuação de risco que indica a probabilidade de esse 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.

Para mais informações, consulte o blog sobre proteção contra fraudes de pedágio de SMS reCAPTCHA.

Antes de começar

Se você já é um usuário do reCAPTCHA ou não para o reCAPTCHA, siga as instruções na guia correspondente:

Usuário do reCAPTCHA atual

Se você já for usuário do reCAPTCHA, ative a proteção contra fraudes de cobrança 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 projeto aparece no seletor de recursos.

    Se você não vir o nome do seu 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 sua 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 de cobrança por 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 de cobrança por SMS do reCAPTCHA 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 à proteção contra fraudes de cobrança por SMS do reCAPTCHA como parte das avaliações.

Novo usuário reCAPTCHA

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

  1. Dependendo se você quer usar a proteção contra fraudes de cobrança por SMS do reCAPTCHA em um site ou aplicativo para dispositivos móveis, siga estas etapas para integrar o reCAPTCHA:

  2. Ativar 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 seu 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 sua 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 de cobrança por 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 de tarifas de SMS do reCAPTCHA seja ativada se propagam 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 de cobrança por SMS do reCAPTCHA como parte das avaliações.

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

Para proteger contra fraudes por SMS do reCAPTCHA, crie avaliações com o token gerado pela função execute() e o número de telefone, usando o 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 para o reCAPTCHA.

    O método de autenticação escolhido depende do ambiente em que O reCAPTCHA está configurado. A tabela a seguir ajuda a escolher o método de autenticação adequado e a interface com suporte para configurá-la:

    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 de chaves de API.

    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 deve ter a o mesmo valor para todos os eventos relacionados ao mesmo usuário. Você pode informar o seguinte como a conta identificador:

    Identificadores de usuários

    Se cada conta puder ser associada exclusivamente a um nome de usuário, endereço de e-mail ou número de telefone estável, você poderá usá-lo como o accountId. Quando você fornece esses identificadores entre sites (identificadores 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, sinalizando identificadores de contas abusivas e usando o conhecimento de padrões de abuso entre sites relacionados a esses identificadores.

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

    Criptografado ou com hash

    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 e específico do site. Esse identificador ainda é necessário para que o Account Defender do reCAPTCHA entenda os padrões de atividade do usuário e detecte comportamentos anormais, mas ele não é compartilhado em outros sites.

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

    • criptografia (recomendado): criptografe o identificador de conta usando uma expressão determinística. que produz um texto criptografado estável. Para instruções detalhadas, consulte criptografar dados de forma determinista. Quando você escolhe a criptografia simétrica em vez do hash, não é necessário manter um mapeamento entre os identificadores de usuário e os identificadores opacos correspondentes. Descriptografar os identificadores opacos retornados pelo reCAPTCHA para transformá-los em identificador do usuário.

    • Geração de hash: recomendamos gerar hash do identificador da conta usando o método SHA256-HMAC com uma opção de sal personalizada. Como os hashes são unidirecionais, é necessário manter um mapeamento entre os hashes gerados e os identificadores de usuário para que você possa mapear o identificador da conta hash retornado para as contas originais.

Adicione o parâmetro accountId e o número de telefone no formato E.164 como 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: é seu ID do projeto no Google Cloud.
  • TOKEN: token retornado da chamada grecaptcha.enterprise.execute().
  • KEY_ID: a chave baseada na pontuação que você instalou no seu 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 à existência de malware. O número de telefone precisa estar no formato E.164 e não pode ser hasheado nem 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 de smsFraudRisk no Campo smsFraudAssessment . Quanto maior a pontuação, maior a probabilidade número de telefone for arriscado; quanto menor a pontuação, maior a probabilidade de o número de telefone ser legítimos.

Você é responsável pelas ações que tomar com base na avaliação. Para a integração mais simples, você pode definir limites no smsFraudRisk como contribuir para sua decisão.

Anotar a avaliação

Para monitorar o tráfego de SMS e melhorar a detecção de fraudes, você precisa anotar as avaliações até 10 minutos após o envio do SMS ou depois que o número de telefone for verificado.

Para anotar uma avaliação, envie uma solicitação ao método projects.assessments.annotate com o ID da avaliação. No corpo da 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 fazer anotações 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 influenciam a detecção em tempo real.

    Valores possíveis:

    • INITIATED_TWO_FACTOR: um código de verificação por O SMS foi enviado.
    • PASSED_TWO_FACTOR: o código de verificação é verificado com sucesso.
    • 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 legitimidade das avaliações.

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

    Valores possíveis: LEGITIMATE ou FRAUDULENT.

    Recomendamos enviar essas informações em alguns segundos ou minutos após o evento, pois 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 abaixo, faça as substituições a seguir:

    • ASSESSMENT_ID: valor do campo name retornado da 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 hasheado nem 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 bem-sucedido (2xx) e uma resposta vazia.

A seguir