Suscríbete para recibir notificaciones de nuevas publicaciones:

Detección automática del abuso de las API mediante el análisis de secuencias

2023-03-15

5 min de lectura
Esta publicación también está disponible en English, 繁體中文, Français, Deutsch, 日本語, 한국어 y 简体中文.

Hoy anunciamos la solución Cloudflare Sequence Analytics para las API. Con Sequence Analytics, los clientes suscritos a API Gateway pueden ver las secuencias más importantes de las solicitudes de API a sus puntos finales. Esta nueva función ayuda a los clientes a proteger primero los puntos finales más importantes.

Detecting API abuse automatically using sequence analysis

¿Qué es una secuencia? Es básicamente una lista ordenada cronológicamente de llamadas API HTTP que realiza un visitante específico cuando navega por un sitio web, utiliza una aplicación móvil o interactúa con un socio B2B mediante la API. Este es un ejemplo de una sección de una secuencia realizada durante una transferencia de fondos bancarios:

.tg {border-collapse:collapse;border-color:#ccc;border-spacing:0;} .tg td{background-color:#fff;border-color:#ccc;border-style:solid;border-width:1px;color:#333; font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px;word-break:normal;} .tg th{background-color:#f0f0f0;border-color:#ccc;border-style:solid;border-width:1px;color:#333; font-family:Arial, sans-serif;font-size:14px;font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;} .tg .tg-1wig{font-weight:bold;text-align:left;vertical-align:top} .tg .tg-0lax{text-align:left;vertical-align:top}

Order Method Path Description
1 GET /api/v1/users/{user_id}/accounts user_id is the active user
2 GET /api/v1/accounts/{account_id}/balance account_id is one of the user’s accounts
3 GET /api/v1/accounts/{account_id}/balance account_id is a different account belonging to the user
4 POST /api/v1/transferFunds Containing a request body detailing an account to transfer funds from, an account to transfer funds to, and an amount of money to transfer

Orden

Método

Ruta

Descripción

1

GET

Order Method Path Description
1 GET /api/v1/users/{user_id}/accounts user_id is the active user
2 GET /api/v1/accounts/{account_id}/balance account_id is one of the user’s accounts
3 GET /api/v1/accounts/{account_id}/balance account_id is a different account belonging to the user
4 POST /api/v1/transferFunds Containing a request body detailing an account to transfer funds from, an account to transfer funds to, and an amount of money to transfer
… attacker copies the request to a debugging tool like Postman …
5 POST /api/v1/transferFunds Attacker has modified the POST body to try and trick the API
6 POST /api/v1/transferFunds A further modified POST body to try and trick the API
7 POST /api/v1/transferFunds Another, further modified POST body to try and trick the API

/api/v1/users/{user_id}/accounts

user_id es el usuario activo.

2

GET

/api/v1/accounts/{account_id}/balance

account_id es una de las cuentas del usuario.

3

GET

/api/v1/accounts/{account_id}/balance

account_id es otra cuenta perteneciente al usuario.

4

POST

/api/v1/transferFunds

Contiene el cuerpo de una llamada que detalla la cuenta de origen, la cuenta de destino y el importe de la transferencia de fondos a realizar.

¿Por qué es importante para la seguridad de las API prestar atención a las secuencias? Si la API anterior recibiera llamadas POST /api/v1/transferFunds sin ninguna de las llamadas anteriores, parecería sospechoso. Considera lo siguiente: ¿cómo sabría el cliente de la API cuáles son los ID de cuenta relevantes si no se especifican para el usuario? ¿Cómo sabría el cliente de la API qué importe está disponible para la transferencia? En este ejemplo resulta evidente. Sin embargo, debido a la gran cantidad de llamadas API a cualquier API de producción determinada, resulta complicado para los analistas humanos detectar los usos sospechosos.

En el ámbito de la seguridad, una medida de protección contra un número incalculable de amenazas cuyo escrutinio resulta imposible a un equipo humano es crear un modelo de seguridad positiva. En lugar de intentar bloquear todo lo que potencialmente podría ser una amenaza, por defecto permites la entrada de todo el tráfico bueno o benigno y bloqueas todo lo demás.

Los clientes ya podían crear modelos de seguridad positiva con API Gateway en dos áreas principales: la protección contra el abuso volumétrico y la validación de esquemas. Las secuencias constituirán el tercer pilar de un modelo de seguridad positiva para el tráfico de las API. API Gateway podrá aplicar la prioridad de los puntos finales en cualquier secuencia de API determinada. Mediante el establecimiento de la prioridad en una secuencia de la API, API Gateway registrará o bloqueará cualquier tráfico que no coincida con las expectativas, lo que reducirá el tráfico abusivo.

Detección del abuso por secuencia

Cuando los atacantes intentan exfiltrar los datos de forma abusiva, no suelen seguir los patrones del tráfico de API esperado. Los ataques a menudo utilizan software especial para aplicar técnicas de "fuzzing" a la API, enviando varias solicitudes con distintos parámetros de solicitud, esperando encontrar respuestas inesperadas de la API que indiquen oportunidades para exfiltrar datos. Los atacantes también pueden enviar a las API solicitudes de forma manual, que intentan engañarla para que realice acciones no autorizadas, como otorgar a un atacante privilegios elevados o acceder a los datos mediante un ataque de autenticación a nivel de objeto sin función. La protección de las API con límites de velocidad es una práctica recomendada habitual. Sin embargo, en ambos ejemplos anteriores los atacantes pueden ejecutar deliberadamente las secuencias de solicitud con lentitud, a fin de frustrar la detección de abuso volumétrico.

Considera de nuevo la secuencia de llamadas anterior, pero esta vez imagina que un atacante copia la llamada de transferencia de fondos legítima y modifica su carga para intentar engañar al sistema:

.tg {border-collapse:collapse;border-color:#ccc;border-spacing:0;} .tg td{background-color:#fff;border-color:#ccc;border-style:solid;border-width:1px;color:#333; font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px;word-break:normal;} .tg th{background-color:#f0f0f0;border-color:#ccc;border-style:solid;border-width:1px;color:#333; font-family:Arial, sans-serif;font-size:14px;font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;} .tg .tg-1wig{font-weight:bold;text-align:left;vertical-align:top} .tg .tg-0lax{text-align:left;vertical-align:top} .tg .tg-5frq{font-style:italic;text-align:center;vertical-align:top} .tg .tg-8zwo{font-style:italic;text-align:left;vertical-align:top}

Orden

Método

Ruta

Descripción

1

GET

/api/v1/users/{user_id}/accounts

user_id es el usuario activo.

2

GET

/api/v1/accounts/{account_id}/balance

account_id es una de las cuentas del usuario.

3

GET

/api/v1/accounts/{account_id}/balance

account_id es otra cuenta perteneciente al usuario.

4

POST

/api/v1/transferFunds

Contiene el cuerpo de una llamada que detalla la cuenta de origen, la cuenta de destino y el importe de la transferencia de fondos a realizar.

… el atacante copia la llamada en una herramienta de depuración como Postman …

5

POST

/api/v1/transferFunds

El atacante ha modificado el cuerpo de la llamada POST para intentar engañar a la API.

6

POST

/api/v1/transferFunds

Un cuerpo de la llamada POST con más modificaciones para intentar engañar a la API.

7

POST

/api/v1/transferFunds

Otro cuerpo de la llamada POST con más modificaciones para intentar engañar a la API.

Si el cliente supiera previamente que es fundamental proteger el punto final de la transferencia de fondos, y que solo se produce una vez durante una secuencia, podría escribir una regla para garantizar que nunca se llamara dos veces en una fila y que una llamada GET /balance siempre precediera a una llamada POST /transferFunds. Sin embargo, sin esta información previa acerca de qué secuencias de punto final es esencial proteger, ¿cómo sabría el cliente qué reglas debe definir? Un límite de velocidad bajo implica demasiado riesgo, puesto que un usuario de la API podría tener que realizar legítimamente varias llamadas de transferencia de fondos en un breve periodo de tiempo. En la realidad actual, hay pocas herramientas para evitar este tipo de abuso, y la mayoría de los clientes lo único que pueden hacer es adoptar medidas reactivas una vez que ya se ha producido el fraude y trabajar con sus equipos de aplicaciones y los departamentos contra el fraude para remediar el abuso.

Por último, estamos convencidos de que para proporcionar a nuestros clientes la capacidad de definir modelos de seguridad positiva en las secuencias de solicitudes de API es necesario un enfoque a tres bandas:

  1. Análisis de la secuencia: determinar qué secuencias de las llamadas API se han producido y cuándo, así como resumir los datos en un formato de fácil comprensión.

  2. Detección de abuso de secuencia: identificar qué secuencias de llamadas API probablemente son de origen benigno o malicioso.

  3. Mitigación de la secuencia: identificar las reglas relevantes en las secuencias de llamadas API para decidir qué tráfico se debe permitir y cuál se debe bloquear.

Desafíos de la creación de una secuencia

El análisis de las secuencias presenta algunos difíciles desafíos técnicos, ya que las sesiones pueden ser de larga duración y constar de muchas llamadas. Como resultado, no es suficiente definir las secuencias exclusivamente por identificador de sesión. En su lugar, era necesario que desarrolláramos una solución que pudiera identificar automáticamente varias secuencias que se produjeran en una sesión determinada. Además, puesto que las secuencias importantes no necesariamente se caracterizan solo por el volumen, y el conjunto de posibles secuencias es grande, era necesario desarrollar una solución que pudiera identificar las secuencias importantes, en lugar de mostrar las secuencias simplemente más frecuentes.

Para ayudar a ilustrar estos desafíos en el caso del ejemplo de api.cloudflare.com, podemos agrupar las llamadas API por sesión y trazar el número de secuencias distintas frente a la longitud de las secuencias:

El diagrama se basa en una instantánea de una hora de duración que consta aproximadamente de 88 000 sesiones y de 260 millones de solicitudes de API, con 301 puntos finales de API distintos. Procesamos los datos aplicando a cada sesión una ventana deslizante de longitud fija, y a continuación contabilizamos el número total de distintas secuencias de longitud fija ("n-gramas") que observamos como resultado de la aplicación de la ventana deslizante. El diagrama muestra resultados para un tamaño de ventana ("longitud de n-gramas") que oscila entre 1 y 10 solicitudes. El número de secuencias distintas va de 301 (para un tamaño de ventana de 1 solicitud) a aproximadamente 780 000 (para un tamaño de ventana de 10 solicitudes). Si observamos el diagrama, vemos un gran número de secuencias posibles que aumenta con la longitud de la secuencia: cuando incrementamos el tamaño de la ventana deslizante, vemos un número cada vez mayor de distintas secuencias en la muestra. La tendencia suave se puede explicar por el hecho de que aplicamos una ventana deslizante (las sesiones pueden contener ellas mismas muchas secuencias) en combinación con muchas sesiones largas relacionadas con la longitud de la secuencia.

Dado el gran número de secuencias posibles, intentar encontrar las secuencias abusivas es como buscar una aguja en un pajar.

Presentamos Sequence Analytics

A continuación te mostramos una captura de pantalla del panel de control de API Gateway donde se destaca Sequence Analytics:

Desglosemos la nueva funcionalidad que vemos en la captura de pantalla.

API Gateway determina de forma inteligente las secuencias de llamadas realizadas por los usuarios de la API mediante los métodos descritos anteriormente en este artículo. API Gateway puntúa las secuencias mediante una métrica que denominamos "puntuación de correlación". Sequence Analytics muestra las 20 secuencias con la puntuación de correlación más alta, a las que haremos referencia como las secuencias más importantes. Las secuencias muy importantes contienen llamadas API que probablemente se producen juntas de forma secuencial.

Deberías inspeccionar cada una de tus secuencias para comprender sus puntuaciones de correlación. Las secuencias con una puntuación de correlación alta pueden estar formadas por puntos finales poco utilizados (comportamiento de usuario potencialmente anómalo) así como por puntos finales utilizados habitualmente (comportamiento de usuario posiblemente benigno). Puesto que los puntos finales que se encuentran en estas secuencias habitualmente se producen juntos, representan patrones de uso real de tu API. Deberías aplicar a estos puntos finales todas las protecciones de API Gateway posibles (sugerencias de limitación de velocidad, validación de esquemas, validación JWT y mTLS) y verificar el orden específico de sus puntos finales con tu equipo de desarrollo.

Sabemos que los clientes quieren establecer explícitamente el comportamiento permisible en sus API, además de las protecciones activas que ofrece actualmente API Gateway. En breve lanzaremos reglas de prioridad de secuencia y habilitaremos la capacidad de bloquear llamadas en función de estas reglas. Las nuevas reglas de prioridad de secuencia permitirán a los clientes especificar el orden exacto de las llamadas API permisibles. Esto será otra forma de definir un modelo de seguridad positiva para proteger tu API contra las amenazas desconocidas.

Cómo empezar

Todos los clientes de API Gateway ya pueden acceder a Sequence Analytics. Ve a una zona del panel de control de Cloudflare y haz clic en la pestaña Seguridad > API Gateway > Secuencias. Verás las secuencias más importantes a las que llaman tus usuarios de la API.

Los clientes Enterprise que no han comprado API Gateway pueden empezar activando la prueba de API Gateway en el panel de control de Cloudflare o poniéndose en contacto con su gerente de cuenta.

¿Y ahora qué?

La detección basada en secuencias es una función eficaz y única que abre muchas nuevas oportunidades para identificar y evitar los ataques. Puesto que seguimos mejorando la precisión de los métodos de identificación de estas secuencias y de incorporarlos en nuestra red global, más adelante lanzaremos funciones de mitigación en tiempo real y de coincidencia de secuencias personalizadas. También nos aseguraremos de que dispongas de la información práctica que necesitas proporcionar a tu equipo sobre quiénes han sido los usuarios de la API que han intentado llamar a secuencias no coincidentes con tu política.

Protegemos redes corporativas completas, ayudamos a los clientes a desarrollar aplicaciones web de forma eficiente, aceleramos cualquier sitio o aplicación web, prevenimos contra los ataques DDoS, mantenemos a raya a los hackers, y podemos ayudarte en tu recorrido hacia la seguridad Zero Trust.

Visita 1.1.1.1 desde cualquier dispositivo para empezar a usar nuestra aplicación gratuita y beneficiarte de una navegación más rápida y segura.

Para saber más sobre nuestra misión para ayudar a mejorar Internet, empieza aquí. Si estás buscando un nuevo rumbo profesional, consulta nuestras ofertas de empleo.
Security Week (ES)API ShieldAPI GatewayAPI SecurityIA

Síguenos en X

John Cosgrove|@cameracoz
Cloudflare|@cloudflare

Publicaciones relacionadas

27 de septiembre de 2024, 13:00

Our container platform is in production. It has GPUs. Here’s an early look

We’ve been working on something new — a platform for running containers across Cloudflare’s network. We already use it in production, for AI inference and more. Today we want to share an early look at how it’s built, why we built it, and how we use it ourselves. ...