Simulamos un ataque mediante la técnica de IP spoofing en un entorno de laboratorio aislado. Mostramos cómo evitar este tipo de ataques mediante la activación de filtros anti-IP-spoofing, tanto en routers como en equipos finales Linux.
- ¿Qué es un ataque por IP spoofing? ¿Cómo funciona?.
- Simular ataque IP spoofing en laboratorio aislado.
- Evitar ataques IP spoofing activando URPF (Unicast Reverse Path Forwarding) en routers.
- Evitar IP spoofing interno en equipos Linux.
¿Qué es un ataque por IP spoofing? ¿Cómo funciona?
Se trata de una técnica de ataque consistente en falsificar la dirección IP origen de los paquetes enviados, con el objetivo de ocultar o impersonar (evitar descubrir quién ataca) el origen de un ataque.
Algunas de sus características:
- Se utiliza habitualmente en los ataques DoS o DDoS.
- Los paquetes se encaminan, ya que las redes IP encaminan en función de la dirección destino.
- Son sencillos de realizar, únicamente se requiere de privilegios de administrador en el sistema origen (atacante).
- Existen otros tipos de spoofing como son los ARP spoofing y DNS spoofing.
El funcionamiento básico del IP spoofing, en un ejemplo, es:
- El sistema atacante tiene la IP real 1.1.1.1. Mediante la técnica de IP spoofing «cambia» la IP origen por 3.3.3.3 (perteneciente a un sistema «impersonado» (el segundo equipo atacado, por respuesta del sistema atacado 1). El sistema atacante, como dirección IP destino, inyecta la 2.2.2.2, que pertenece al sistema atacado 1.
- Sistema atacado 1: con IP real 2.2.2.2.
- Sistema impersonado (sistema atacado 2): con IP real 3.3.3.3.
El atacante, con IP falsa de destino 2.2.2.2, enviará el paquete a este equipo atacado (sistema atacado 1). Además, el atacante, también usa una IP origen falsa, correspondiente a un tercer equipo (sistema atacado 2). Por ello, el ataque se amplifica y llega a dos equipos.
Como se ve, es bastante sencillo realizar un ataque de este tipo si no se tienen las medidas adecuadas para evitarlo. Lo preocupante de este tipo de ataques es que, para evitarlos, todas las partes que componen la red e Internet (todos los actores, todas las organizaciones y empresas) deben aplicar las medidas que comentamos en este artículo (y otras, por supuesto).
Un ataque DDoS basado en IP spoofing puede ser demoledor, teniendo en cuenta que el envío de peticiones a servidores legítimos (reflectores), que devuelven respuestas de mayor tamaño que la petición originen (amplificación), dirigen la respuesta a la dirección origen falseada (en las imágenes, el sistema atacado 2).
Los ataques de IP spoofing sólo pueden hacerse efectivos mediante el uso de protocolos como UDP o ICMP, dado que estos protocolos no necesitan establecer conexiones origen/destino, únicamente envían los datos sin más comprobaciones.
Simular ataque IP spoofing en laboratorio aislado
A continuación, realizaremos la simulación de un ataque simple de IP spoofing, en un laboratorio de pruebas aislado. El único objetivo de simular este ataque será para conocer cómo funciona y así poder aplicar las medidas oportunas para evitarlo.
El escenario se realizara en una máquina virtual Kali Linux, con un entorno de red virtualizado. Los datos de cada sistema que se usará para el ataque y los sistemas atacados, son:
- Equipo Kali Linux: con nombre kaliL, sobre el que se monta el entorno de red virtualizado y el que se usará de sistema atacante (mediante scapy). Este equipo puede moverse a cualquiera de las redes del entorno de pruebas (red DMZ 10.1.12.128/26, red interna 10.1.12.0/26/26 o red de Internet 10.1.100.0/24).
- Equipo Linux atacado 1: con nombre siL1, y dirección IP real 10.1.100.42.
- Equipo Linux atacado 2: con nombre siL2, y dirección IP real 10.1.100.72.
- Firewall: con nombre fwL, y dirección IP 10.1.111.44. Equipo con Linux Ubuntu, que hace de cortafuegos.
- Router: con nombre rL, y dirección IP 10.1.110.45. Equipo con Linux Ubuntu, que hace de router.
Dado que los equipos Linux ya incluyen medidas para evitar el IP spoofing, para poder hacer el ataque efectivo, procederemos a deshabilitarlas y así poder apreciar el funcionamiento de la técnica de mitigación de ataques IP spoofing, llamada URPF (Unicast Reverse Path Forwarding). Para ello, accederemos a cada equipo Linux del escenario, implicados en el ataque. En primer lugar, accederemos a la consola del equipo Linux que hace de router (rL). Ejecutaremos en su consola los siguientes comandos:
1 2 3 4 |
sudo su echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter echo 0 > /proc/sys/net/ipv4/conf/eth2/rp_filter |
En el equipo Linux que hace de cortafuegos, el equipo fwL, ejecutaremos los siguientes comandos para desactivar la opción rp_filter:
1 2 3 4 5 |
sudo su echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter echo 0 > /proc/sys/net/ipv4/conf/eth2/rp_filter echo 0 > /proc/sys/net/ipv4/conf/eth3/rp_filter |
Moveremos el equipo Kali Linux a la red interna del escenario de pruebas, que es donde residen los dos equipos Linux que serán atacados mediante IP spoofing. Para ello, en la consola ejecutaremos:
1 |
sir-move-kali internal |
A continuación, ejecutaremos la herramienta scapy, que será la que usemos para perpetrar el ataque IP spoofing. Para ello, desde la consola del equipo Kali Linux (como root), ejecutaremos:
1 2 |
sudo su scapy |
Haremos una primera comprobación para verificar que scapy ve alguno de los equipos de la red de Internet desde la red interna del escenario. Para ello, dentro de la consola de scapy, ejecutaremos el siguiente comando:
1 |
traceroute("10.1.100.12", iface="swL-p5") |
En el comando anterior indicamos que haga un traceroute a la IP 10.1.100.12, que es la IP de la interfaz del router rL con la VLAN de la red de Internet. Además, a la herramienta scapy hay que indicarle la interfaz (puerto) de salida en el switch (en nuestro caso shL-p5, switch shL, puerto 5), dado que scapy no utiliza las tablas de encaminamiento del sistema.
Si la conectividad es correcta, mostrará los paquetes recibidos y enviados:
Antes de realizar el ataque IP spoofing, para poder ver cómo funciona, vamos a iniciar un tcpdump en los dos equipos Linux atacados. Para ello, desde la consola de cada equipo Linux (siL1, con IP 10.1.100.42 y siL2, con IP 10.1.100.72), ejecutaremos el siguiente comando:
1 |
tcpdump -i eth1 icmp |
Este comando dejará escuchando el tráfico ICMP en la interfaz eth1 de cada equipo.
Ahora, desde la consola de scapy ejecutada en el equipo Kali Linux, lanzaremos el ataque de IP spoofing, ejecutando el siguiente comando:
1 |
send(IP(dst="10.1.100.42",src="10.1.100.72")/ICMP(), iface="swL-p5") |
En el comando anterior, establecemos como IP origen del equipo atacante la IP 10.1.100.72, que en realidad se corresponde con la IP del equipo siL2 (equipo atacado). Y, como IP destino, la IP 10.1.100.42, que en realidad se corresponde con la IP del equipo atacado siL1.
Al realizar el ataque, se puede apreciar [2] que la solicitud de ping llega al equipo siL1, contestando la dirección IP origen de la solicitud, correspondiente al equipo siL2. Y aquí reside el «engaño», el ataque, y es que la IP origen ha sido falseada y el equipo que tiene esta IP real (siL2), no es el que ha hecho realmente la petición, sino el equipo atacante Kali Linux, con otra IP real totalmente diferente.
Con este simple método, elaborándolo un poco más, un atacante podría realizar un ataque de tipo DoS desde esta máquina Kali, usando un equipo comprometido (siL2) como origen del ataque a gran escala. Para ello, sería suficiente con aprovechar la capacidad de scapy de enviar solicitudes de ping (u otro método) a grupos de direcciones IP. Por ejemplo, se podría atacar a todos los sistemas de la red de Internet del laboratorio (10.1.100.0/24) y que reenvíen (todos ellos) sus respuestas al equipo siL2, generando un colapso en el mismo. El comando, en scapy, sería tan sencillo como:
1 |
send(IP(dst=Net("10.1.100.0/24"),src="10.1.100.72)/ICMP(),count=100) |
Afortunadamente, hay mecanismos para mitigar o evitar este tipo de ataques. Veremos alguno a continuación.
Evitar ataques IP spoofing activando URPF (Unicast Reverse Path Forwarding) en routers
Una de las medidas anti-IP-spoofing es activando URPF (Unicast Reverse Path Forwarding) en los routers de nuestra organización. Se trata de un método eficiente para automatizar el filtrado basado en el uso de las tablas de encaminamiento. Esta medida permite, básicamente:
- Implementar el filtrado en origen descrito en BCP38.
- Utilizar el encaminamiento multicast.
El funcionamiento básico del URPF es:
- Antes de encaminar un paquete, comprueba si existe una ruta hacia su dirección origen alcanzable a través de la interfaz por la que llegó.
- En caso de que no exista la ruta, se descarta el paquete y se genera una traza para su posterior análisis.
Esta técnica se aplica en el router de salida a Internet de nuestra organización. Es relativamente sencilla de aplicar. Por ejemplo, en un router Cisco (en el laboratorio, en el router rcL), se aplicaría el URPF con los siguientes comandos:
1 2 3 4 5 |
enable conf t ip cef interface GigabitEthernet 0/1 ip verify unicast source reachable-via rx |
Esto evitará el envío de paquetes con la dirección IP falseada.
Una vez aplicada la medida de seguridad URPF al router Cisco (o al que tengamos en nuestra organización), si ahora volvemos a intentar realizar el ataque IP spoofing, de la misma forma que hemos indicando en el punto anterior, veremos que el intento de ataque queda bloqueado en el router rcL y los dos equipos siL1 y siL2 ya no reciben peticiones ni respuestas de ICMP con las IP falseadas [2]:
Evitar IP spoofing interno en equipos Linux
Con el método URPF anteriormente descrito, hemos conseguido evitar el IP spoofing hacia Internet. Es decir, evitamos que los equipos de nuestra organización puedan convertirse en equipos origen de ataques DDoS, entre otros. Pero no evitamos que los equipos internos, entre ellos, puedan ser atacados por IP spoofing.
Por ejemplo, si desde la consola scapy de Kali Linux ejecutamos el siguiente comando:
1 |
send(IP(dst="10.1.12.130",src="10.1.12.131")/ICMP(), iface="swX-p5") |
Estaremos lanzando un ataque IP spoofing interno, con equipo origen
Y lanzamos un tcpdump en los equipos scL1 (con IP real 10.1.12.130) y scL2 (con IP real 10.1.12.131)
Para evitar el IP spoofing interno, activaremos los filtros rp (reverse-path) de Linux en todos los equipos. Para ello, en el ejemplo del laboratorio, abriremos la consola del equipo que hace de firewall fwL (Linux Ubuntu), y ejecutaremos los siguientes comandos:
1 2 3 4 5 |
sudo su echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter echo 1 > /proc/sys/net/ipv4/conf/eth1/rp_filter echo 1 > /proc/sys/net/ipv4/conf/eth2/rp_filter echo 1 > /proc/sys/net/ipv4/conf/eth3/rp_filter |
De esta forma, si intentamos volver a lanzar una ataque IP spoofing desde scapy a estos equipos internos, ya no tendrá efecto: