Inicio / Blog / DoS: Capa de Aplicación

DoS: Capa de Aplicación

Publicado el 21/05/2015, por David Cantón (INCIBE)
DoS

Los ataques de denegación de servicio de capa de aplicación son el segundo gran grupo de ataques de Denegación de Servicio (DoS), junto con los ataques DoS contra la capa de infraestructura. Como su propio nombre indica, este tipo de ataques van dirigidos contra la capa de aplicación, y su objetivo es provocar que el servicio deje de estar operativo, aprovechando para ello deficiencias de diseño en los protocolos de comunicaciones de esta capa o los fallos de diseño o implementación de las propias aplicaciones.

Mapa con los ataques DDoS diarios

 

Mapa con los ataques DDoS diarios (Fuente: digitalattackmap)

Los ataques contra la capa de infraestructura se centran principalmente en agotar el ancho de banda, la memoria y/o capacidad de proceso del sistema mediante técnicas de fuerza bruta, como por ejemplo el envío masivo de paquetes malformados.

Con el fin de potenciar este tipo de prácticas es habitual que se complementen en numerosas ocasiones con técnicas de reflexión. En el caso de ataques de DoS contra la capa de aplicación, también se pretende agotar la memoria y tiempo de proceso que necesita la aplicación para su correcto funcionamiento pero minimizando los recursos empleados por el atacante al usar vulnerabilidades o deficiencias de la aplicación. Las principales características de este tipo de ataques son:

  • Necesidad de menor ancho de banda, en comparación con otros métodos como ataques SYN Flood, por lo que la infraestructura necesaria para lanzar un ataque que tenga éxito suele ser menor.
  • Mayor dificultad para diferenciar el tráfico malicioso del legítimo. Muchas de las medidas o sistemas de protección más habituales se centran en la capa de red o de transporte, por lo que no son fiables cuando el objetivo del ataque es la capa de aplicación. Incluso para sistemas de defensa que supervisan esta capa es complicado discernir entre el tráfico malicioso y el legítimo.

Attack types and Bandwidth

Comparativa entre ataques DoS de Aplicación y de red. (Fuente: radware.com)

A continuación, se describen algunos de los principales ataques de denegación de servicio contra la capa de aplicación que tienen como objetivo el protocolo HTTP, que es el protocolo de comunicaciones por excelencia de esta capa y por lo tanto el más atacado.

Principales ataques de denegación de servicio

Principales ataques de denegación de servicio (Fuente: RIOREY)

Fragmentación HTTP

En un ataque de fragmentación de HTTP, un atacante establece una conexión valida, contra el servidor objetivo, enviando todo el tráfico de datos HTTP en pequeños fragmentos lo más lento que la configuración del timeout del servidor permita. Este ataque se ve maximizado en los casos en que la configuración de los mecanismos de tiempo de espera de los servidores de web es inadecuada.

La fragmentación HTTP obliga al servidor a mantener sesiones activas durante largos periodos de tiempo, por lo que si el número de conexiones es alto acaba agotando los recursos asignados a la tabla de conexiones y provocando una condición de denegación de servicio. Si este ataque se llevase a cabo mediante una botnet, y cada bot abre una serie de conexiones contra el servidor, el número de bots necesarios suele ser más bajo que usando técnicas de ataques DoS de infraestructura.

Otra característica es la dificultad para identificarlo frente al tráfico de clientes legítimos con conexiones lentas o que envían sus datos de forma fragmentada.

Número excesivo de peticiones HTTP o Excessive HTTP Verb

Este ataque consiste en generar un alta tasa de peticiones HTTP contra el servidor atacado, utilizando alguno de los posibles métodos de petición (GET, PUT, POST, DELETE,…) que define el estándar (RFC 2616). El objetivo es el consumo de los recursos del servidor usando peticiones que, a priori, no se pueden diferenciar de peticiones legítimas, eligiendo para ello algunas especialmente seleccionadas en maximizar el efecto, como por ejemplo la solicitud de archivos de gran tamaño. En este tipo de ataque el objetivo es el servidor de web, ya que es el encargado de procesar el protocolo HTTP.

Uno de los métodos HTTP más usados es GET, conociéndose este ataque desde el año 2005. Un claro ejemplo es el reporte de Michal Zalewski del 2007, en él se detalla cómo, aprovechando tanto la definición del estándar HTTP como su implementación, se puede provocar un alto consumo de recursos de un servidor con un mínimo consumo del ancho de banda del atacante.

