Москва
+7-929-527-81-33
Вологда
+7-921-234-45-78
Вопрос юристу онлайн Юридическая компания ЛЕГАС Вконтакте

Ataques a STP.

Обновлено 06.09.2025 04:43

 

Oleg Petukhov, abogado en el campo del derecho internacional y la protección de datos personales, especialista en información seguridad, protección de la información y datos personales.

Canal de Telegram: https://t.me/protecciondelainformacion1

Grupo de Telegramas: https://t.me/protecciondelainformacion2

Sitio web: https://legascom.ru

Correo electrónico: online@legascom.ru

 

#proteccióndelainformación #seguridaddelainformación

El protocolo STP (Spanning Tree Protocol) está diseñado para evitar el bucle de paquetes en la red cuando hay rutas duplicadas. Funciona de la siguiente manera. Primero, se detectan los conmutadores que están conectados entre sí. A continuación, se selecciona Root Bridge, Master, root Switch. A continuación, un algoritmo especial bloqueará los puertos del conmutador, que crean bucles en la topología resultante.

Para construir una estructura de árbol de red sin bucles en la red, se debe definir un interruptor raíz (root switch), desde el cual se construye este árbol. El conmutador raíz es el conmutador con el valor de identificador más bajo. El identificador del conmutador es un número de ocho bytes de longitud, cuyos seis bytes menores constituyen la dirección MAC de su unidad de control y los dos bytes mayores se configuran manualmente. Esto permite al administrador de la red influir en el proceso de selección del conmutador raíz. Si el administrador no interviene en este proceso, se seleccionará aleatoriamente el conmutador raíz para que sea un dispositivo con la dirección MAC mínima de la unidad de control. Tal elección puede estar lejos de ser racional. Por lo tanto, debe seleccionar el conmutador raíz en función de la topología de red existente y asignarle manualmente el identificador más pequeño. Cuando se selecciona automáticamente, el conmutador con un valor de dirección MAC inferior a su unidad de control se convierte en raíz. A continuación, para cada conmutador, se define un puerto raíz (root port): es el puerto que tiene la distancia más corta a través de la red al conmutador raíz. Para cada segmento lógico de la red, se selecciona un puente designado, uno de cuyos puertos recibirá paquetes del segmento y los transmitirá hacia el puente raíz a través del puerto raíz del puente.

¿Qué puede hacer un atacante? Puede, al igual que en el ejemplo anterior, pretender ser un conmutador, dirigir hacia el conmutador atacado un paquete BPDU en el que puede falsificar la prioridad, la dirección MAC, para convertirse en el conmutador raíz y con su ayuda interceptar el tráfico de red. El interruptor raíz se convierte en el que tiene la prioridad más alta. En el caso de que la prioridad de varios conmutadores es la misma, para seleccionar el conmutador raíz se utiliza la dirección MAC, que tiene menos, que se convierte en la raíz.

Haremos un poco de trabajo práctico para detectar las direcciones MAC de otras máquinas y reemplazar la MAC con la SUYA. Para hacer esto, necesitaremos un sniffer Wireshark nuevamente. Es necesario, como en el ejemplo de concentradores, habilitar la escucha de la interfaz de red. Solo que ahora no nos interesará el tráfico HTTP, sino el STP. Necesitamos identificar la dirección MAC del conmutador raíz. Para obtener esta información, es necesario conocer la topología de la red. Puede obtener el valor DE la dirección Mac del puerto raíz con Wireshark.

Para obtener información sobre las direcciones MAC, debe ver el valor de los campos Source y Destination en el encabezado del marco interceptado. Estamos interesados en la fuente, para la dirección falsa de nuestro interruptor, especifique una dirección más pequeña, por ejemplo, reducida en uno, como en el ejemplo a continuación.

root@kali:~# macchanger –mac=xx:xx:xx:xx:xx:xx-1 eth0

Current MAC: 00:16:ec:f1:45:e8 (unknown)

Faked MAC: xx:xx:xx:xx:xx:xx (unknown)

Vamos a cambiar la interfaz de red.

root@kali:~# ifdown eth0

root@kali:~# ifup eth0

Internet Systems Consortium DHCP Client V3.1.1

Copyright 2004-2008 Internet Systems Consortium.

All rights reserved.

For info, please visit http://www.isc.org/sw/dhcp/

Listening on LPF/eth0/04:2f:11:65:fc:0a

Sending on LPF/eth0/04:2f:11:65:fc:0a

Sending on Socket/fallback

DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 3

DHCPOFFER of 192.168.1.8 from 192.168.1.101

DHCPREQUEST of 192.168.1.8 on eth0 to 255.255.255.255 port 67

DHCPACK of 192.168.1.8 from 192.168.1.101

bound to 192.168.1.8 -- renewal in 42928 seconds.

if-up.d/mountnfs[eth0]: waiting for interface eth1 before doing NFS mounts

if-up.d/mountnfs[eth0]: waiting for interface eth2 before doing NFS mounts

if-up.d/mountnfs[eth0]: waiting for interface ath0 before doing NFS mounts

if-up.d/mountnfs[eth0]: waiting for interface wlan0 before doing NFS mounts

De forma predeterminada, las prioridades deben ser las mismas, respectivamente, el protocolo STP seleccionará los puertos con la MAC más PEQUEÑA para la ruta.

Ahora, el atacante debe enviar un paquete BPDU en el que especifique su id de conmutador. Otros conmutadores en respuesta también envían sus identificadores, y si el identificador enviado por el atacante contendrá el MAC más PEQUEÑO, entonces, con iguales prioridades, será seleccionado por la raíz.

Puede generar un paquete BPDU falso de la siguiente manera.

En la ventana del diseñador de paquetes PackEth, debe especificar las direcciones MAC del origen de los paquetes y del destinatario. La dirección de origen debe ser falsa.

El campo user defi Ned network payload especifica los siguientes valores:

el identificador de versión del protocolo STA es de 2 bytes. Los conmutadores deben admitir la misma versión del protocolo STA, de lo contrario se puede establecer una configuración activa con bucles;

el tipo BPDU es de 1 byte. Hay dos tipos de BPDU: una BPDU de configuración, es decir, una solicitud para convertirse en un conmutador raíz, sobre la base de la cual se determina la configuración activa, y una BPDU de notificación de reconfiguración, que es enviada por un conmutador que detecta un evento que requiere reconfiguración -

fallo de enlace, fallo de puerto, cambio de prioridad de conmutador o puertos;

las banderas son de 1 byte. Un bit contiene un indicador de cambio de configuración, el segundo es un indicador de confirmación de cambio de configuración;

el identificador del conmutador raíz es de 8 bytes;

distancia a la raíz - 2 bytes;

id del interruptor - 8 bytes;

id de puerto - 2 bytes;

el tiempo de vida del mensaje es de 2 bytes. Medido en unidades de 0,5 s, sirve para identificar mensajes obsoletos. Cuando un paquete BPDU pasa a través de un conmutador, este agrega al tiempo de vida del paquete el tiempo de retardo de este conmutador;

el tiempo máximo de vida del mensaje es de 2 bytes. Si el paquete BPDU tiene una vida útil superior al máximo, los conmutadores lo ignoran;

intervalo hello a través del cual se envían los paquetes BPDU;

retardo de cambio de estado-2 bytes. La latencia determina el tiempo mínimo de transición de los puertos del conmutador al estado activo. Este retraso es necesario para eliminar la posibilidad de que se produzcan bucles temporales cuando los Estados de los puertos cambian de manera irregular durante la reconfiguración. El paquete BPDU de notificaciones de reconfiguración carece de todos los campos excepto los dos primeros. Puede enviar el paquete compilado haciendo clic en Enviar.

Si en los pasos anteriores calculamos correctamente el MAC de otros participantes en el STP, entonces la idea es que el algoritmo de este protocolo vuelva a calcular las rutas para que todo el tráfico se envíe a nuestro puerto falso. Con el fin de no ser detectado, el hacker tendrá que asegurarse de que el tráfico a través de su máquina más a su destino. Dado que de lo contrario todo el tráfico irá a ninguna parte, y el hecho de la falsificación de MAC se detectará rápidamente. Sin embargo, esta tarea en el marco de este post no vamos a resolver.

¿Qué medidas se deben tomar para eliminar esta vulnerabilidad?

En primer lugar, es necesario prohibir la circulación de paquetes BPDU desde puertos en los que no hay conmutadores. Y en caso de que dicho paquete haya llegado, transfiera este puerto al modo de apagado. Luego, es necesario asegurar nuestro conmutador raíz para que bajo ninguna circunstancia se pueda seleccionar otro conmutador raíz, incluido el atacante. No será difícil para el atacante poner una prioridad más alta que la del conmutador maestro real y una dirección MAC más PEQUEÑA para garantizar que el atacante se presente como root.

Para resolver este problema, necesitamos poner todos los puertos del conmutador en un modo STP especial llamado portfast. Después de eso, el cliente conectado a dicho puerto no participará en la resolución de rutas mediante el algoritmo STP (esto puede llevar mucho tiempo, hasta 40 segundos para construir la topología de la red), y solo después de eso comenzará a transmitir datos de usuario a través del puerto. El modo portfast está desactivado de forma predeterminada en los switches Cisco, por lo que tendremos que configurarlo manualmente. También configuraremos la desconexión del puerto en caso de recibir el paquete BPDU.

Switch# conf t

Switch (config)# int range f0/1-24

Switch (config-if-range)# spanning-tree portfast

Switch(config)# spanning-tree portfast bpguard default

Switch(config)# int f0/1

Switch (config-if)# spanning-tree guard root

El contenido de las dos primeras líneas es familiar para nosotros en los ejemplos anteriores. En el tercero, habilitamos el modo portfast. Además, indicamos que en estos puertos la navegación de paquetes BPDU está contraindicada. Y los dos últimos comandos se ejecutan para proteger el puente raíz. Es decir, suponemos que otro conmutador está conectado al nuestro en el puerto f0 / 1 y, en consecuencia, es necesario usarlo como root.

Ahora, incluso si un atacante dirige un paquete BPDU con prioridad máxima y una dirección MAC más PEQUEÑA hacia el conmutador, aún no puede convertirse en el conmutador raíz y redirigir todo el tráfico a través de sí mismo.