Mitigar Vulnerabilidades de solicitudes HTTP GET/POST Lentas en un servidor Apache

6 minuto(s)

Muchos servidores pueden sufrir ataques lentos DOS (Denegación de Servicios), estos ataques también son conocidos como ataques HTTP de Slowloris los cuales utilizan solicitudes HTTP GET para saturar y ocupar todas las conexiones HTTP disponibles en un servidor web, asimismo este ataque aprovecha una vulnerabilidad en lo servidores web basados en subprocesos que esperan recibir encabezados HTTP completos antes de liberar una conexión abierta y continua un proceso en el cual nuestro servidor puede ser vulnerable a estos ataques mediante solicitudes HTTP GET/POST Lentas y en este Post aprenderemos a como protegernos de ellos mediante algunas recomendaciones.

Antes de continuar te invito a escuchar el Podcast: “Herramientas Online Para El Trabajo En Equipo”:

Spotify: Sound Cloud:

Bien ahora continuemos con el Post: Mitigar Vulnerabilidades de solicitudes HTTP GET/POST Lentas en un servidor Apache. 

Un usuario que tenga malas intenciones, puede abrir varias conexiones en un servidor haciendo solicitudes HTTP, pero no cerrándolas, si el atacante mantiene cada solicitud HTTP abierta, y alimenta los datos falsos del servidor, antes que se termine el  tiempo de espera, la conexión HTTP permanecerá abierta hasta que el atacante la cierre. Si el atacante ha ocupado todas las conexiones HTTP disponibles en un servidor web y lo mantiene saturado en espera, el servidor no podrá procesar conexiones legitimas y como consecuencia provocará una denegación de servicios.

Lo que he mencionado anteriormente es la técnica que el atacante emplea la cual le permite consumir recursos en el servidor y restringir el acceso a el, usando solo una parte del ancho de banda, este tipo de ataque DoS es diferente de otro tipo de ataques DoS/DDoS, como los ataques de inundación SYN (SYN flooding), que hacen mal uso del segmente TCP SYN (sincronización) por medio de un protocolo de enlace de 3 vías TCP.

Imagen: cloudflare.com

Como Funciona este tipo de ataques DoS

Para poder entender como trabaja este tipo de ataques, podemos analizar una solicitud HTTP GET, la cual explica mejor como y porque es posible un ataque HTTP DoS lento, veamos a continuación una solicitud HTTP GET completa mediante el cliente Postman, el cual permite hacer solicitudes a los endpoints de una API REST.

En la imagen anterior puedes ver al lado izquierdo la solicitud realizada que lista los datos obtenidos y al lado derecho los detalles de la solicitud HTTP GET realizada. Al final de cada línea de datos en los detalles de la solicitud se ejecuta un CRLF (Carriage Return + Line Feed) que traducido al español significa Retorno de carro + avance de línea, el cual es una secuencia de caracteres no imprimibles que se utiliza para indicar el final de una línea de datos.

Es algo similar a los editores de texto, una solicitud HTTP usa un CRLF al final de una línea para comenzar una nueva línea y 2 secuencias CRLF para denotar una línea en blanco. El protocolo HTTP define una línea en blanco como la finalización de un encabezado. Un ataque HTTP DoS lento se aprovecha de esto al no enviar nunca una línea en blanco final para completar el encabezado HTTP.

Aunque algunos servidores basados en subprocesos como Apache suelen usar un tiempo de espera cuando esperan solicitudes HTTP incompletas, se establece en 300 segundos de forma predeterminada y se restablece tan pronto como el cliente envía el resto de los datos. Para complicar las cosas, los sistemas de detección de intrusiones (IDS) no suelen detectar un ataque HTTP DoS lento porque no contiene ninguna solicitud con formato incorrecto, la solicitud HTTP parecerá legítima para el IDS (Intrusion Detection System).

Identificando y Mitigando Ataques HTTP lentos

Los ataques HTTP DoS lentos, solo son efectivos contra servidores web basados en hilos como Apache, DHTTP o Microsoft IIS, no son efectivos contra servidores web basados en eventos como nginx y lighttpd, los cuales estan desarrollados para manejar grandes cantidades de conexiones concurrentes.

