En este documento, se muestra cómo usar la función SMS defense para detectar y prevenir 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 para el 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 función SMS defense te proporciona una puntuación de riesgo que indica la probabilidad de que ese número de teléfono cometa fraude de cargos telefónicos por SMS. Según esta puntuación, puedes permitir o bloquear los mensajes SMS fraudulentos antes de que se envíen a tu proveedor de SMS.
La puntuación de riesgo de SMS defense funciona de forma inversa en comparación con la puntuación global de reCAPTCHA. Una puntuación de riesgo de SMS defense de 0.0 muestra una baja confianza de que se produzca un fraude de cargos telefónicos por SMS, mientras que una puntuación de riesgo de 1.0 muestra una alta confianza de que se produzca un fraude de cargos telefónicos por SMS. Para obtener más información sobre las puntuaciones de reCAPTCHA, consulta Interpreta las evaluaciones de sitios web. Si usas Firebase Authentication o Identity Platform, consulta la documentación de Identity Platform.
Para obtener información adicional, consulta la entrada de blog de SMS defense.
Antes de comenzar
Según si eres un usuario existente de reCAPTCHA o si es la primera vez que usas reCAPTCHA, sigue las instrucciones de la pestaña correspondiente:
Usuario existente de reCAPTCHA
Si ya usas reCAPTCHA, habilita la función SMS defense en tu Google Cloud proyecto:
En la Google Cloud consola de Google Cloud, ve a la página de reCAPTCHA.
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.
Haz clic en Configuración.
En el panel SMS defense, haz clic en Configurar.
Haz clic en el botón de activación Habilitar y, luego, en Guardar.
Es posible que la habilitación de SMS defense tarde unos minutos en propagarse a nuestros sistemas. Una vez que la habilitación de la función se propague a nuestros sistemas, deberías comenzar a recibir respuestas relacionadas con SMS defense como parte de las evaluaciones.
Usuario nuevo de reCAPTCHA
Si es la primera vez que usas reCAPTCHA, haz lo siguiente:
-
Según si deseas usar SMS defense en un sitio web o una aplicación para dispositivos móviles, sigue estos pasos para integrar reCAPTCHA:
Sitio web
Aplicación para dispositivos móviles
- Crea una clave basada en puntuación para tu aplicación para dispositivos móviles.
- Integra reCAPTCHA con una app para iOS o una app para Android.
- Habilita
SMS defense en tu Google Cloud proyecto:
En la Google Cloud consola de Google Cloud, ve a la página de reCAPTCHA.
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.
Haz clic en Configuración.
En el panel SMS defense, haz clic en Configurar.
Haz clic en el botón de activación Habilitar y, luego, en Guardar.
Es posible que la habilitación de SMS defense tarde unos minutos en propagarse a nuestros sistemas. Una vez que la habilitación de la función se propague a nuestros sistemas, deberías comenzar a recibir respuestas relacionadas con SMS defense como parte de las evaluaciones.
Crea una evaluación con el número de teléfono
Para SMS defense, crea evaluaciones con el token que genera la función execute() y el número de teléfono, ya sea con 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 las bibliotecas cliente, consulta Crea evaluaciones.
Antes de crear una evaluación, haz lo siguiente:
Configura la autenticación en reCAPTCHA.
El método de autenticación que elijas depende del entorno en el que se configure reCAPTCHA. En la siguiente tabla, se te ayuda a elegir el método de autenticación adecuado y la interfaz compatible 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 identidades para cargas de trabajo. Si deseas usar claves de API, te recomendamos que las protejas aplicando restricciones de claves de API.
Bibliotecas cliente Para ello, usa los siguientes recursos:
- Para Python o Java, usa claves de API o la federación de identidades para cargas de trabajo.
Si deseas usar claves de API, te recomendamos que las protejas aplicando restricciones de claves de API.
- Para otros lenguajes, usa la federación de identidades para cargas de trabajo.
Elige un identificador de cuenta estable
accountIdque el usuario no cambie con frecuencia y proporciónalo a la evaluación en elprojects.assessments.createmétodo. 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 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 estables, puedes usarlo como el
accountId. Cuando proporcionas esos identificadores de sitios cruzados (identificadores que se pueden reutilizar en todos los sitios), reCAPTCHA usa esta información para mejorar la protección de tus cuentas de usuario en función de los modelos de sitios cruzados marcando los identificadores de cuenta abusivos y usando el conocimiento de los patrones de abuso de sitios cruzados relacionados con estos identificadores.Como alternativa, si tienes un ID de usuario interno asociado de forma única con cada cuenta, puedes proporcionarlo como el
accountId.Con hash o encriptado
Si no tienes un ID de usuario interno asociado de forma única 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 la protección de cuentas de reCAPTCHA comprenda los patrones de actividad del usuario y detecte el comportamiento anómalo, pero no se comparte en otros sitios.
Elige cualquier identificador de cuenta estable y hazlo opaco antes de enviarlo a reCAPTCHA con encriptación o codificación hash:
Encriptación (recomendada): Encripta el identificador de cuenta con un método de encriptación determinista encriptación que produzca un texto cifrado estable. Para obtener instrucciones detalladas, consulta encripta datos de forma determinista. Cuando eliges la encriptación simétrica en lugar de la codificación hash, no necesitas mantener una asignación entre tus identificadores de usuario y los identificadores de usuario opacos correspondientes. Descifra los identificadores opacos que muestra reCAPTCHA para convertirlos en el identificador de usuario.
Codificación hash: Te recomendamos que apliques la codificación hash al identificador de cuenta con el método SHA256-HMAC con un salt personalizado de tu elección. Debido a que los hashes son solo unidireccionales, debes mantener una asignación entre los hashes generados y tus identificadores de usuario para poder asignar el identificador de cuenta con hash que se muestra a las cuentas originales.
Agrega el accountId parámetro y el número de teléfono en formato E.164 como el
UserId para
verificar en la evaluación en el projects.assessments.create método.
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- PROJECT_ID: Es el ID del Google Cloud proyecto.
- TOKEN: Token que se muestra a partir de la llamada a
grecaptcha.enterprise.execute(). - KEY_ID: Es la clave basada en puntuación que instalaste en tu sitio web.
- ACCOUNT_ID: Es un identificador de una cuenta de usuario que es único para tu sitio web.
- PHONE_NUMBER: Es el número de teléfono que se debe verificar para detectar contenido malicioso. El número de teléfono debe estar en formato E.164 y no debe tener hash ni estar 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",
"phoneFraudAssessment": {
"smsTollFraudVerdict": {
"risk": 0.3
}
}
}
La respuesta que recibes incluye la puntuación risk en el
phoneFraudAssessment.smsTollFraudVerdict
campo . 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.
Eres responsable de las acciones que realices en función de la evaluación.
Para la integración más simple, puedes establecer umbrales en phoneFraudAssessment.smsTollFraudVerdict.risk 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 anotar 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
projects.assessments.annotate
método con el ID de 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:
Determina la información y las etiquetas que se agregarán al 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 reasonsObligatorio. Es una etiqueta para admitir tus evaluaciones.
Proporciona detalles de eventos en tiempo real en la
reasonsetiqueta 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" } }annotationEs 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 riesgo en la
annotationetiqueta.Valores posibles:
LEGITIMATEoFRAUDULENT.Te recomendamos que envíes esta información en unos segundos o minutos después del evento, ya que influye en la detección en tiempo real.
{ "annotation": "LEGITIMATE" }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: Valor del campo
nameque se muestra a partir de la llamada aprojects.assessments.create. - ANNOTATION: Opcional. Es una etiqueta para indicar si la evaluación es legítima o fraudulenta.
- REASONS: Motivos que admiten tu anotación. Para obtener la lista de valores posibles, consulta los 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 tener hash ni estar 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.jsony 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.jsony 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 ContentDeberías recibir un código de estado exitoso (2xx) y una respuesta vacía.
- ASSESSMENT_ID: Valor del campo
¿Qué sigue?
- Obtén información sobre las funciones de protección de cuentas de usuario de reCAPTCHA.