Michal explica cómo gracias al campo de cabecera «Range», en los servidores web Apache e IIS, un atacante puede pedir un número arbitrario de veces el mismo fragmento de un archivo y cada petición es enviada en un «envelope» diferente. Uniendo este hecho a la posibilidad de usar el escalado de las ventanas de transmisión TCP con tamaños de hasta 1 Gb (RFC 1323), se puede conseguir agotar los recursos del sistema atacado con un número bajo de simples peticiones.

Otra variante de este tipo de ataques es «slow HTTP POST», el cual fue expuesto en la OWASP 2010 Application Security Conference. El ataque se basa en enviar una petición POST con el campo de cabecera «content-length» correcto, el cual indica al servidor web la cantidad de datos que debe de esperar recibir.

Una vez enviadas todas las cabeceras de forma normal, el atacante envía el cuerpo del mensaje POST de forma lenta, con el objeto generar un embotellamiento en la conexión al consumir los recursos del servidor. Es muy parecido al de fragmentación HTTP, sin embargo en este caso no es mitigado por balanceadores.

Número excesivo de peticiones en una sesión o Excessive Verb Single Session

Es una variante del ataque «Excessive Verb» que utiliza la característica de HTTP 1.1 que permite realizar varias solicitudes dentro de una misma sesión HTTP. De este modo, el atacante puede reducir considerablemente la velocidad de cada petición HTTP y evitar al mismo tiempo las medidas de protección que controlan la velocidad de transmisión. Tanto «Excessive Verb» como «Excesive Verb Single Session» tienen efectos similares sobre la víctima.

Peticiones múltiples en una sola petición o Multiple Verb Single Request

Es una evolución del ataque «Excessive Verb». En este caso el atacante crea múltiples peticiones HTTP pero no las envía individualmente, sino que genera un único paquete con todas ellas. De esta forma, se puede generar un alto número de peticiones en el servidor manteniendo una tasa de paquetes baja, indetectable para técnicas de detección de anomalías como NetFlow. Además, si el atacante selecciona adecuadamente las peticiones HTTP también puede llegar a eludir las técnicas de inspección profunda de paquetes.

Peticiones GET recursivas

Se trata de otra evolución del ataque «Excessive Verb». En esta variante el atacante genera peticiones GET de páginas web o imágenes que simulan el uso normal de un usuario.

Esta forma, que se puede combinar con cualquiera de las técnicas anteriores, aumenta la dificultad su detección ya que es más complicado diferenciar estas peticiones de las legítimas.

Peticiones GET recursivas aleatorias

Este ataque es una evolución del ataque mediante peticiones GET recursivas y tiene como objetivo sitios web que están indexados de forma numérica y que además suele ser de forma secuencial.

Estos sitios son susceptibles a ataques donde las peticiones están aleatorizadas mediante la generación de números aleatorios que forman parte de la petición HTTP dentro del rango válido de los números de referencia. De esta forma se dificulta también la detección de ataques al no seguir ningún patrón.

Vulnerabilidades en las aplicaciones

Los ataques anteriores se centran básicamente en el tratamiento y los recursos que necesita el servidor web para responder a las peticiones HTTP. Un paso más en la evolución de los mismos es atacar a la aplicación web propiamente dicha.

La idea es aprovechar debilidades de diseño, de implementación o incluso el propio funcionamiento de la aplicación. Algunos ejemplos al respecto son el uso de técnicas de inyección de SQL, para inhabilitar la base de datos, o incluso realizar peticiones especialmente «pesadas», como puede ser en los casos en los en que la aplicación web tiene un buscador utilizando búsquedas que requieran un alto grado de recursos, generando cuello de botella que eventualmente inhabilitaría el servicio.

Como indicamos, estos ataques son muy específicos y requieren generalmente menos recursos por parte del atacante para conseguir efectos devastadores en los sistemas atacados. Sin embargo, para llevarlos a cabo es necesario un mayor tiempo de análisis del sistema que se pretende atacar con el fin de poder identificar las vulnerabilidades o los cuellos de botella que puedan ser explotados durante la ataque.

Como reflexión final es importante indicar que, aunque los tipos de ataques analizados en este artículo están centrados en el protocolo HTTP, por ser uno de los más usados en Internet, existen ataques de similares características para otros protocolos de la capa de aplicación como por ejemplo SMTP, SNMP, FTP, SIP, etc.