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:

Comments

  1. Buenas,

    a mi me ha quedado una duda. ¿No sería vulnerable a la fuerza bruta? Me refiero, el md5 es el algoritmo de hash más inseguro porque es muy rápido de calcular (también entiendo que en un equipo red es importante el performance).

    ¿Que hay de poner la prioridad más alta posible?

    Un saludo!!

  2. Juan Manuel Sanz says

    MD5 es un algoritmo de cifrado con una capacidad de 128 bit, con lo cual con la suficiente capacidad de computo es posible que se le consiga realizar un ataque de colisión. La certeza de seguridad que te pueda dar MD5 tiene sus límites, ya que a fecha de hoy empieza a estar algo desfasado, siempre podemos complementar la seguridad con reglas ACL y activando port security.

    Por otro lado, lo mejor es poner una prioridad mayor que la del router maestro, que vemos en el paquete capturado.

  3. Interesante artículo.

    ¿Existe algún estándar alternativo a MD5 que mejore su resistencia?

    Saludos

  4. Juan Manue Sanz says

    Parece ser que no existen alternativas de cifrado, la única opción sería usar un timeout bajo y una clave variada, algo como:

    #standby 1 authentication md5 key-string ñajSd9823oDiìsAjd#$sdf%s timeout 15

Trackbacks

  1. […] ¿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 estad…  […]