Detecta y evita el fraude por SMS

En este documento, se muestra cómo usar la protección contra fraude de cargos telefónicos por SMS de reCAPTCHA para detectar y evitar ataques de SMS pumping en empresas que dependen de los SMS para la autenticación de dos factores (2FA) o la verificación telefónica, que es un objetivo potencial del fraude de cargos telefónicos por SMS.

La autenticación basada en SMS (2FA y acceso) es un estándar de la industria para la seguridad de acceso y registro, pero no proporciona protección contra el fraude de cargos telefónicos por SMS ni el fraude de SMS pumping. Antes de enviar un SMS, la protección contra el fraude de cargos telefónicos por SMS de reCAPTCHA te proporciona una puntuación de riesgo que indica la probabilidad de que ese número de teléfono cometa un fraude de cargos telefónicos por SMS. En función de esta puntuación, puedes permitir o bloquear los mensajes SMS fraudulentos antes de que se envíen a tu proveedor de SMS.

Para obtener más información, consulta el blog de protección contra el fraude de cargos telefónicos por SMS de reCAPTCHA.

Antes de comenzar

Según si ya usas reCAPTCHA o es la primera vez que lo haces, sigue las instrucciones de la pestaña correspondiente:

Usuario existente de reCAPTCHA

Si ya eres usuario de reCAPTCHA, habilita la protección contra el fraude de cargos telefónicos por SMS de reCAPTCHA en tu proyecto de Google Cloud:

  1. En la consola de Google Cloud, ve a la página reCAPTCHA.

    Ve a reCAPTCHA

  2. Verifica que el nombre de tu proyecto aparezca en el selector de recursos.

    Si no ves el nombre de tu proyecto, haz clic en el selector de recursos y, luego, selecciona tu proyecto.

  3. Haz clic en Configuración.

  4. Si la protección de cuentas de reCAPTCHA no está habilitada para tu proyecto, haz lo siguiente:

    1. En el panel Defensor de cuentas, haz clic en Habilitar.
    2. En el diálogo Configurar el defensor de cuentas, haz clic en Habilitar.
  5. En el panel Protección contra fraude de cargos telefónicos por SMS, haz clic en Configurar.

  6. Haz clic en el botón de activación Habilitar y, luego, en Guardar.

    Es posible que la habilitación de la protección contra el fraude de cargos telefónicos por SMS de reCAPTCHA tarde unos minutos en propagarse a nuestros sistemas. Después de que la habilitación de la función se propague a nuestros sistemas, deberías comenzar a recibir respuestas relacionadas con la protección contra el fraude de cargos telefónicos por SMS de reCAPTCHA como parte de las evaluaciones.

Nuevo usuario de reCAPTCHA

Si es la primera vez que usas reCAPTCHA, haz lo siguiente:

  1. Según si deseas usar la protección contra el fraude de cargos telefónicos por SMS de reCAPTCHA en un sitio web o una aplicación para dispositivos móviles, sigue estos pasos para integrar reCAPTCHA:

  2. Habilita la protección contra el fraude de cargos telefónicos por SMS de reCAPTCHA en tu proyecto de Google Cloud:
    1. En la consola de Google Cloud, ve a la página reCAPTCHA.

      Ve a reCAPTCHA

    2. Verifica que el nombre de tu proyecto aparezca en el selector de recursos.

      Si no ves el nombre de tu proyecto, haz clic en el selector de recursos y, luego, selecciona tu proyecto.

    3. Haz clic en Configuración.

    4. Si la protección de cuentas de reCAPTCHA no está habilitada para tu proyecto, haz lo siguiente:

      1. En el panel Defensor de cuentas, haz clic en Habilitar.
      2. En el diálogo Configurar el defensor de cuentas, haz clic en Habilitar.
    5. En el panel Protección contra fraude de cargos telefónicos por SMS, haz clic en Configurar.

    6. Haz clic en el botón de activación Habilitar y, luego, en Guardar.

      Es posible que la habilitación de la protección contra el fraude de cargos telefónicos por SMS de reCAPTCHA tarde unos minutos en propagarse a nuestros sistemas. Después de que la habilitación de la función se propague a nuestros sistemas, deberías comenzar a recibir respuestas relacionadas con la protección contra el fraude de cargos telefónicos por SMS de reCAPTCHA como parte de las evaluaciones.

