hacktricks/generic-methodologies-and-resources/pentesting-network/eigrp-attacks.md

231 lines
17 KiB
Markdown
Raw Normal View History

2023-06-05 18:55:20 +00:00
# Ataques EIGRP
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de exclusivos [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
2023-06-05 18:55:20 +00:00
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
**Esta página fue copiada de** [**https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9**](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9)
## Atacando el protocolo EIGRP <a href="#0f82" id="0f82"></a>
**EIGRP (Protocolo de enrutamiento de puerta de enlace interior mejorado)** es un protocolo de enrutamiento dinámico. **Es un protocolo vector de distancia.** **Si no hay autenticación y configuración de interfaces pasivas, un intruso puede interferir en el enrutamiento EIGRP y causar envenenamiento de tablas de enrutamiento.** **Además, la red EIGRP (en otras palabras, el sistema autónomo) es plana y no tiene segmentación en ninguna zona.** ¿Qué podría significar esto para un atacante? Bueno, si inyecta una ruta, es probable que esta ruta se propague por todo el sistema autónomo EIGRP.
<figure><img src="../../.gitbook/assets/image (25) (1).png" alt=""><figcaption></figcaption></figure>
En primer lugar, atacar un sistema EIGRP independiente requiere establecer una vecindad con un enrutador EIGRP legítimo, lo que abre muchas posibilidades, desde reconocimiento básico hasta varias inyecciones.
Para esto usaré [**FRRouting**](https://frrouting.org/). Este es un software de código abierto diseñado para crear un enrutador en Unix y Linux. **FRRouting** te permite implementar **un enrutador virtual que admite BGP, OSPF, EIGRP, RIP y otros protocolos.** Todo lo que necesitas hacer es implementarlo en el sistema del atacante y puedes fingir ser un enrutador legítimo en el dominio de enrutamiento. Te mostraré cómo implementar FRR en tu sistema en la siguiente sección.
### Inteligencia de red <a href="#41e6" id="41e6"></a>
**Conectarse al dominio de enrutamiento nos permite hacer enumeración y reconocimiento de redes y no pasar mucho tiempo escaneando.** Este método te ahorra mucho tiempo valioso. **Además, al escanear, puedes ser detectado por sistemas de seguridad IPS/IDS.** Para mí, conectarse al dominio y la enumeración es el vector de ataque en los dominios de enrutamiento que te da el mayor impacto. Pero para hacer esto necesitas implementar **FRRouting**. Aquí vamos.
**Es necesario editar el archivo de configuración daemons.** Contiene las configuraciones de los demonios en el contexto de su actividad. Ya sea que estén habilitados (sí) o no (no). Necesitamos activar el demonio **eigrpd**.
```
~# nano /etc/frr/daemons
eigrpd=yes
```
<figure><img src="../../.gitbook/assets/image (15) (1).png" alt=""><figcaption></figcaption></figure>
Después de eso, es necesario corregir el archivo **vtysh.conf** agregando una línea responsable de guardar la configuración en un solo archivo, para que las configuraciones de diferentes protocolos no se dispersen en diferentes archivos **(por ejemplo, eigrpd.conf, staticd.conf).** Es configurable opcionalmente.
2023-06-05 18:55:20 +00:00
```
~# nano /etc/frr/vtysh.conf
service integrated-vtysh-config
```
La configuración de FRRouting está lista. Ahora es el momento de ejecutar el demonio de FRR. Y sí, necesitamos habilitar el enrutamiento de tráfico. Por defecto, está deshabilitado en las distribuciones de Linux.
2023-06-05 18:55:20 +00:00
```
~$ sudo systemctl start frr
~$ sudo sysctl -w net.ipv4.ip_forward=1
```
<figure><img src="../../.gitbook/assets/image (32).png" alt=""><figcaption></figcaption></figure>
El comando **vtysh** nos llevará al panel de control del router FRR.
```
~$ sudo vtysh
```
### EIGRP Attacks
#### Introduction
2023-06-05 18:55:20 +00:00
The Enhanced Interior Gateway Routing Protocol (EIGRP) is a Cisco proprietary routing protocol that is widely used in enterprise networks. EIGRP is an advanced distance-vector routing protocol that uses a complex metric based on bandwidth, delay, reliability, load, and MTU to calculate the best path to a destination network. EIGRP is a classless routing protocol that supports variable-length subnet masks (VLSM) and route summarization.
#### EIGRP Protocol Overview
EIGRP uses a hierarchical network design that consists of autonomous systems (AS) and areas. An AS is a collection of networks that are under a common administrative domain. An area is a logical grouping of networks that share the same routing policies. EIGRP uses a Diffusing Update Algorithm (DUAL) to calculate the best path to a destination network. DUAL is a loop-free algorithm that guarantees a fast convergence and a stable routing table.
#### EIGRP Protocol Vulnerabilities
2023-06-05 18:55:20 +00:00
EIGRP is a complex protocol that has several vulnerabilities that can be exploited by attackers. The most common EIGRP attacks are:
2023-06-05 18:55:20 +00:00
- EIGRP Neighbor Spoofing: An attacker can send EIGRP packets with a spoofed source address to impersonate a legitimate EIGRP neighbor. This can be used to inject false routing information or to cause a denial of service (DoS) attack.
- EIGRP Route Injection: An attacker can inject false routing information into the EIGRP network to redirect traffic to a malicious destination or to cause a DoS attack.
- EIGRP Route Poisoning: An attacker can send EIGRP packets with a high metric value to advertise a non-optimal route to a destination network. This can be used to cause a DoS attack or to perform a man-in-the-middle (MitM) attack.
- EIGRP Authentication Bypass: EIGRP supports authentication to prevent unauthorized access to the routing domain. However, if the authentication mechanism is not properly configured, an attacker can bypass it and gain access to the routing domain.
#### EIGRP Attack Tools
There are several tools that can be used to perform EIGRP attacks, such as:
- eigrp_spoofer: A tool that allows an attacker to spoof EIGRP packets and impersonate a legitimate EIGRP neighbor.
- eigrpinject: A tool that allows an attacker to inject false routing information into the EIGRP network.
- eigrp_poisoner: A tool that allows an attacker to perform EIGRP route poisoning attacks.
- eigrp_auth_bypass: A tool that allows an attacker to bypass EIGRP authentication mechanisms.
2023-06-05 18:55:20 +00:00
#### EIGRP Attack Mitigations
2023-06-05 18:55:20 +00:00
To mitigate EIGRP attacks, it is recommended to:
2023-06-05 18:55:20 +00:00
- Enable EIGRP authentication and configure strong passwords.
2023-06-05 18:55:20 +00:00
- Use access control lists (ACLs) to restrict EIGRP traffic to trusted sources.
2023-06-05 18:55:20 +00:00
- Use encryption to protect EIGRP traffic.
2023-06-05 18:55:20 +00:00
- Monitor EIGRP traffic for anomalies and suspicious activity.
- Keep EIGRP software up-to-date with the latest security patches.
2023-06-05 18:55:20 +00:00
```
Inguz# show version
```
<figure><img src="../../.gitbook/assets/image (3) (2) (2).png" alt=""><figcaption></figcaption></figure>
> **Sin embargo, no olvides que el dominio de enrutamiento EIGRP puede estar protegido por autenticación. Pero aún tienes la oportunidad de conectarte al dominio de enrutamiento. Cuando se envían paquetes hello, también contienen hashes criptográficos. Si puedes extraer estos hashes del volcado de tráfico y restablecer la contraseña, puedes iniciar sesión en el dominio de enrutamiento con esta contraseña.**
Ve a la configuración global y comienza el proceso **EIGRP**, especifica el número de sistema autónomo - **1**
2023-06-05 18:55:20 +00:00
Y también necesitamos declarar la red en la que estamos. Estamos en 10.10.100.0/24. Mi dirección es 10.10.100.50/32
```
Inguz# configInguz(config)# router eigrp 1Inguz(config-router) network 10.10.100.50/32
```
Después de eso, se establece la vecindad entre los routers EIGRP legítimos. Hay dos de ellos en mi red:
* **GW1 (10.10.100.100)**
* **GW2 (10.10.100.200)**
Vecindad EIGRP con GW1 (10.10.100.100):
<figure><img src="../../.gitbook/assets/image (5) (1) (2).png" alt=""><figcaption></figcaption></figure>
Vecindad EIGRP con GW2 (10.10.100.200):
<figure><img src="../../.gitbook/assets/image (30) (1).png" alt=""><figcaption></figcaption></figure>
Durante el establecimiento y mantenimiento de la vecindad entre los routers EIGRP, los routers intercambian su información de enrutamiento. Después de que se establece la vecindad, aparecerán nuevas rutas en nuestra tabla de enrutamiento del sistema atacante, a saber:
* **10.1.239.0/24 a través de 10.10.100.100;**
* **30.30.30.0/24 a través de 10.10.100.100;**
* **100.100.100.0/24 a través de 10.10.100.100;**
* **172.16.100.0/24 a través de 10.10.100.200**
<figure><img src="../../.gitbook/assets/image (29) (1) (2).png" alt=""><figcaption></figcaption></figure>
Así, después de establecer la vecindad, sabemos sobre la existencia de estas subredes, lo que nos facilita la prueba de penetración y nos ahorra tiempo. Podemos prescindir del escaneo adicional de subredes. Ahora estamos en el dominio de enrutamiento EIGRP y podemos desarrollar algunos vectores de ataque. Hablemos de ellos.
2023-06-05 18:55:20 +00:00
### Vecinos EIGRP falsos <a href="#51ee" id="51ee"></a>
**He descubierto que generar y enviar rápidamente paquetes de saludo EIGRP masivos sobrecarga la CPU del router, lo que a su vez puede abrir la puerta a un ataque DoS.** He desarrollado un pequeño script [**helloflooding.py**](https://github.com/in9uz/EIGRPWN/blob/main/helloflooding.py), pero me parece que el script carece de velocidad para enviar los paquetes. **Esto se debe a GIL**, que impide que la función **sprayhello** se ejecute en múltiples hilos por segundo. **Eventualmente reescribiré el script en C.**
<figure><img src="../../.gitbook/assets/image (2) (6) (1).png" alt=""><figcaption></figcaption></figure>
Argumentos del script:
* **Interfaz del sistema atacante (eth0);**
* **Número autónomo de sistema EIGRP (1);**
2023-06-05 18:55:20 +00:00
* **Subred donde se encuentra el sistema atacante. En mi caso, la subred es 10.10.100.0/24**
```
~$ sudo python3 helloflooding.py --interface eth0 --as 1 --subnet 10.10.100.0/24
```
<figure><img src="../../.gitbook/assets/image (26) (1).png" alt=""><figcaption></figcaption></figure>
### Agujero negro EIGRP <a href="#5c04" id="5c04"></a>
La esencia de este ataque es la simple inyección de una ruta falsa que envenenará la tabla de enrutamiento. El tráfico hacia, digamos, la red `10.10.100.0/24` no llegará a ninguna parte, causando una denegación de servicio. Este tipo de ataque se llama agujero negro. La herramienta utilizada para realizarlo será el script [**routeinject.py**](https://github.com/in9uz/EIGRPWN/blob/main/routeinject.py). Para este ejemplo, enviaré tráfico destinado al host `172.16.100.140/32` al agujero negro.
2023-06-05 18:55:20 +00:00
<figure><img src="../../.gitbook/assets/image (16) (1).png" alt=""><figcaption></figcaption></figure>
Argumentos del script:
* **interfaz del sistema atacante**
* **número AS de EIGRP**
* **dirección IP del atacante**
* **dirección IP de la subred objetivo cuyo tráfico se enviará al agujero negro**
* **máscara de subred objetivo**
```
~$ sudo python3 routeinject.py --interface eth0 --as 1 --src 10.10.100.50 --dst 172.16.100.140 --prefix 32
```
<figure><img src="../../.gitbook/assets/image (20) (1).png" alt=""><figcaption></figcaption></figure>
2023-06-05 18:55:20 +00:00
**Nuestro host parece estar en problemas :)**
<figure><img src="../../.gitbook/assets/image (6) (1) (1).png" alt=""><figcaption></figcaption></figure>
Como se puede ver, el host pierde conectividad con el host **172.16.100.140/32** debido a la inyección de ruta.
2023-06-05 18:55:20 +00:00
### Abusando de los valores K <a href="#25aa" id="25aa"></a>
Para establecer vecinos EIGRP, **los routers usan valores K especiales.** Estos deben ser iguales entre todos los vecinos EIGRP. Si al menos un valor K no coincide, el dominio EIGRP se bloqueará y la vecindad se romperá. Usaremos [**relationshipnightmare.py**](https://github.com/in9uz/EIGRPWN/blob/main/relationshipnightmare.py) \*\*\*\* para realizar este ataque\*\*.\*\*
<figure><img src="../../.gitbook/assets/image (12) (2).png" alt=""><figcaption></figcaption></figure>
Argumentos del script:
* **interfaz de red**
* **número AS de EIGRP**
* **dirección IP del router legítimo**
**En nombre de la dirección IP especificada se enviará una inyección en la dirección IP multicast de EIGRP, en la que los valores K son diferentes.** En mi caso, romperé la vecindad en nombre del router GW1 **(la dirección es 10.10.100.100)**.
```
~$ sudo python3 relationshipnightmare.py --interface eth0 --as 1 --src 10.10.100.100
```
<figure><img src="../../.gitbook/assets/image (9) (1).png" alt=""><figcaption><p>Dump de tráfico durante una interrupción de vecindario</p></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (27) (1).png" alt=""><figcaption><p>El router GW1 se desconecta y reconecta infinitamente a EIGRP</p></figcaption></figure>
**Un ataque DoS puede llevarse a cabo de esta manera. Durante la operación, ocurren desconexiones y intentos de vecindario infinitos, paralizando parte del dominio de enrutamiento EIGRP.**
2023-06-05 18:55:20 +00:00
### Desbordamiento de tabla de enrutamiento <a href="#1d0c" id="1d0c"></a>
La esencia de este ataque es provocar el envío de una gran cantidad de rutas falsas, que desbordarán la tabla de enrutamiento. Esto agota los recursos informáticos del router, es decir, la CPU y la RAM, ya que las inyecciones ocurren a una velocidad enorme. Este ataque se implementa con el script [**routingtableoverflow.py**](https://github.com/in9uz/EIGRPWN/blob/main/routingtableoverflow.py)
2023-06-05 18:55:20 +00:00
<figure><img src="../../.gitbook/assets/image (3) (4).png" alt=""><figcaption></figcaption></figure>
Argumentos del script
* **interfaz de red**
* **Número AS de EIGRP**
* **Dirección IP del atacante**
2023-06-05 18:55:20 +00:00
```
in9uz@Inguz:~$ sudo python3 routingtableoverflow.py --interface eth0 --as 1 --src 10.10.100.50
```
Después de ejecutar el script, la tabla de enrutamiento comienza a desbordarse con rutas. Las direcciones aleatorias de las redes objetivo se deben al uso de **RandIP()** en [**Scapy**](https://github.com/secdev/scapy).
<figure><img src="../../.gitbook/assets/image (4) (4).png" alt=""><figcaption><p>Tabla de enrutamiento desbordada en el router GW1</p></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (21) (1).png" alt=""><figcaption><p>CPU del router sobrecargado</p></figcaption></figure>
2023-06-05 18:55:20 +00:00
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PR al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
2023-06-05 18:55:20 +00:00
</details>