You are on page 1of 9

Defensas frente a ataques STP

en capa 2 que hemos visto en entradas anteriores, en este post nos centraremos
en STP (Spanning Tree Protocol), protocolo usado en la red para evitar bucles a
nivel 2 en nuestra topologa.
Es habitual ver trfico similar a este cuando capturas tu propia interfaz (no entro a
valorar si dispones de permisos de administrador o si el equipo es un servidor o un
equipo de usuario):
13:44:16.651348 STP 802.1d, Config, Flags [none], bridge-id
8001.00:24:f7:31:65:00.8016, length 43
message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay
15.00s
root-id 8001.00:24:f7:31:65:00, root-pathcost 0
13:44:18.660589 STP 802.1d, Config, Flags [none], bridge-id
8001.00:24:f7:31:65:00.8016, length 43
message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay
15.00s
root-id 8001.00:24:f7:31:65:00, root-pathcost 0
13:44:20.661034 STP 802.1d, Config, Flags [none], bridge-id
8001.00:24:f7:31:65:00.8016, length 43
message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay
15.00s
root-id 8001.00:24:f7:31:65:00, root-pathcost 0
13:44:22.666010 STP 802.1d, Config, Flags [none], bridge-id
8001.00:24:f7:31:65:00.8016, length 43
message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay
15.00s
root-id 8001.00:24:f7:31:65:00, root-pathcost 0
13:44:24.670848 STP 802.1d, Config, Flags [none], bridge-id
8001.00:24:f7:31:65:00.8016, length 43
message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay
15.00s
root-id 8001.00:24:f7:31:65:00, root-pathcost 0
Como se puede ver en la captura, el trfico se corresponde con tramas BPDU
(Bridge Protocol Data Units) del protocolo STP.
Sin entrar en detalles en el funcionamiento del protocolo, recibir este tipo de trfico
implica que en los switches de capa de acceso no existen medidas de seguridad
para gestionar dicho trfico hacia los equipos finales, lo cual podra permitir a un
atacante enviar a la red tramas BPDU falsas, de forma que los dispositivos tengan
que recalcular sus rutas, consumiendo recursos y creando una inestabilidad en la
red, la cual, en ltima instancia, podra provocar una denegacin de servicio, o por
el contrario, podramos intentar cambiar la topologa de la red para que parte del

trfico hacia el exterior se enve hacia un equipo atacante, donde se inspeccione y


se vuelva a enviar a la red. Por suerte, los dispositivos suelen disponer de unas
medidas de seguridad que podemos aplicar para mitigar este tipo de ataques.
Para nuestra prueba, usaremos un switch Cisco 2960 y lanzaremos los ataques
mediante Yersinia, aunque tambin podramos intentar crear los paquetes de
forma manual con Scapy si fuera necesario.
Posiblemente, a nivel de puerto de acceso, la funcionalidad relacionada con el
protocolo STP ms usada es el modo portfast (o edge port). Esta funcionalidad
evita que se negocien las distintas operaciones de STP al conectar un dispositivo
al puerto donde est configurado, de forma que evitamos el timeout durante el cual
el puerto no est operativo. Esto suele ser necesario en equipos de arranque
rpidos como VDI, que por ejemplo solicitan IP por DHCP antes de que acabe ese
timeout por defecto.
En la situacin inicial, el switch es la raz (root) del rbol, y tenemos nuestro
equipo conectado en la interfaz 24.
Switch# show spanning-tree
VLAN0001
Spanning tree enabled protocol ieee
Root ID Priority 32769
Address 0024.f731.6500
This bridge is the root
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Bridge ID Priority 32769 (priority 32768 sys-id-ext 1)
Address 0024.f731.6500
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Aging Time 300
Interface
Role Sts Cost
Prio.Nbr Type
------------------- ---- --- --------- -------- -------------------------------Fa0/24
Desg LIS 19
128.24 P2p
Switch# show spanning-tree root
Root Hello Max Fwd
Vlan
Root ID
Cost Time Age Dly Root Port
---------------- -------------------- --------- ----- --- --- -----------VLAN0001
32769 0024.f731.6500
0 2 20 15
Lo que vamos a hacer es usar Yersinia para enviar tramas BPDU. Yersinia las
enva cada dos segundos con la misma prioridad a nivel de root, pero con una

direccin MAC numricamente inferior, de forma que intentemos generar un


cambio en la topologa hacia el nuevo root.
Nos conectamos a la consola de Yersinia y tras modificar los parametros de STP,
identificando la interfaz de red sobre la que queremos realizar el envo, lanzamos
un ataque NONDOS attack Claiming Root Role (4), de forma que el switch registra
un cambio de topologa reflejado en la aparicin de un nuevo root en el puerto 24.
Switch# show spanning-tree root
Root Hello Max Fwd
Vlan
Root ID
Cost Time Age Dly Root Port
---------------- -------------------- --------- ----- --- --- -----------VLAN0001
32769 0024.f730.6500
19 2 20 15 Fa0/24
Como podemos ver, el identificador obtenido por la interfaz 24 es inferior al del
propio switch, por lo que se convierte en el nuevo root.
bpduguard
Para evitar esto podemos activar la funcionalidad bpduguard, funcin que al
detectar que se reciben tramas BPDU en un puerto lo deshabilita en modo errdisable, de forma que tengamos que habilitarlo de forma manual.
Switch(config)# interface fastEthernet 0/24
Switch(config-if)# spanning-tree bpduguard enable
Al lanzar de nuevo el ataque, el puerto queda deshabilitado:
*Mar 1 01:46:36.481: %SPANTREE-2-BLOCK_BPDUGUARD: Received BPDU
on port Fa0/24 with BPDU Guard enabled. Disabling port.
*Mar 1 01:46:36.481: %PM-4-ERR_DISABLE: bpduguard error detected on
Fa0/24, putting Fa0/24 in err-disable state
*Mar 1 01:46:37.487: %LINEPROTO-5-UPDOWN: Line protocol on Interface
FastEthernet0/24, changed state to down
*Mar 1 01:46:38.494: %LINK-3-UPDOWN: Interface FastEthernet0/24, changed
state to down
Switch#show interfaces fa 0/24 status
Port
Name
Fa0/24

Status
Vlan
err-disabled 1

Duplex Speed Type


auto auto 10/100BaseTX

Por lo tanto, el puerto queda sin servicio. No obstante, el problema de este modo
de funcionamiento es que nosotros mismos estamos facilitando la denegacin de
servicio ya que el atacante puede ir conectndose a distintas interfaces, de forma
que tras lanzar el ataque se van deshabilitando y el siguiente usuario (legtimo) no

tendra conexin a la red (aqu entraran otras medidas de seguridad adicionales


como controles de seguridad fsicos, port-security, 802.1x, etc).
Como esto puede generar un caos mientras se identifica el origen del problema,
tenemos la opcin de que la interfaz levante automticamente despus de un
timeout, de forma que si el atacante se va o para el ataque, se recuperar el
acceso normal a la red. Para ello, configuramos lo siguiente:
Switch(config)# errdisable recovery cause bpduguard
Switch(config)# errdisable recovery interval 30
Switch# show errdisable recovery
ErrDisable Reason
Timer Status
-----------------------------bpduguard
Enabled
Timer interval: 30 seconds
De este modo la interfaz se levantara 30 segundos despus y si el ataque ha
parado, quedara operativa:
*Mar 1 01:52:21.445: %PM-4-ERR_RECOVER: Attempting to recover from
bpduguard err-disable state on Fa0/24
*Mar 1 01:52:25.858: %LINK-3-UPDOWN: Interface FastEthernet0/24, changed
state to up
*Mar 1 01:52:26.864: %LINEPROTO-5-UPDOWN: Line protocol on Interface
FastEthernet0/24, changed state to up
Dado que nos interesa conocer este tipo de situaciones, deberamos configurar el
envo de un trap SNMP para alertarnos del ataque y analizar si es algo
intencionado, como es el caso de nuestro ataque, o algo no intencionado como
puede ser que un usuario conecte un switch para disponer de ms conexiones
(algo que debera venir previamente autorizado), sin pensar que pueda afectar al
resto de la red.
guard root
Otra opcin que podemos utilizar es la funcionalidad guard root. Esta opcin es
similar a la anterior, pero solo bloquea si se reciben tramas BPDU indicando la
presencia de un equipo ms prioritario el cual sera una nueva raz del rbol.
Switch(config)# interface fastEthernet 0/24
Switch(config-if)# spanning-tree guard root
*Mar 1 02:25:23.329: %SPANTREE-2-ROOTGUARD_CONFIG_CHANGE: Root
guard enabled on port FastEthernet0/24.

