Slowloris: el ataque DoS que tumba servidores con paciencia, no con fuerza

Slowloris tumba servidores Apache desde una sola máquina, sin tráfico masivo ni ruido. Solo conexiones lentas y paciencia. Así funciona y cómo defenderte.
Slowloris el ataque DoS que tumba servidores con paciencia no con fuerza

Cuando la mayoría de la gente piensa en un ataque de denegación de servicio, imagina miles de máquinas enviando tráfico masivo hasta colapsar un servidor. Mucho ruido, mucho ancho de banda, muchos recursos.

Slowloris no funciona así.

Slowloris es silencioso. Es paciente. Y con una sola máquina, puede dejar fuera de servicio a un servidor Apache sin apenas generar tráfico. Lo descubrí durante una auditoría de seguridad y desde entonces se ha convertido en uno de mis ejemplos favoritos para explicar por qué la ciberseguridad no es solo cuestión de volumen, sino de lógica.

Este ataque lo descubrí en un cliente con un servidor dedicado y que en horas puntuales. Al documentarme este fin de semana sobre este ataque, decidí escribir esta entrada. No pongo los datos del cliente por el ACUERDO DE CONFIDENCIALIDAD (NDA) que hemos firmado ambas partes así como mi equipo.


¿Qué es Slowloris?

Slowloris es un ataque de tipo DoS de capa 7 (capa de aplicación) creado en 2009 por el investigador Robert «RSnake» Hansen. Su nombre viene del slow loris, un primate de movimientos extremadamente lentos – y esa es exactamente su filosofía: moverse despacio para no ser detectado y mantener al servidor ocupado indefinidamente.

A diferencia de los ataques DDoS volumétricos (que saturan la red con tráfico), Slowloris explota una característica del protocolo HTTP: los servidores mantienen conexiones abiertas mientras esperan que el cliente complete su petición.


Cómo funciona: la lógica del ataque

Para entender Slowloris, necesitas saber cómo funciona una petición HTTP básica.

Cuando tu navegador pide una página web, envía algo así:

GET / HTTP/1.1
Host: victima.com
Connection: keep-alive

(línea en blanco = fin de la petición)

Esa línea en blanco al final (\r\n\r\n) es la señal que le indica al servidor que la petición ha terminado. Sin ella, el servidor sigue esperando.

Y ahí está el truco.

Lo que hace Slowloris:

  1. Abre cientos de conexiones simultáneas al servidor objetivo.
  2. En cada conexión, envía una petición HTTP incompleta — sin la línea final.
  3. Cada pocos segundos, envía una cabecera adicional para que el servidor no cierre la conexión por timeout:

    GET / HTTP/1.1
    Host: victima.com
    X-custom-header-1: valor
    X-custom-header-2: valor ← se envía cada 5 segundos
    X-custom-header-3: valor ← y así indefinidamente
  4. El servidor espera pacientemente que llegue el fin de la petición… que nunca llega.
  5. Mientras tanto, su pool de conexiones disponibles se va llenando.
  6. Cuando no queda ninguna conexión libre, los usuarios legítimos reciben un error 503 Service Unavailable.

El servidor no ha sido bombardeado. Ha sido engañado.


¿Por qué afecta especialmente a Apache?

No todos los servidores son igual de vulnerables. La clave está en cómo gestionan las conexiones.

Apache (en su configuración por defecto) usa un modelo basado en hilos o procesos: cada conexión activa consume un worker. Tiene un número máximo de workers configurado (MaxRequestWorkers). Cuando Slowloris los ocupa todos, Apache no puede atender a nadie más.

Nginx, en cambio, usa un modelo event-driven (basado en eventos). Puede manejar miles de conexiones concurrentes con muy pocos recursos, lo que lo hace prácticamente inmune a Slowloris tal como está.

ServidorVulnerabilidadMotivo
Apache (config. por defecto)AltaUn worker por conexión
IIS 6.0AltaModelo similar
NginxBajaEvent-driven, sin limite práctico
LighttpdBajaEvent-driven
Apache + mod_reqtimeoutMitigadoCorta conexiones lentas

Lo que vi en el pentesting

Durante la auditoría, el servidor objetivo corría Apache 2.4 sin módulos de protección adicionales. Usé slowhttptest, una herramienta que permite lanzar este tipo de ataques de forma controlada y medir el impacto:

slowhttptest -c 500 -H -g -o reporte -i 10 -r 200 -t GET -u http://victima.com -x 24 -p 3

Los parámetros clave:
  • -c 500 – 500 conexiones simultáneas
  • -H – modo Slowloris (cabeceras lentas)
  • – i 10 – intervalo de 10 segundos entre cabeceras
  • -r 200 – 200 conexiones nuevas por segundo
  • -p 3 – tiempo de espera para confirmar que el servidor ha caído

En menos de 90 segundos, el servidor dejó de responder a peticiones legítimas. El ataque generó apenas unos kilobytes de tráfico por segundo — completamente invisible para sistemas de detección basados en volumen.


Cómo defenderse

1. Usa Nginx como reverse proxy

La defensa más efectiva. Nginx absorbe las conexiones lentas antes de que lleguen a Apache. Los usuarios legítimos siguen llegando, Slowloris no puede hacer nada.

2. Activa mod_reqtimeout en Apache

Este módulo de Apache establece un timeout para que las peticiones que no se completan en un tiempo determinado sean cortadas:

# En httpd.conf o apache2.conf
LoadModule reqtimeout_module modules/mod_reqtimeout.so

RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500


Esto le dice a Apache: "Si no recibes cabeceras completas en 20-40 segundos, cierra la conexión."

3. Limita conexiones por IP con mod_qos

QS_SrvMaxConnPerIP 50

Máximo 50 conexiones simultáneas por IP. Un atacante desde una sola máquina queda limitado.

4. Configura correctamente el firewall / WAF

Reglas de rate limiting por IP en el nivel de red, antes de que llegue al servidor web.

5. Usa servicios de protección perimetral

Cloudflare, AWS Shield, o cualquier CDN con protección DDoS detectan el patrón de conexiones lentas y lo bloquean automáticamente.


Conclusión: la importancia de los ataques de capa 7

Slowloris es un ejemplo perfecto de por qué la seguridad no puede limitarse a proteger el perímetro de red. Un ataque que genera prácticamente cero tráfico puede dejar fuera de servicio un servidor en minutos.

Si tienes un servidor Apache expuesto, revisa hoy mismo:

  • ¿Está mod_reqtimeout activado?
  • ¿Tienes un reverse proxy por delante?
  • ¿Tu WAF está configurado para detectar conexiones de larga duración con pocas transferencias?

En pentesting, Slowloris es una prueba estándar precisamente porque revela si el servidor tiene las protecciones mínimas necesarias. Si cae, hay trabajo que hacer.

Este artículo es únicamente con fines educativos. Nunca realices pruebas en sistemas sin autorización expresa por escrito.

Portada » Slowloris

Comparte este artículo

LinkedIn
Twitter
Facebook