Ataque de Denegación de Servicio (DoS/DDoS)

Se denomina ataque de denegación de servicio (DoS) a realizar peticiones continuas, a través de la red, con el fin de saturar sus recursos y sobrecargar el sistema objetivo; consiguiendo que se vea afectado su normal funcionamiento o se detenga tanto el servicio como el sistema base que lo sustenta. Un objetivo, por su visibilidad, son los servidores web.

Para que un ataque DoS se convierta en distribuido (DDoS), el atacante utiliza múltiples fuentes de vulnerabilidad u otras fuentes bajo su control que generan el ataque (botnet).

Habitualmente, los ataques DDoS son segregados según la capa del modelo OSI que atacan. los mas comunes son:

  • Capa 3 (Red): Paquetes, Determinación de la ruta y direccionamiento lógico, Ataques de reflexión UDP.
  • Capa 4 (Transporte): Segmentos, Conexiones integrales y confiabilidad, Inundaciones SYN.
  • Capa 6 (Presentación): Datos, Representación de datos y cifrado, Abuso de SSL.
  • Capa 7 (Aplicación): Datos, Procesamiento de red para la aplicación, Inundaciones HTTP e inundaciones de consultas DNS.
Son muy habituales ataques DoS como:
  • Syn Flood: Su método se basa en utilizar el método de apertura de conexión TCP en 3 pasos (3-way-handshake), dejando sin terminar el último paso (envio ACK por parte del cliente) y, por tanto, quedando el servidor a la espera y consumiendo recursos. Con la herramienta hping3, se puede simular este tipo de ataques:
$ hping3 -S --flood --rand-source -p <Puerto-victima> <IP-victima>
  • Connection Flood: Consiste en realizar un número elevado de peticiones sobre un servicio. En definitiva, el modo Flood envía paquetes lo más rápido posible. En el ejemplo, con hping3, no envía respuesta de si han llegado, pero el resultado se ha conseguido.
$ hping3 --flood --rand-source -p <Puerto-victima> <IP-victima> -d <número-bytes>
  • UDP Flood: Consiste en realizar un elevado número de peticiones sobre el protocolo UDP, ya que cada vez que un equipo envía una petición al puerto UDP cerrado, el servidor responde con un paquete ICMP del tipo destino inalcanzable. Para que el atacante pueda destinar sus recursos a enviar paquetes UDP sin tener que gestionar los ICMP recibidos, utiliza IP falsas.
$ hping3 --flood --rand-source --udp <IP-victima> -d <número-bytes>

Las opciones principales de hping3 son:
  • -V: Modo verbose.
  • -S: Establece flag SYN.
  • -p <puerto>: Puerto de destino.
  • -d <bytes>: Tamaño del payload.
  • --flood: Envío rápido (DoS).
  • --rand-source: Fuente aleatoria (para evitar detección).
  • --udp: Usa UDP.
  • --faster: Paquetes por segundos.
Hay más tipos de ataques DoS o DDoS y la herramienta hping3 tiene muchos recursos y es muy utilizada en el hacking ético para realizar pruebas de concepto, como comprobar el bastionado de algunos equipos y observar como responden ante ataques de este tipo.

Otra herramienta también disponible para linux que nos va a permitir llevar a cabo ataques DDoS es Ufonet.

Lo primero que haremos es descargar la aplicación desde internet o mediante el comando:

$ git clone https://github.com/epsylon/ufonet

Una vez descargada, desde la consola nos movemos hasta el directorio donde tenemos la herramienta y ejecutamos el comando ls para ver su contenido. Dentro de él, nos moveremos a la carpeta botnet y repetimos la sentencia para ver el listado de sus archivos.

En esta ubicación hay dos archivos que nos van a interesar especialmente. El primero es dork.txt, el cual contiene la lista de dorks a traves de la cual se pueden buscar zombis en internet para agregarlos a nuestra lista. Viene incluida por defecto una lista con algunos de los dorks más famosos, aunque si editamos el archivo podemos añadir otros que nos interesen sin ninguna dificultad.

El segundo archivo en el que vamos a pararnos será zombies.txt. Aquí es donde se almacenan todas las máquinas sobre las que tenemos el control y que van a ser utilizadas como múltiples atacantes en el ataque DDoS.

Si vemos el contenido del fichero, únicamente nos aparece un zombi sobre el que tenemos el control, lo cual va a ser insuficiente para el tipo de ataque que se quiere llevar a cabo. Editando el fichero podremos incluir manualmente todos aquellos host que ya tengamos controlados previamente, pero además la herramienta nos da la opción de cargar unos cuantos más mediante el comando:

$ ./ufonet -download-zombies

Una vez finalizada esta actualización, volvemos a ver el contenido de zombies.txt para comprobar los cambios producidos.

Ya disponemos de una buena lista de equipos zombis controlados. Sigamos adelante con el ataque. Vamos a ejecutar el comando:

$ ./ufonet -i <dominio_a_atacar>

Mediante esta sentencia vamos a realizar una búsqueda de los ficheros que contiene la pagina web, con el objetivo de buscar el mas pesado de ellos. Este fichero será el que utilicemos más tarde para llevar el ataque, haciendo peticiones sobre el mismo, por lo que cuanto más grande sea este fichero más sencillo será llevar a cabo la denegación de servicio colapsando los recursos del servidor.

En la parte final nos muestra el archivo (o los archivos, si son varios similares) de más peso dentro del servidor.

Ahora solo nos queda lanzar el ataque, lo cual se realizará a través del comando:

$ ./ufonet -a <dominio_objetivo> -r <numero_rondas> -b <fichero_mas_grande>

El numero de rondas serán las pasadas que cada atacante de la botnet realizará el ataque sobre la víctima. Evidentemente, cuanto mayor sea este número mayor será la probabilidad de éxito en la denegación de servicio.

Una vez lanzado el ataque comprobará que el host objetivo está activo, y nos pedirá confirmación para el inicio del ataque.

Una característica especial que tiene Ufonet es que ofrece al usuario la posibilidad de manejar la herramienta mediante una interfaz gráfica web, no solo mediante la consola de comandos.

Para abrir esta interfaz, en la consola escribiremos el siguiente comando:

$ ./ufonet -gui

Y esto nos abrirá automáticamente la pagina web desde donde podemos configurar y lanzar nuestros ataques DDoS.