En este documento se explica cómo usar la defensa por SMS de reCAPTCHA para detectar y prevenir ataques de bombeo de SMS en empresas que dependen de los SMS para la autenticación de dos factores o la verificación telefónica, que son un objetivo potencial del fraude telefónico por SMS.
La autenticación basada en SMS (autenticación de dos factores e inicio de sesión) es un estándar del sector para la seguridad de inicio de sesión y registro, pero no ofrece protección contra el fraude de servicios telefónicos por SMS ni el fraude de bombeo de SMS. Antes de enviar un SMS, la defensa 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 servicios telefónicos por SMS. En función de esta puntuación, puede permitir o bloquear mensajes SMS fraudulentos antes de que se envíen a su proveedor de SMS.
La puntuación de riesgo de reCAPTCHA SMS defense funciona de forma inversa en comparación con la puntuación global de reCAPTCHA. Una puntuación de riesgo de 0,0 en reCAPTCHA SMS defense indica que hay poca confianza en que se produzca un fraude de servicios telefónicos por SMS, mientras que una puntuación de riesgo de 1,0 indica que hay mucha confianza en que se produzca un fraude de servicios telefónicos por SMS. Para obtener más información sobre las puntuaciones de reCAPTCHA, consulta el artículo Interpretar las evaluaciones de sitios web. Si usas Firebase Authentication o Identity Platform, consulta la documentación de Identity Platform.
Para obtener más información, consulta la entrada del blog sobre la defensa por SMS de reCAPTCHA.
Antes de empezar
En función de si ya usas reCAPTCHA o si es la primera vez que lo haces, sigue las instrucciones de la pestaña correspondiente:
Usuario de reCAPTCHA
Si ya usas reCAPTCHA, habilita reCAPTCHA SMS defense en tu Google Cloud proyecto:
En la Google Cloud consola, ve a la página reCAPTCHA.
Comprueba que el nombre de tu proyecto aparece en el selector de recursos.
Si no ves el nombre de tu proyecto, haz clic en el selector de recursos y, a continuación, selecciona tu proyecto.
Haz clic en
Configuración.En el panel Defensa por SMS, haz clic en Configurar.
Haz clic en el interruptor Habilitar y, a continuación, en Guardar.
Si habilitas reCAPTCHA SMS defense, se habilitará Account Defender si aún no lo has hecho.
La habilitación de la defensa por SMS de reCAPTCHA puede tardar unos minutos en propagarse a nuestros sistemas. Una vez que la habilitación de la función se haya propagado a nuestros sistemas, deberías empezar a recibir respuestas relacionadas con la defensa por SMS de reCAPTCHA como parte de las evaluaciones.
Nuevo usuario de reCAPTCHA
Si no has usado reCAPTCHA antes, haz lo siguiente:
-
En función de si quieres usar reCAPTCHA SMS defense en un sitio web o en una aplicación móvil, sigue estos pasos para integrar reCAPTCHA:
Sitio web
Aplicación móvil
- Crea una clave basada en la puntuación para tu aplicación móvil.
- Integrar reCAPTCHA en una aplicación iOS o una aplicación Android
- Habilita reCAPTCHA SMS defense en tu Google Cloud proyecto:
En la Google Cloud consola, ve a la página reCAPTCHA.
Comprueba que el nombre de tu proyecto aparece en el selector de recursos.
Si no ves el nombre de tu proyecto, haz clic en el selector de recursos y, a continuación, selecciona tu proyecto.
Haz clic en
Configuración.En el panel Defensa por SMS, haz clic en Configurar.
Haz clic en el interruptor Habilitar y, a continuación, en Guardar.
Si habilitas reCAPTCHA SMS defense, se habilitará Account Defender si aún no lo has hecho.
La habilitación de la defensa por SMS de reCAPTCHA puede tardar unos minutos en propagarse a nuestros sistemas. Una vez que la habilitación de la función se haya propagado a nuestros sistemas, deberías empezar a recibir respuestas relacionadas con la defensa por SMS de reCAPTCHA como parte de las evaluaciones.
Crear una evaluación con el número de teléfono
Para la defensa 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 de cliente de reCAPTCHA o la API REST desde tu backend.
En este documento se explica cómo crear una evaluación mediante la API REST. Para saber cómo crear una evaluación con bibliotecas de cliente, consulta el artículo 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 ayudará 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 de cliente
Usa cuentas de servicio asociadas. On-premise u otro proveedor de servicios en la nube REST Usa claves de API o la federación de identidades de cargas de trabajo. Si quieres usar claves de API, te recomendamos que las protejas aplicando restricciones a las claves de API.
Bibliotecas de cliente Utiliza lo siguiente:
- En Python o Java, usa claves de API o la federación de identidades de cargas de trabajo.
Si quieres usar claves de API, te recomendamos que las protejas aplicando restricciones a las claves de API.
- En otros idiomas, usa Federación de identidades de cargas de trabajo.
Elige un identificador de cuenta estable
accountId
que el usuario no cambie con frecuencia y proporciónalo a la evaluación en el métodoprojects.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 cuenta:Identificadores de usuario
Si cada cuenta se puede asociar de forma única a un nombre de usuario, una dirección de correo o un número de teléfono estables, puedes usarlo como
accountId
. Cuando proporciones identificadores entre sitios (identificadores que se pueden reutilizar en varios sitios), reCAPTCHA usará esta información para mejorar la protección de tus cuentas de usuario en función de modelos entre sitios. Para ello, marcará los identificadores de cuentas abusivas y usará el conocimiento de los patrones de abuso entre sitios relacionados con estos identificadores.Si tiene un ID de usuario interno asociado de forma exclusiva a cada cuenta, puede proporcionarlo como
accountId
.Cifrado con hash o encriptado
Si no tiene un ID de usuario interno asociado de forma exclusiva a cada cuenta, puede convertir cualquier identificador estable en un identificador de cuenta opaco y específico del sitio. Este identificador sigue siendo necesario para que reCAPTCHA Account Defender comprenda los patrones de actividad de los usuarios 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 mediante cifrado o cifrado con hash:
Cifrado (opción recomendada): cifra el identificador de la cuenta mediante un método de cifrado determinista que genere un texto cifrado estable. Para obtener instrucciones detalladas, consulta el artículo sobre cifrar datos de forma determinista. Si eliges el cifrado simétrico en lugar del cifrado con hash, no tienes que mantener una asignación entre tus identificadores de usuario y los identificadores de usuario opacos correspondientes. Descifra los identificadores opacos que devuelve reCAPTCHA para convertirlos en el identificador de usuario.
Cifrado con hash: recomendamos cifrar con hash el identificador de cuenta mediante el método SHA256-HMAC con una sal personalizada de tu elección. Como los hashes son unidireccionales, debes mantener una asignación entre los hashes generados y tus identificadores de usuario para poder asignar el identificador de cuenta cifrado que se devuelve a las cuentas originales.
Añade el parámetro accountId
y el número de teléfono en formato E.164 como UserId
para verificarlo en la evaluación del método projects.assessments.create
.
Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
- PROJECT_ID: tu ID de proyecto Google Cloud .
- TOKEN: token devuelto por la llamada
grecaptcha.enterprise.execute()
. - KEY_ID: la clave basada en una puntuación que ha instalado en su sitio web.
- ACCOUNT_ID: identificador de una cuenta de usuario que es único en su sitio web.
- PHONE_NUMBER: el número de teléfono que se debe comprobar para detectar si es malicioso. El número de teléfono debe estar en formato E.164 y no debe estar cifrado ni protegido con hash.
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 siguiente:
{ "event": { … }, "name": "ASSESSMENT_ID", "phoneFraudAssessment": { "smsTollFraudVerdict": { "risk": 0.3 } } }
La respuesta que recibes incluye la puntuación risk
en el campo phoneFraudAssessment.smsTollFraudVerdict
. Cuanto mayor sea la puntuación, más probable será que el número de teléfono sea arriesgado. Cuanto menor sea la puntuación, más probable será que el número de teléfono sea legítimo.
Eres responsable de las acciones que lleves a cabo en función de la evaluación.
Para la integración más sencilla, puedes definir umbrales en phoneFraudAssessment.smsTollFraudVerdict.risk
para que te ayuden a tomar decisiones.
Anotar la evaluación
Para hacer un seguimiento del tráfico de SMS y mejorar la detección de fraudes, debe anotar las evaluaciones en un plazo de 10 minutos después de enviar el SMS o de que se haya verificado 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, incluya 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 deben añadir al cuerpo JSON de la solicitud en función de tu caso práctico.
En la siguiente tabla se indican las etiquetas y los valores que puede usar para anotar eventos:
Etiqueta Descripción Ejemplo de solicitud reasons
Obligatorio. Una etiqueta para respaldar tus evaluaciones.
Proporcione los detalles de los eventos en tiempo real en la etiqueta
reasons
unos segundos o minutos después de que se produzcan, ya que influyen en la detección en tiempo real.Posibles valores:
INITIATED_TWO_FACTOR
: se envía un código de verificación por SMS.PASSED_TWO_FACTOR
: el código de verificación se ha verificado correctamente.FAILED_TWO_FACTOR
: el código de verificación no es válido.
{ "reasons": ["INITIATED_TWO_FACTOR"], "phoneAuthenticationEvent": { "phoneNumber": "+18005550175" } }
annotation
Opcional. Una etiqueta que indica la legitimidad de las evaluaciones.
Proporciona datos sobre los eventos de inicio de sesión y registro para validar o corregir tus evaluaciones de riesgo en la etiqueta
annotation
.Valores posibles:
LEGITIMATE
oFRAUDULENT
.Te recomendamos que envíes esta información 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 los datos de la solicitud, haz las siguientes sustituciones:
- ASSESSMENT_ID: valor del campo
name
devuelto por la llamadaprojects.assessments.create
. - ANNOTATION: opcional. Etiqueta que indica si la evaluación es legítima o fraudulenta.
- REASONS: motivos que respalden tu anotación. Para ver la lista de valores posibles, consulta los valores de motivos.
- PHONE_NUMBER: el número de teléfono que se ha evaluado. El número de teléfono debe estar en formato E.164 y no debe estar cifrado ni protegido con hash.
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 ContentDeberías recibir un código de estado que indique que la operación se ha realizado correctamente (2xx) y una respuesta vacía.
- ASSESSMENT_ID: valor del campo