16 de febrero de 2013

Ataque DoS: Inundación SYN

Redes de Telecomunicaciones
Tarea 3

Un ataque informático es el que se provoca con el fin de tomar el control, desestabilizar el sistema o servicio de algún servidor, o simplemente para provocar la negación de un servicio.

Los protocolos existentes actualmente fueron diseñados para ser empleados en una comunidad abierta y con una relación de confianza mutua. La realidad indica que es más fácil desorganizar el funcionamiento de un sistema que acceder al mismo, así los ataques de negación de servicio tienen como objetivo saturar los recursos de la víctima de tal forma que se inhabilitan los servicios brindados.

Algunas de las razones por las cuales se provocan estos ataques son las siguientes:
  • Se ha instalado un troyano y se necesita que la víctima reinicie la máquina para que surta efecto. El usuario al ver que no puede acceder a un servicio, piensa que la mejor forma de resolverlo es reiniciando su computadora.
  • El intruso cree que actúa bien al dejar fuera de servicio algún sitio web que le disgusta.
  • Para prevención de fallos, cuando el administrador del sistema quiere comprobar que sus instalaciones no son vulnerables a este tipo de ataques.
  • El administrador del sistema tiene un proceso que no puede detener en su servidor y, debido a este, no puede acceder al sistema. Para ello, lanza contra sí mismo un ataque DoS deteniendo los servicios.

Una de las formas más conocidas para provocar ataques del tipo DoS (Negación del Servicio) son las llamadas Jamming o Flooding.

Este tipo de ataques desactivan o saturan los recursos del sistema. Por ejemplo, un atacante puede consumir toda la memoria o espacio en disco disponible, así como enviar tanto tráfico a la red que nadie más pueda utilizarla. Aquí el atacante satura el sistema con mensajes que requieren establecer conexión. Sin embargo, en vez de proveer la dirección IP del emisor, el mensaje contiene falsas direcciones IP usando Spoofing y Looping. El sistema responde al mensaje, pero como no recibe respuesta, acumula buffers con información de las conexiones abiertas, no dejando lugar a las conexiones nuevas.

Muchos de los servicios de Internet han sufrido bajas temporales por ataques que explotan el protocolo TCP. Esta vulnerabilidad ha sido ampliamente utilizada en el pasado, pero aún hoy pueden encontrarse sistemas vulnerables. Otra acción común es la de enviar miles de correos electrónicos sin sentido a todos los usuarios posibles en forma continua, saturando los sistemas.

Principios para ataque de inundación SYN (SYN Flood)

Cuando una máquina se comunica mediante TCP/IP con otra, envía una serie de datos junto a la petición real. Estos datos forman la cabecera de la solicitud. Dentro de la cabecera se encuentran unas señales llamadas Flags (banderas). Estas señales permiten iniciar una conexión, cerrarla, indicar que una solicitud es urgente, reiniciar una conexión, entre otras. Las banderas se incluyen tanto en la solicitud del cliente, como en la respuesta del servidor.

La inundación SYN envía un flujo de paquetes TCP/SYN (varias peticiones con Flags SYN en la cabecera), muchas veces con la dirección de origen falsificada. Cada uno de los paquetes recibidos es tratado por el destino como una petición de conexión, causando que el servidor intente establecer una conexión al responder con un paquete TCP/SYN-ACK y esperando el paquete de respuesta TCP/ACK. Sin embargo, debido a que la dirección de origen es falsa o la dirección IP real no ha solicitado la conexión, nunca llega la respuesta.

Estos intentos de conexión consumen recursos en el servidor y copian el número de conexiones que se pueden establecer, reduciendo la disponibilidad del servidor para responder peticiones legítimas de conexión.

Representación de una conexión normal entre el cliente y un servidor.

http://upload.wikimedia.org/wikipedia/commons/9/9a/Tcp_normal.svg

