Ataque Slowloris
Slowloris es un ataque DDoS de bajo ancho de banda que agota el pool de conexiones de un servidor abriendo múltiples conexiones y manteniéndolas vivas indefinidamente. En su forma clásica, envía encabezados HTTP parciales que nunca se completan. Una variante apunta al handshake TLS, iniciando negociaciones SSL/TLS pero enviando fragmentos de ClientHello o handshake extremadamente lentos, forzando al servidor a mantener abierto el costoso estado TLS para cada conexión estancada. Ambas técnicas privan al servidor de conexiones disponibles usando un ancho de banda mínimo — a menudo desde una sola máquina.
Cómo Funciona Ataque Slowloris
Slowloris explota la forma en que los servidores manejan las conexiones concurrentes en múltiples capas. La mayoría de los servidores web asignan un thread o worker para cada conexión entrante y lo mantienen abierto hasta que la solicitud se completa. La variante clásica abusa de esto al nunca completar la solicitud HTTP. Una variante a nivel de TLS apunta al handshake SSL/TLS: el atacante inicia una negociación TLS pero envía los mensajes de handshake (ClientHello, intercambio de claves) extremadamente lento o en fragmentos diminutos. El servidor debe asignar memoria para el estado de la sesión TLS y el contexto criptográfico mientras espera que el handshake se complete — y el estado TLS es significativamente más costoso que una conexión TCP simple. Ambos enfoques mantienen las conexiones ocupadas indefinidamente con un ancho de banda mínimo.
Abrir muchas conexiones concurrentes
El atacante abre cientos o miles de conexiones TCP al servidor web objetivo. Cada conexión inicia una solicitud HTTP válida con encabezados apropiados, aparentando ser un cliente normal que comienza a cargar una página.
Enviar encabezados HTTP parciales
En lugar de completar la solicitud HTTP (que termina con una línea en blanco \r\n\r\n), el atacante envía solo encabezados parciales. El servidor mantiene la conexión abierta, esperando que el resto de la solicitud llegue antes de procesarla.
Enviar periódicamente datos de keep-alive
Antes de que expire el timeout de conexión del servidor, el atacante envía una línea de encabezado incompleta adicional (por ejemplo, 'X-a: b\r\n') para reiniciar el temporizador de timeout. Esta cantidad diminuta de datos — solo unos pocos bytes — es suficiente para mantener la conexión viva indefinidamente.
Variante de handshake TLS: estancar la negociación de cifrado
Al apuntar a servidores HTTPS, el atacante puede aplicar la misma técnica lenta en la capa TLS. Después de completar el handshake TCP, inicia una negociación TLS pero envía los mensajes ClientHello o de handshake subsiguientes en fragmentos diminutos con largas pausas entre ellos. El servidor debe asignar memoria para el contexto criptográfico asimétrico, buffers de sesión y estado de cifrado para cada handshake pendiente — mucho más costoso que una conexión HTTP simple — mientras espera que la negociación se complete.
Agotar el pool de conexiones del servidor
A medida que el atacante acumula cientos de conexiones estancadas (en la capa HTTP, la capa TLS, o ambas), se alcanza el límite máximo de conexiones concurrentes del servidor. Los nuevos usuarios legítimos que intentan conectarse reciben errores de timeout o conexión rechazada, dejando efectivamente el servicio fuera de línea.
Ejemplos Reales
Protestas por las elecciones iraníes
Slowloris ganó amplia atención cuando fue usado contra sitios web del gobierno iraní durante las disputadas elecciones presidenciales de 2009. Los activistas usaron la herramienta para interrumpir sitios de propaganda gubernamental desde computadoras personales, demostrando que una sola máquina podía dejar fuera de servicio un servidor web.
Campañas hacktivistas contra instituciones financieras
Variantes de Slowloris fueron usadas como parte de la Operación Ababil, una serie de ataques DDoS contra importantes bancos estadounidenses incluyendo Bank of America y JPMorgan Chase. Los componentes de ataque de tasa lenta fueron combinados con inundaciones volumétricas para abrumar tanto las capas de red como de aplicación simultáneamente.
Divulgaciones de vulnerabilidades de Apache Server
Investigadores de seguridad continuaron demostrando que las instalaciones de Apache HTTP Server sin protección siguen siendo vulnerables a Slowloris por defecto, ya que Apache asigna un thread por conexión. Las pruebas mostraron que tan solo 300 conexiones concurrentes desde un solo portátil podían hacer que un servidor Apache por defecto dejara de responder.
Impacto y Evaluación de Riesgo
Slowloris es particularmente peligroso porque requiere recursos mínimos del atacante — una sola máquina con una conexión a internet estándar puede dejar fuera de servicio un servidor web sin protección. El ataque causa indisponibilidad total del servicio para usuarios legítimos sin activar la detección DDoS volumétrica tradicional. Debido a que el uso de ancho de banda es extremadamente bajo, el monitoreo a nivel de red y la limitación de tasa basada en volumen de tráfico son ineficaces. Las organizaciones afectadas experimentan tiempo de inactividad prolongado, frustración de clientes y potencial pérdida de ingresos, especialmente para negocios que dependen de la disponibilidad web.
Cómo Detectar Ataque Slowloris
Monitorear el número de conexiones concurrentes por dirección IP — Slowloris genera un número anormalmente alto de conexiones abiertas pero inactivas desde pocas IPs de origen. Rastrear la duración de conexiones y marcar las que permanecen abiertas sin completar una solicitud HTTP durante períodos extendidos. Analizar la tasa de solicitudes completadas vs. incompletas — un servidor saludable completa la mayoría de solicitudes rápidamente, mientras que un ataque Slowloris muestra muchas conexiones estancadas. Vigilar patrones de paquetes de datos pequeños periódicos (encabezados de keep-alive) sin completar solicitudes completas. Monitorear la utilización de threads/workers del servidor acercándose a la capacidad máxima.
Cómo Prevenir Ataque Slowloris
Configurar timeouts de conexión agresivos para cerrar conexiones inactivas o lentas rápidamente (por ejemplo, reducir las directivas Timeout y RequestReadTimeout de Apache). Establecer límites en el número máximo de conexiones concurrentes desde una sola dirección IP. Usar un proxy reverso o balanceador de carga (como Nginx o HAProxy) que almacene las solicitudes completas en buffer antes de reenviarlas al backend — esta arquitectura es inherentemente resistente a Slowloris porque el proxy maneja las solicitudes incompletas sin consumir recursos del backend. Desplegar un WAF con detección de ataques de tasa lenta que identifique y bloquee clientes que envían solicitudes parciales anormalmente lentas. Cambiar de servidores con thread por conexión (Apache prefork) a arquitecturas basadas en eventos (Nginx, Node.js) que manejan miles de conexiones con una asignación mínima de recursos por conexión.
Ejemplos de Código
# Enable mod_reqtimeout (loaded by default in Apache 2.4+)
LoadModule reqtimeout_module modules/mod_reqtimeout.so
# Set strict timeouts for receiving request headers and body
# Header: 10 seconds initial, +1 second for each 500 bytes, max 30 seconds
# Body: 20 seconds initial, +1 second for each 500 bytes, max 60 seconds
RequestReadTimeout header=10-30,MinRate=500 body=20-60,MinRate=500
# Limit maximum concurrent connections per IP
# Requires mod_limitipconn or use iptables:
# iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j DROP
http {
# Close connections with no activity quickly
client_header_timeout 10s;
client_body_timeout 10s;
send_timeout 10s;
keepalive_timeout 15s;
# Limit concurrent connections per IP
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
listen 80;
# Max 30 concurrent connections per IP
limit_conn addr 30;
location / {
# Nginx buffers the complete request before forwarding
# to the backend, protecting it from slow clients
proxy_pass http://backend;
proxy_buffering on;
}
}
}
PowerWAF bloquea automáticamente Ataque Slowloris antes de que llegue a tu servidor.
Implementa en minutos. Sin cambios de código. Plan gratuito disponible.
Los cupos del plan gratuito son limitados