
Escáner y suite de ataque para hosts que reenvían paquetes no autenticados a través de los protocolos IPIP y GRE. (CVE-2020-10136 CVE-2024-7595)

Un escáner y suite de ataque para hosts en internet público (principalmente routers Cisco) que reenvían paquetes no autenticados encapsulados en los protocolos IP-in-IP y GRE.
Esta vulnerabilidad, conocida como "Insecure Implementation of Tunneling Protocols", está rastreada bajo CVE-2020-10136 y CVE-2024-7595. Permite enviar (pero no recibir) cualquier paquete IP desde los hosts afectados.
A primera vista, la capacidad de enviar pero no recibir paquetes puede parecer inútil. Sin embargo, muchos de los hosts afectados se encuentran en redes que no implementan filtrado de ruta inversa. Esto significa que puedes suplantar direcciones IP en internet público utilizando estas vulnerabilidades sin necesidad de un host que carezca de validación de dirección de origen (comúnmente denominado IP Header Modification o IPHM) para lanzar ataques como la denegación de servicio distribuida (DDoS) por amplificación de DNS.
Esta herramienta está destinada únicamente a fines educativos.
La herramienta no incluye el escaneo de vulnerabilidades similares en los protocolos 6in4 e IP6IP6, ya que IPv6 no es un protocolo real utilizado por personas serias.
cd scanner/
cargo build --release
sudo ./target/release/ipeeyoupeewepee <source_ip> <src_port> <rate_limit> <protocol_type (GRE|IPIP)>
Parámetros:
<source_ip>: La dirección IPv4 pública desde la que estás escaneando.<src_port>: El puerto UDP en el que el escáner escuchará los paquetes reenviados. Asegúrate de que este puerto esté abierto en tu cortafuegos.<rate_limit>: El límite de velocidad de paquetes en paquetes por segundo (p. ej. 1000).<protocol_type>: El protocolo de encapsulación a escanear, ya sea GRE o IPIP.Para utilizar la suite de ataque ubicada en el directorio tools/, asegúrate de tener instalados python3 y scapy. Alternativamente, puedes ejecutar poetry install y poetry shell como root dentro del directorio tools/ para configurar y acceder a un entorno virtual.
Este script comprueba si el host vulnerable es capaz de reenviar paquetes IP suplantados.
sudo python3 can_i_spoof.py <source_ip> <source_port> <tunnel_ip> <spoof_ip> <protocol (GRE|IPIP)>
Parámetros:
<source_ip>: La dirección IPv4 pública desde la que estás escaneando.<source_port>: El puerto UDP para escuchar los paquetes reenviados.<tunnel_ip>: La dirección IP del host IPIP o GRE vulnerable.<spoof_ip>: La dirección IP que pretendes suplantar.<protocol>: El protocolo de encapsulación a explotar, ya sea GRE o IPIP.Ejemplo de uso:
Si la dirección IP de tu máquina es 192.0.2.42 y tienes el puerto UDP 31337 abierto en tu cortafuegos, y has identificado un host de reenvío GRE vulnerable en 198.51.100.25, puedes comprobar si puede suplantar la dirección IP 203.0.113.23 con el siguiente comando:
sudo python3 can_i_spoof.py 192.0.2.42 31337 198.51.100.25 203.0.113.23 GRE
Este script utiliza un host de túneles GRE o IPIP vulnerable para enviar paquetes TCP SYN suplantados al puerto 22 de hosts aleatorios en internet, con el objetivo de generar informes de abuso masivos contra la dirección IP objetivo especificada.
sudo python3 abuse_honeypot.py <tunnel_ip> <spoof_ip> <protocol (GRE|IPIP)>
Parámetros:
<tunnel_ip>: La dirección IP del host IPIP o GRE vulnerable.<spoof_ip>: La dirección IP que pretendes suplantar.<protocol>: El protocolo de encapsulación a explotar, ya sea GRE o IPIP.Ejemplo de uso:
Si has identificado un host de reenvío GRE vulnerable en 198.51.100.25 y quieres suplantar paquetes TCP SYN en el puerto 22 desde la dirección IP 203.0.113.23, puedes ejecutar el siguiente comando:
sudo python3 abuse_honeypot.py 198.51.100.25 203.0.113.23 GRE
Este script utiliza hosts de túneles GRE o IPIP vulnerables para reflejar respuestas DNS de vuelta a un objetivo especificado, demostrando un método para ejecutar un ataque de denegación de servicio distribuida (DDoS) por reflexión DNS. Este ejemplo es básico y probablemente pueda mejorarse para lograr mayores tasas de amplificación y de paquetes; cualquier mejora se deja como ejercicio para el lector.
sudo python3 dns_reflect.py <tunnel_ips.txt> <dns_resolvers.txt> <spoof_ip>
Parámetros:
<tunnel_ips.txt>: Un archivo que contiene una lista de direcciones IP de hosts IPIP o GRE vulnerables.<dns_resolvers.txt>: Un archivo que contiene una lista de resolutores DNS que se utilizarán para reflejar las respuestas de vuelta al objetivo.<spoof_ip>: La dirección IP que pretendes suplantar.Ejemplo de uso:
Para iniciar un ataque contra la dirección IP 203.0.113.23, ejecutarías el siguiente comando:
sudo python3 dns_reflect.py tunnel_ips.txt dns_resolvers.txt 203.0.113.23
En este ejemplo, tunnel_ips.txt debe contener una lista de hosts IPIP o GRE vulnerables, con el protocolo especificado al principio de cada línea, con el siguiente formato:
GRE 198.51.100.25
IPIP 198.51.100.45
GRE 198.51.100.124
GRE 198.51.100.200
IPIP 198.51.100.3
[...]
Y dns_resolvers.txt debe incluir una lista de resolutores DNS recursivos públicos, con un formato como este:
9.9.9.9
8.8.8.8
1.1.1.1
[...]