Crea una evaluación con el número de teléfono

Para la protección contra el fraude de peaje por SMS de reCAPTCHA, crea evaluaciones con el token que genera la función execute() y el número de teléfono. Para ello, usa las bibliotecas cliente de reCAPTCHA o la API de REST desde tu backend.

En este documento, se muestra cómo crear una evaluación con la API de REST. Para obtener información sobre cómo crear una evaluación con bibliotecas cliente, consulta Cómo crear evaluaciones.

Antes de crear una evaluación, haz lo siguiente:

  • Configura la autenticación en reCAPTCHA.

    El método de autenticación que elijas dependerá del entorno en el que se configure reCAPTCHA. La siguiente tabla te ayuda a elegir el método de autenticación y la interfaz compatibles para configurar la autenticación:

    Entorno Interfaz Método de autenticación
    Google Cloud
    • REST
    • Bibliotecas cliente
    Usa cuentas de servicio conectadas.
    Local o en un proveedor de servicios en la nube diferente REST Usa claves de API o la federación de Workload Identity.

    Si quieres usar claves de API, te recomendamos que las protejas aplicando restricciones.

    Bibliotecas cliente

    Para ello, usa los siguientes recursos:

  • Elige un identificador de cuenta estable accountId que el usuario no cambie con frecuencia y proporciónalo a la evaluación en el método projects.assessments.create. Este identificador de cuenta estable debe tener el mismo valor para todos los eventos relacionados con el mismo usuario. Puedes proporcionar lo siguiente como identificador de la cuenta:

    Identificadores de usuario

    Si cada cuenta se puede asociar de forma única con un nombre de usuario, una dirección de correo electrónico o un número de teléfono estable, puedes usarlo como accountId. Cuando proporcionas esos identificadores entre sitios (identificadores que se pueden volver a usar en varios sitios), reCAPTCHA usa esta información para mejorar la protección de tus cuentas de usuario en función de modelos entre sitios, ya que marca los identificadores de cuentas abusivas y utiliza el conocimiento de los patrones de abuso entre sitios relacionados con estos identificadores.

    Como alternativa, si tienes un ID de usuario interno asociado de forma exclusiva con cada cuenta, puedes proporcionarlo como accountId.

    Con codificación hash o encriptado

    Si no tienes un ID de usuario interno asociado de forma exclusiva con cada cuenta, puedes convertir cualquier identificador estable en un identificador de cuenta opaco y específico del sitio. Este identificador aún es necesario para que el defensor de cuentas de reCAPTCHA comprenda los patrones de actividad del usuario y detecte comportamientos anómalos, pero no se comparte con otros sitios.

    Elige cualquier identificador de cuenta estable y hazlo opaco antes de enviarlo a reCAPTCHA con encriptación o hash:

    • encriptación (recomendado): Encripta el identificador de cuenta con un método de encriptación determinista que genere un texto cifrado estable. Para obtener instrucciones detalladas, consulta Cómo encriptar datos de forma determinista. Cuando eliges la criptografía simétrica en lugar del hash, no es necesario que mantengas una asignación entre tus identificadores de usuario y los identificadores de usuario opacos correspondientes. Desencripta los identificadores opacos que muestra reCAPTCHA para convertirlos en el identificador del usuario.

    • codificación hash: Te recomendamos que codifiques el identificador de cuenta con el método SHA256-HMAC con una sal personalizada de tu elección. Debido a que los hash son unidireccionales, debes mantener una asignación entre los hash generados y tus identificadores de usuario para que puedas asignar el identificador de cuenta con hash que se devuelve a las cuentas originales.

Agrega el parámetro accountId y el número de teléfono en formato E.164 como el UserId para verificarlo en la evaluación del método projects.assessments.create.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: Es el ID de tu proyecto de Google Cloud.
  • TOKEN: Es el token que se muestra a partir de la llamada grecaptcha.enterprise.execute().
  • KEY_ID: Es la clave basada en la puntuación que instalaste en tu sitio web.
  • ACCOUNT_ID: Es un identificador para una cuenta de usuario que es única para tu sitio web.
  • PHONE_NUMBER: Es el número de teléfono que se debe verificar para detectar si es malicioso. El número de teléfono debe estar en formato E.164 y no debe estar hash ni encriptado.

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:


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

Para enviar tu solicitud, elige una de estas opciones:

curl

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente 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

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente 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

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:


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

La respuesta que recibes incluye la puntuación smsFraudRisk en el campo smsFraudAssessment . Cuanto más alta sea la puntuación, es más probable que el número de teléfono sea riesgoso. Cuanto más baja sea la puntuación, es más probable que el número de teléfono sea legítimo.

Usted es responsable de las acciones que realice en función de la evaluación. Para la integración más simple, puedes establecer umbrales en smsFraudRisk para contribuir a tu decisión.

Anota la evaluación

Para hacer un seguimiento del tráfico de SMS y mejorar la detección de fraudes, debes marcar las evaluaciones en un plazo de 10 minutos después de que se envíe el SMS o después de que se verifique correctamente el número de teléfono.

Para anotar una evaluación, envía una solicitud al método projects.assessments.annotate con el ID de la evaluación. En el cuerpo de esa solicitud, incluye el número de teléfono en formato E.164 en el campo phoneAuthenticationEvent.

Para anotar una evaluación, haz lo siguiente:

  1. Determina la información y las etiquetas que debes agregar en el cuerpo JSON de la solicitud según tu caso de uso.

    En la siguiente tabla, se enumeran las etiquetas y los valores que puedes usar para anotar eventos:

    Etiqueta Descripción Ejemplo de solicitud
    reasons

    Obligatorio. Una etiqueta para respaldar tus evaluaciones.

    Proporciona detalles del evento en tiempo real en la etiqueta reasons en unos segundos o minutos después del evento, ya que influyen en la detección en tiempo real.

    Valores posibles:

    • INITIATED_TWO_FACTOR: Se envía un código de verificación por SMS.
    • PASSED_TWO_FACTOR: El código de verificación se verificó correctamente.
    • FAILED_TWO_FACTOR: El código de verificación no es válido.
        {
        "reasons": ["INITIATED_TWO_FACTOR"],
        "phoneAuthenticationEvent": {
          "phoneNumber": "+18005550175"
        }
      }
    annotation

    Opcional. Es una etiqueta para indicar la legitimidad de las evaluaciones.

    Proporciona datos sobre los eventos de acceso y registro para validar o corregir tus evaluaciones de riesgos en la etiqueta annotation.

    Valores posibles: LEGITIMATE o FRAUDULENT.

    Recomendamos enviar esta información unos segundos o minutos después del evento, ya que influye en la detección en tiempo real.

      {
       "annotation": "LEGITIMATE"
      }
      
  2. Crea una solicitud de anotación con las etiquetas adecuadas.

    Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • ASSESSMENT_ID: Es el valor del campo name que se muestra desde la llamada projects.assessments.create.
    • ANNOTATION: Opcional Es una etiqueta que indica si la evaluación es legítima o fraudulenta.
    • REASONS: los motivos que respaldan tu anotación Para obtener la lista de valores posibles, consulta valores de motivos.
    • PHONE_NUMBER: Es el número de teléfono que se evaluó. El número de teléfono debe estar en formato E.164 y no debe estar hash ni encriptado.

    Método HTTP y URL:

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

    Cuerpo JSON de la solicitud:

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

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente 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

    Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente 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

    Deberías recibir un código de estado exitoso (2xx) y una respuesta vacía.

¿Qué sigue?