De esta forma, si enviamos una BPDU de ataque de root, el puerto se bloquea:


*Mar 1 02:26:26.689: %SPANTREE-2-ROOTGUARD_BLOCK: Root guard
blocking port FastEthernet0/24 on VLAN0001.
*Mar 1 02:26:27.695: %LINEPROTO-5-UPDOWN: Line protocol on Interface
Vlan1, changed state to down
Pero si paramos el ataque o lanzamos un ataque distinto con Yersinia como podra
ser NONDOS attack Claiming Other Role (5), automticamente volvemos a
recuperar la conexin o no se llegara a bloquear:
*Mar 1 02:27:01.719: %SPANTREE-2-ROOTGUARD_UNBLOCK: Root guard
unblocking port FastEthernet0/24 on VLAN0001
Esta funcionalidad es interesante en los puertos troncales que conectan nuestro
core con los equipos de acceso final, de forma que ningn switch de acceso pueda
convertirse en la raz del rbol, pero permitiendo que los switches de acceso
participen en la topologa.
bpdufilter
La ltima funcionalidad de la que hablaremos es bpdufilter, con la que
conseguimos dejar de transmitir o recibir BPDU por el puerto donde est
conectado el equipo final, de forma que en la captura de trfico ya no aparecern
BPDU de STP:
Switch(config)# interface fastEthernet 0/24
Switch(config-if)# spanning-tree bpdufilter enable
Finalmente, si tenemos que aplicarlo a todos los puertos, podemos crearnos una
macro para facilitarnos la tarea, donde podremos aadir nuevas medidas de
seguridad adicionales en el futuro (como podra ser portsecurity):
Switch(config) macro name ProtectL2
Enter macro commands one per line. End with the character '@'.
spanning-tree portfast
spanning-tree bpduguard enable
@
Switch# show parser macro name ProtectL2
Macro name : ProtectL2
Macro type : customizable
spanning-tree portfast
spanning-tree bpduguard enable

Switch(config)# interface fastEthernet 0/24


Switch(config-if)# macro apply ProtectL2
y comprobamos que est aplicada correctamente:
Switch# show parser macro description
Interface Macro Description(s)
-------------------------------------------------------------Fa0/24
ProtectSTP
-------------------------------------------------------------Siempre que apliquemos medidas de seguridad debemos probarlas previamente
en un entorno controlado, conocer las diferencias entre aplicar una medida a nivel
de interfaz o a nivel global, las diferencias en aplicarlo en un puerto de acceso o
en un puerto troncal y por supuesto, tener claro el comportamiento deseado, ya
que por ejemplo, si activamos bpdufilter, al no procesar tramas BPDU, podramos
crear un bucle en la red o por otra parte, si configuramos en una misma interfaz
bpduguard y bpdufilter, este ltimo tiene preferencia ya que filtrar las tramas
BPDU y bpduguard no actuara.
Espero que estas medidas de seguridad os ayuden a continuar avanzando en una
red ms eficiente y segura.

Switches: los grandes olvidados (II) Spanning Tree Protocol


En esta parte voy a explicar las vulnerabilidades del Spanning Tree Protocol, estas pueden
ser explotadas por una herramienta programada por Alfredo Berrueta y David Barroso, dos
grandes de S21sec.
En un gran entorno de red, donde existen varios switches gestionando diferentes segmentos
de red, el protocolo Spanning Tree Protocol (a partir de ahora STP), es usado para evitar la
creacin de bucles de red a nivel 2 del modelo OSI.
Existen diferentes estndares de STP, el primero es el IEEE 802.1d, adems tenemos
802.1q, 802.1w, 802.1s:
802.1d es el estndar que define el STP inicialmente, define el mtodo usado para evitar
los caminos redundantes en una red de switches, adems de asegurar la recuperacin de la
red si alguno de los mismos falla.
802.1q es una extensin del 802.1d pero aadiendo el trmino de redes locales virtuales
(VLAN), este protocolo ya lo explicaremos en otro captulo.

802.1w o (Rapid STP) RSTP es una revisin del 802.1d la cual aplica algunos cambios en
el algoritmo para agilizarlo, as la recuperacin tras un fallo es ms rpida. En general
mejora su rendimiento mientras se es compatible con los dispositivos que solo soportan el
STP original.
802.1s o Mltiple STP (MSTP), mejora el 802.1q permitiendo a los bridges a gestionar
mltiples spanning tres cada uno por grupo de VLAN, incrementado la escalabilidad.
Funcionamiento de STP
El objetivo es evitar bucles y recuperacin ante fallos. Para cumplirlo el algoritmo crea un
rbol de switches, la raz es aquel switch con un ID ms bajo, para identificarlo, todos los
switches mandan a multicast las Bridge Protocol Data Units (BPDU), es un frame de nivel
2 en el cual va incluido el ID del switch (prioridad + MAC del dispositivo), cuando un
switch recibe un BPDU con un ID menos que el suyo deja de enviar su BPDU, as solo el
switch con el ID ms bajo se mantendr generando BPDUs y se convierte en el switch raz.
STP utiliza un sistema de costes para evitar los bucles, cada puerto es configurado con un
coste, la mayora de los switches configuran sus el coste de sus puertos en relacin con la
velocidad de los mismos.
Cada vez que un puerto recibe una BPDU el coste de ese puerto se incrementa con el coste
que contiene la BPDU, el switch raz enva BPDUs de coste cero. Evidentemente si se
reciben ms de una BPDU, las BPDUs de mayor coste se ponen en modo bloqueado.
Cada cierto tiempo, el switch raz manda un BPDU. Cuando un switch recibe un BPDU con
un ID mayor que el suyo propio, intenta convertirse en raz mandando su BPDU. Cuando
un bridge recibe una BPDU en el que el coste hasta la raz es mayor que el coste que l
mismo puede ofrecer por uno de sus puertos, intenta convertirse en puente designado para
ese camino. Si el coste es el mismo, se compararan identificadores.
Existen tambin los denominados TCN BPDUs, son BPDUs que anuncian cambios en la
topologa, cuando son recibidos (despus de un proceso de confirmaciones) los switches
reducen el tiempo para actualizar sus tablas de forwarding.

Por cierto, y ya que no lo he dicho antes, este protocolo no implementa ningn sistema de
autenticacin ni proteccin, es adems en claro
Ataques al STP
Convertirse en bridge raz
Este ataque es tan fcil como inyectar tramas BPDUs donde nos ponemos un ID ms bajo
que el del switch raz, sea la misma prioridad (por defecto el del raz es 32768) y una
MAC ms baja, o directamente ID=0 As nos convertiramos en bridge raz.
Hace falta que os diga ms?, desde aqu podemos convertir nuestro sistema en un switch si
tiene dos tarjetas de red (Yersinia te facilita la tarea), y desde esta posicin podramos
realizar ataques MiTM sobre el trfico que pasara por nuestro sistema.
DOS por inundacin de configuration BPDUs y TCN BPDUs
Mandar mltiples (miles) configuration BPDUs por segundo hace que algunos dispositivos
fallen al procesarlas e incrementen el uso de su CPU hasta un 99%. Adems, cada vez que
se manda un TCN BPDU, el bridge raz debe contestar con un TC-ACK , y cada vez que
esta confirmacin es recibida, los switches deben reducir el tiempo para actualizar sus
tablas de forwarding.

Soluciones
Root Guard
Cuando configuramos root guard, configuramos en que puertos puede estar el switch raz y
en cuales no, as si se recibe una BPDU con ID ms bajo en uno de los puertos con root
guard el mismo se pone en modo STP inestable y deja de transmitir paquetes.
BPDU-Guard
Este sistema permite a los administradores forzar la topologa de arboles y mantenerla
predecible, aquellos dispositivos que estn fuera de la topologa configurada con BPDUguard no podrn influir en la topologa STP. La recepcin de BPDUs fuera de este mbito
hace que BPDU guard deshabilite el puerto.
Hasta el prximo capitulo

You might also like