Existen varias herramientas en línea para escanear vulnerabilidades en un sitio web, una de estas es NMAP el cual es un escaner de seguridad gratuito que me permite identificar vulnerabilidades HTTP lentas como  CVE-2007-6750.

Cuando se realiza un escaneo a un sitio web que es vulnerable a un ataque HTTP con esta herramienta, ejecutando en ella el siguiente comando o script


La herramienta me muestra en los resultados los siguientes detalles:

En imagen anterior, en los resultados del análisis aparecen los detalles que indica la flecha en donde afirma que el sitio web tiene vulnerabilidades contra ataques DoS/DDoS de inundación SYN (SYN flooding) o Slowloris.

Prevenir y Mitigar Ataques HTTP lentos en Servidor Apache

Hay muchas técnicas para prevenir y mitigar los ataques DoS HTTP lentos en un servidor Apache, a continuación veamos alguna de las técnicas más populares y fáciles de implementar, existen otras técnicas que implican el uso de balanceadores de carga iptables.

Módulo mod_reqtimeout

Este módulo se incluye por defecto en los servidores HTTP Apache a partir de la versión 2.215 o superior, se puede usar para establecer tiempos de espera para recibir encabezados de solicitud HTTP y el cuerpo de la solicitud HTTP de un cliente.

Como resultado, si un cliente no puede enviar datos de encabezado o cuerpo dentro del tiempo establecido, sel servidor envía un error 408 Request Timeout (Solicitar Tiempo de Espera), a continuación un ejemplo de una configuración que se puede hacer usando este módulo:


En el código anterior he configurado para que el cliente tenga un máximo de 19 segundos para comenzar a enviar datos de encabezado, el cliente debe enviar datos de encabezado a un velocidad de transferencia de 450 bytes por segundo y puede hacerlo durante un máximo de 39 segundos. Asimismo la configuración también le da al cliente un máximo de 20 segundos para comenzar a enviar datos del cuerpo.

El cliente debe enviar los datos del cuerpo del mensaje a una velocidad de transferencia de 500 bytes por segundo y puede hacerlo durante un máximo de 40 segundos.

Módulo mod_qos

El módulo mod_qos es una extensión de calidad de servicio para un servidor HTTP Apache, implementa mecanismos de control que pueden asignar diferentes prioridades a diferentes solicitudes HTTP. Veamos el siguiente ejemplo de como configurar el módulo mod_qos para mitigar ataques HTTP DoS lentos:


En el código anterior, se ha configurado el rastreo de hasta 120,000 conexiones y limitamos las solicitudes de 275 conexiones TCP activas, asimismo la configuración limita cada dirección IP a un máximo de 50 conexiones y deshabilitamos Keep Alive o conexion viva cuando se utilizan 190 conexiones (80% de las conexiones en este caso).

Por último le damos un mínimo de 160 bytes por segundo por conexión y limitamos la conexión a 1300 bytes por segundo cuando la cantidad máxima de clientes o MaxClients (275) es alcanzada.

Módulo mod_security

Este módulo es un firewall para aplicaciones web de código abierto (WAF), el cual se puede usar en servidores Apache HTTP, utiliza reglas que se pueden aplicar para llevar a cabo funciones específicas, podemos configurar las siguientes reglas para mitigar un ataque HTTP DoS lento:


En el código anterior identificamos cuando el servidor HTTP Apache activa un código de estado 408 y rastrea cuantas veces sucedió esto, el módulo mantiene los datos en un almacenamiento persistente basado en IP para que pueda correlacionarse entre las solicitudes.

Si este evento ha sucedido de 7 a 50 veces en 50 segundos, las solicitudes posteriores de esa dirección IP se eliminarán durante un período de tiempo determinado, en este caso de 7 minutos.

Conclusión

Hemos aprendido un poco acerca de los ataques HTTP DoS (Denial of Services) lentos a servidores HTTP Apache y también el usos de algunos módulos para protegernos ante estos ataques.

Nota (s)

  • No olvides que debemos utilizar la tecnología para hacer cosas buenas por el mundo.

 

Síguenos en las Redes Sociales para que no te pierdas nuestros próximos contenidos.