Ataque al protocolo HSRP

¿Cómo funciona?

El protocolo de Cisco Hot Standby Router Protocol (HSRP) se usa para la conexión entre routers con el fin de evitar fallos en una red, gracias a la redundancia, comprobando el estado de los mismos cada cierto tiempo. Su funcionamiento se basa en que uno de los routers actúa como maestro de los demás y es el encargado de enrutar el tráfico, mientras que los demás actúan como respaldo en caso de fallo del maestro.

Supongamos dos routers, R1 y R2, donde el primero hace de maestro y el segundo de respaldo. Ambos intercambian mensajes de saludo tipo hello, que permiten conocer el estado del otro a intervalos de tiempo pre configurados, usando para ello la dirección de destino multicast 224.0.0.2. La prioridad a la hora de configurar los routers es la que determina quien actúa de maestro y quién no. Si el maestro sobrepasa un tiempo límite en enviar mensajes de saludo al otro, entonces el “esclavo” asume el papel de maestro.

Ataque

El ataque consiste en que si un usuario emula ser un router con máxima prioridad, podría conseguir ser considerado como el maestro, enrutar todo el tráfico y por tanto conseguir un MitM. Veamos un ejemplo.

Imaginemos que R1 (maestro) y R2 (esclavo) tienen la puerta de enlace 192.68.1.1. Ambos tienen la misma porque ofrecen redundancia. Los ordenadores de nuestro escenario están conectados al switch dentro de la red 192.168.1.0/24. La IP del atacante es la 192.168.1.160 además de una IP virtual 192.168.1.1.

Los dos routers están configurados con el protocolo de enrutamiento HSRP en su interfaz Ethernet, donde R2 se configura con una prioridad de 90 y R1 con una de 100 (prioridad por defecto), para que haga de maestro.

Los dos routers intercambian paquetes de saludo con un intervalo de tiempo de 3 segundos. Estos paquetes se envían a la dirección 224.0.0.2 (multicast), con lo cual cualquier host con conectividad en la capa 2 es capaz de leer estos paquetes y averiguar los parámetros de configuración del protocolo. Capturar los paquetes es sencillo, en este caso lo haremos con whireshark en funcionamiento sniffer.

Para instalar whireshark:

apt-get install wireshark

Con esta información el atacante tiene los datos necesarios para convertirse en router maestro. En la captura podemos ver algo como esto:

Para que el atacante se convierta en router activo solo tiene que mandar mensajes de saludo con mayor prioridad. Los datos más importantes que vemos en la captura son:

  • State, donde el estado ha de ser activo y con código 16, lo que comprueba que el saludo se hace desde un router activo.
  • HelloTime, la frecuencia con la que se envía el paquete de saludo, por defecto 3 segundos.
  • Priority, en este caso 100.

Una vez que tenemos la información necesaria sólo queda construir el paquete e inyectarlo para hacernos con el control. Para la construcción del paquete usaremos la herramienta scapy.

El generador de paquetes scapy escrito en phyton nos permite generar paquetes con muchas opciones, aunque nos centraremos en su uso para interferir en diversos protocolos de enrutamiento y ataques a routers. Para instalar scapy tenemos varias opciones. Si disponemos de un sistema Linux que use sistema apt podemos hacer lo siguiente:

apt-get update
apt-get install python-scapy

También podemos bajarlo de la página de Debiano de la página oficial del proyecto. Una vez bajado el paquete, lo instalamos:

dpkg -i python-scapy_2.1.0-1_all.deb 

Ejecutamos el programa y creamos el paquete a inyectar de la siguiente forma:

scapy

Welcome to Scapy (2.1.0)

>>>
>>> ip = IP(src='192.168.1.1', dst='224.0.0.2')
>>> udp = UDP()
>>> hsrp = HSRP(group=1, priority=255, virtualIP='192.168.1.1')
>>> send(ip/udp/hsrp, iface='wlan0', inter=3, loop=1)
...................
Sent 19 packets.

El envío de paquetes se hace cada 3 segundos indefinidamente, mandando mensajes idénticos a los de R1. En este caso wlan0 es nuestra interface wireless, pero debemos cambiar el parámetro por la interface que se esté usando. Si nos fijamos en una captura con whireshark de los paquetes enviados veremos los paquetes hello:

También podemos ver el uso de multicast DNS, ya que no hay ningún servidor DNS instalado:

Ahora R1 pasa de estar activo a estar en modo standby (o modo espera) y R2 pasa a estar en modo speak.

En este momento el enrutador no responderá a las peticiones ARP de 192.168.1.1, por lo que nostros podemos responder las peticiones ARP para la IP 192.168.1.1 y capturar el tráfico de las máquinas de la LAN ya que somos nosotros ahora los que enrutamos, logrando un ataque MitM.

Una solución adecuada para solventar este fallo de seguridad es el uso de cifrado md5 para la comunicación entre routers y así evitar que se inyecten paquetes, ya que aunque se pueda capturar tráfico como antes, no es posible para un atacante puede inyectar los paquetes sin el hash md5 asociado.

Enlaces: