Técnicas simples
Concepto
La denegación de servicio o DoS por sus siglas en inglés tiene como objetivo negar el acceso a un servicio o recurso a los usuarios legítimos. Por lo general, consiste en los esfuerzos en interrumpir o suspender los servicios de un host conectado a Internet.
Cabe aclarar que este ataque también puede llevarse a cabo de manera distribuida, conocido como Denegación de Servicio Distribuido o DDoS.
Para llevar a cabo un ataque distribuido es necesario que el atacante tenga el control de una red de dispositivos que responda a sus ordenes llamada botnet.
¿Qué puede provocar?
Las consecuencias del ataque pueden variar según las características del mismo pero van desde una reducción en el rendimiento de la red hasta una negación en el acceso a un recurso, por ejemplo, una página web o un servidor.
Clasificación
Además de la clasificación clásica en ataques distribuidos y no distribuidos, existen diversos criterios para especificar la clasificación aún más. En un principio podemos clasificarlos en:
Contra usuarios
Contra hosts.
Contra redes.
Otro criterio utilizado es analizando la capa en la que se ejecuta el ataque, por ejemplo un ataque en la capa de aplicación o bien un ataque en la capa de transporte.
Por último se puede clasificar según la técnica utilizada para realizar la denegación de servicio, como por ejemplo, inundación, modificación de distintas configuraciones, provocación de errores en el servicio, etc.
Técnicas
Existen variadas técnicas a utilizar para llevar un ataque de tipo denegación de servicio. Cada una será útil en distintos contextos y la técnica a utilizar dependerá de ello.
Se hará principal hincapié en técnicas de DDoS ya que se encuentran más vigentes y podrán ser de más utilidad.
SYN flood (inundación SYN)
La idea tras esta técnica es enviar peticiones de conexión TCP más rápido de lo que el servidor objetivo pueda responder provocando una saturación de la red.
Aprovecha el consumo normal que produce el handshake de TCP.
Funcionamiento
El atacante envía paquetes SYN repetitivamente a distintos puertos del servidor objetivo (normalmente suplantando la IP de origen). Entonces el servidor recibe múltiples conexiones aparentemente legítimas por lo que responde con un paquete SYN-ACK.El cliente malicioso no enviará el paquete ACK (si utilizó suplantación de IP nunca recibirá el SYN-ACK en primer lugar). De cualquier modo, el servidor queda esperando por el ACK del cliente y si bien terminará descartando la conexión, dedicó parte de los recursos a la espera.
Mitigación
Mientras los servidores son más poderosos, cada vez es más difícil desbordar la tabla de conexiones por lo que surge como una solución intuitiva utilizar servidores más poderosos.
Pero además existen técnicas de mitigación específicas que serán menos costosas y muchas veces más efectivas. Por ejemplo:
SYN cookies: El server, al recibir una petición SYN, responde con un SYN-ACK que será el hash de una secuencia de números que es construida desde la dirección IP origen, el número de puerto y probablemente un identificador único. En un funcionamiento normal, el cliente incluirá en el ACK este hash y el servidor podrá verificarlo. De esta manera se reduce el almacenamiento de las conexiones entrantes.
RST cookies: El servidor, para la primer conexión de un cliente retorna un SYN-ACK inválido, de esta manera el cliente deberá generar un paquete RST . Cuando el servidor lo recibe, sabrá que es un cliente legítimo por lo que guardará el mismo y aceptará su próxima conexión.
UDP flood (Inundación UDP)
Como su nombre lo indica se aprovecha del protocolo UDP ya que el mismo no necesita una sesión iniciada en el equipo remoto. El ataque consiste en inundar puertos aleatorios a un host remoto con numerosos paquetes UDP. El servidor víctima hará lo siguiente:
Comprobará ante cada petición a un puerto si existe alguna aplicación escuchando
En caso de que la misma no exista, responderá con paquete ICMP de error.
Si el número de paquetes enviados es lo suficientemente grande podría agotar los recursos del servidor produciendo a la inaccesibilidad.
Ping (ICMP) flood
Como los demás ataques de inundación, consiste en que el atacante, mediante una botnet, envíe paquetes ICMP echo request al servidor objetivo. El mismo responderá con un paquete ICMP echo reply como respuesta. En caso de que el número de paquetes sea lo suficientemente grande, podría denegar el servicio del servidor. Cabe destacar que el tráfico es simétrico, es decir, la cantidad de ancho de banda del dispositivo receptor será la suma del total del tráfico enviado por cada bot.
DNS flood
Una inundación de DNS es un tipo de ataque distribuido de denegación de servicio (DDoS) donde un atacante inunda los servidores DNS de un dominio en particular en un intento de interrumpir la resolución de DNS para ese dominio. Al interrumpir la resolución de DNS, un ataque de inundación de DNS pondrá en peligro la accesibilidad a un sitio web, API o aplicación web ya que no podrá responder al tráfico legítimo. Los ataques de inundación de DNS pueden ser difíciles de distinguir del tráfico pesado normal porque el gran volumen de tráfico a menudo proviene de una multitud de ubicaciones únicas, que buscan registros reales en el dominio, imitando el tráfico legítimo.
La única forma de soportar este tipo de ataques es usar un sistema de DNS muy grande y altamente distribuido que pueda monitorear, absorber y bloquear el tráfico de ataques en tiempo real.
HTTP flood
Un ataque de inundación de HTTP es un tipo de ataque de denegación de servicio distribuido volumétrico (DDoS) diseñado para abrumar a un servidor específico con solicitudes HTTP. Una vez que el destino se haya saturado de solicitudes y no pueda responder al tráfico normal, se producirá una denegación de servicio para solicitudes adicionales de los usuarios reales.
Son ataques de DoS en la capa 7, de aplicación según el modelo OSI.
Existen dos variedades a este tipo de ataque: HTTP GET attack y HTTP POST attack y las características de cada uno varían en función de las características del método utilizado (GET o POST).
La mitigación es compleja como cualquier mitigación DoS de capa 7, pero una forma sencilla de mitigación es plantear un desafío para el cliente.
Otras alternativas consisten en utilizar un servidor de seguridad de aplicación web (WAF), rastreo y bloqueos de IP, etc.
Ataque SSDP
Un ataque del Protocolo de descubrimiento de servicio simple (SSDP) es un ataque de denegación de servicio distribuido basado en la reflexión que explota el protocolos de red Universal Plug and Play (UPnP) para enviar una gran cantidad de tráfico a una víctima objetivo.
En circunstancias normales, el protocolo SSDP se utiliza para permitir que los dispositivos UPnP transmitan su existencia a otros dispositivos en la red. Esta comunicación se da mediante la dirección de multidifusión, la misma, luego informa a todos los equipos de la red acerca del dispositivo. Una vez que una computadora escucha el mensaje de descubrimiento acerca del dispositivo, realiza una solicitud al mismo para obtener una descripción completa de sus servicios. El dispositivo responde directamente a esa computadora con una lista completa de todo lo que tiene para ofrecer. Un ataque de SSDP explota esa solicitud final de servicios al pedirle al dispositivo que responda a la víctima objetivo.
Pasos para realizar el ataque
Exploración de los dispositivos plug-and-play que puedan utilizarse como factores de amplificación.
Se crea una lista con todos los dispositivos que responden
Se crea un paquete UDP con la dirección IP de la máquina víctima.
Se envían paquetes de descubrimiento falsificados con la IP de la víctima a cada dispositivo plug-and-play con una solicitud de tantos datos como sea posible por ejemplo mediante ssdp: rootdevice o ssdp: all.
Cada dispositivo enviará sus datos a la máquina destino amplificando la cantidad de datos enviados.
Si la cantidad de datos es lo suficientemente grande, se logrará la denegación de servicio de la víctima objetivo
Una estrategia básica de mitigación es bloquear el tráfico UDP entrante en el puerto 1900 en el firewall si es que no se hace uso de el mismo.
Ataque Low and Slow
Se basa en un pequeño flujo de tráfico muy lento que apunta a un determinado recurso. A diferencia de los ataques de fuerza bruta más tradicionales, estos ataques requieren muy poco ancho de banda y pueden ser difíciles de mitigar, ya que generan un tráfico que es muy difícil de distinguir del tráfico normal. Debido a que no requieren muchos recursos se pueden lanzar con éxito usando una sola computadora; dos de las herramientas más populares son: Slowloris y R.U.D.Y.
Se dirigen a los servidores web basados en subprocesos con el objetivo de atar cada subproceso con solicitudes lentas, evitando así que usuarios genuinos accedan al servicio. Esto se logra transmitiendo datos muy lentamente, pero lo suficientemente rápido para evitar que el servidor se agote.
Se pueden utilizar encabezados HTTP, solicitudes de publicación HTTP o tráfico TCP para llevar a cabo ataques bajos y lentos.
A modo de explicación, se proveen algunos ejemplos:
La herramienta Slowloris se conecta a un servidor y luego envía lentamente encabezados HTTP parciales de esta manera el servidor mantiene la conexión abierta para que pueda recibir el resto de los encabezados, atando el hilo.
Otra herramienta llamada R.U.D.Y. (R-U-DEAD-YET?) genera solicitudes de publicación HTTP para completar los campos de formulario. Le dice a los servidores la cantidad de datos que deben esperar, pero luego los envía muy lentamente. El servidor mantiene la conexión abierta porque anticipa más datos.
Amplificación NTP
Es un ataque de denegación de servicio distribuido volumétrico (DDoS) basado en la reflexión en el que se explota una funcionalidad de servidor de Protocolo de tiempo de red (NTP) para sobrecargar una red o servidor objetivo con una cantidad amplificada de tráfico UDP.
El Protocolo de tiempo de red está diseñado para permitir que los dispositivos conectados a Internet sincronicen sus relojes internos. Al explotar el comando monlist habilitado en algunos servidores NTP, un atacante puede multiplicar su tráfico de solicitud inicial, resultando en una gran respuesta.
Monlist retorna la lista de las últimas máquinas con las que se han interactuado, como máximo 600.
Pasos
A través de una botnet, se envían paquetes UDP con la dirección origen reemplazada con la dirección IP de la víctima a un servidor NTP que tenga habilitado el comando monlist.
Cada paquete UDP realiza una solicitud al servidor NTP utilizando el comando monlist y el mismo obtiene una respuesta amplificada que es enviada a la máquina víctima.
Si la cantidad de datos son lo suficientemente grande, se logrará denegar el servicio de la máquina víctima y tal vez, también de la red.
Es difícil de mitigar este ataque sin bloquear los servidores NTP reales debido a que el tráfico se ve como legítimo ya que proviene de servidores válidos.
Hay que tener en cuenta que los paquetes UDP no requieren un protocolo de enlace, por lo que el servidor NTP enviará las respuestas al servidor de destino sin verificar que la solicitud sea auténtica.
Amplificación DNS
Es un ataque de denegación de servicio distribuido volumétrico basado en la reflexión en el que se aprovecha la funcionalidad de los servidores de DNS abiertos para sobrecargar a una víctima.
Explota el protocolo DNS en la capa 7 (aplicación) del modelo OSI.
Funcionamiento
Se envían peticiones solicitando información a un Servidor DNS suplantando la identidad de la víctima (IP origen).Como la mayoría de peticiones DNS utilizan UDP, no existe ningún tipo de confirmación en el origen del paquete.
El servidor de nombres envía la respuesta al servidor objetivo, al provenir de un servidor legítimo pasa desapercibida y llega al servidor atacado. Dependiendo del tipo de petición enviada al servidor (una muy útil podría ser ANY), este puede responder amplificando el tamaño del paquete recibido.
Ataques de reflexión y amplificación pueden ser llevados a otras tecnologías haciendo uso del mismo concepto como es el ataque Memcached. Memcached es un servidor de caché de código abierto que corre en el puerto 11211 sobre UDP (lo que hace posible la suplantación)
A grandes rasgos, se realiza una petición al servidor de caché suplantando la IP origen con la IP víctima. Así una gran cantidad de información puede es enviada a la víctima. Para dimensionar la capacidad de este ataque, fue utilizado contra GitHuh en Febrero del 2018 con una transferencia de información de 1,3 Tbps
Peticiones
Realizar N peticiones con curl:
#!/bin/bash
for i in {1..200};
do
echo "Enviando petición";
curl 'https://www.example.com'
echo "Petición: " . $i
done
Para poder medir el tiempo que tarda una petición curl se puede agregar la opción -w "%{time_starttransfer}\n" (tiempo hasta el primer byte - Time to first byte).
curl 'https://www.example.com' -s -o /dev/null -w "%{time_starttransfer}\n"
Generar peticiones con el comando seq
seq 1 1000 | xargs -n1 -I $ -P10 curl