Representación de atacante que hace varias peticiones al servidor pero nunca devuelve la respuesta con la señal ACK (lo que provoca que la conexión no se complete, y el servidor se quede esperando). Un usuario cotidiano requiere del servicio, pero el servidor esta saturado que no es posible establecer conexión.

http://upload.wikimedia.org/wikipedia/commons/9/94/Tcp_synflood.png

Ataque de inundación SYN


Para esto utilice una herramienta llamada HPing, que no es más que una herramienta para línea de comandos que nos permite crear y analizar paquetes TCP/IP. Tiene muchas utilidades, como hacer testing de firewalls, escaneo de puertos, redes y también tiene la capacidad de provocar un SYN Flood Attack.

Para instalar desde Ubuntu se escribe lo siguiente en la terminal.
~$ sudo apt-get install hping3

Pedirá permiso de usuario para instalar. Una vez instalado podemos hacer ataques simples.

Nota: Los siguientes ataques fueron provocados en mi propia computadora, por lo cual no hubo terceros perjudicados. Se debe ser cuidadoso ya que ataques de este tipo son considerados delito en muchos países.

Como vamos a provocar un ataque a nuestro propio ordenador buscaremos la IP que tenemos asignada con el siguiente comando.
~$ ifconfig eth1 | grep -e inet


Ahora teniendo la IP podemos probar el siguiente comando, cuyo efecto será enviar infinitamente paquetes al puerto 80 a la dirección indicada.
~$ sudo hping3 -p 80 -S --flood 192.168.15.105

Algo un poco más completo sería como sigue:
~$ sudo hping3 --rand-source -p 80 -S --flood 192.168.15.105

donde:
--rand-source genera direcciones de origen IP al azar.

-p 80 es el puerto que elegimos atacar.

-S activa la bandera SYN.

--flood le indica a hping que envíe los paquetes a la máxima velocidad posible.

y por último la IP de la victima a atacar.

Al ejecutar esta última instrucción desde el terminal podemos ver lo siguiente (Después de un momento interrumpí la ejecución, y el programa imprime un resumen de paquetes enviados).


Mientras no interrumpamos la ejecución del comando, podemos notar que el acceso a páginas web en general ha sido afectado, esto porque el comando esta provocando un exceso de peticiones, lo que provoca la denegación del acceso.


Podemos monitorear desde Wireshark las peticiones que se están produciendo.


En pocas palabras lo que estamos provocando es enviar repetidamente paquetes con la bandera SYN en la cabecera, y cada uno esta tratando de crear una conexión, la cuál nunca es respondida debido a que se están enviando desde IPs falsas, lo que sobresatura el sistema e impide el acceso posterior.

Grabe un vídeo de mi escritorio para que puedan ver el efecto. Pueden notar que al principio tenemos acceso normal a página web, y una vez que ejecutamos el comando desde la terminal, el acceso tarda demasiado en completarse, que de hecho impide cargar la página por completo.


Previniendo el ataque de inundación SYN

Como ven la creación de este ataque es muy fácil, por lo que existen varias formas de impedir que un atacante provoque este tipo de acciones.

Veamos tres opciones que se pueden configurar desde Linux para prevenir este tipo de ataques.

Activar las SYN Cookies, rechaza nuevas conexiones cuando la cola SYN se llena.
~$ sysctl -w net.ipv4.tcp_syncookies="1"

Aumentar el "backlog queue", es decir, dar más holgura al sistema para procesar peticiones entre-abiertas.
~$ sysctl -w net.ipv4.tcp_max_syn_backlog="2048"

Minimizar el tiempo de espera en la respuesta al SYN+ACK. En principio un sistema Linux por defecto esperará 3 minutos, podemos dejarlo en 21 segundos.
~$ sysctl -w net.ipv4.tcp_synack_retries=2

Referencias:
SYN Flood con Hping3
Tipos de ataques informáticos
Prevenir ataque SYN Flood

3 comentarios:

Nota: solo los miembros de este blog pueden publicar comentarios.