Корзина

Сейчас у компании нерабочее время. Заказы и сообщения будут обработаны с 09:00 ближайшего рабочего дня (сегодня)

+380 (98) 418-88-51
+380 (99) 418-88-51
+380 (63) 418-88-51
ул.Балковская 120/2, БЦ "Планета", Одесса, Украина
Интернет магазин

Атака и защита протокола STP

Атака и защита протокола STP

STP атака

Для атаки и защиты STP на понадобится стенд.

Схема стенда

В этом при­мере показана часть стан­дар­тной тополо­гии, которая чаще все­го при­меня­ется в кор­поратив­ном сег­менте. SW1 выс­тупа­ет в качес­тве root bridge, SW2 и SW3 — non-root bridge ком­мутато­ры. Пор­ты SW1 0/0, 0/1 SW2 0/1,0/3 SW3 0/0,0/2 исполь­зуют­ся для переда­чи тра­фика, 0/0 и 0/1 на SW2 и SW3 заб­локиро­ваны во избе­жание петель.

Тра­фик проходит по пути SW2 — SW1 — SW3. После этого мы под­клю­чаем нашу машину на Linux к двум access-ком­мутато­рам SW2 и SW3 и замечаем, что нам при­ходят сооб­щения STP.

Дамп тра­фика в сниффере Wireshark

Данные сооб­щения озна­чают, что протокол STP на ком­мутато­рах запущен и не блокируется на под­клю­чен­ных к нам пор­тах. Объ­еденим наши интерфей­сы в bridge для того, что­бы тра­фик шел через наше устрой­ство, запус­каем фрей­мворк Yersinia и видим, что нам дос­тупен STP на обо­их интерфей­сах.

Ин­форма­ция о получен­ных STP BPDU

Начинаем ата­ку и выбира­ем тип ата­ки Claiming Root Role, который означает, что мы нач­нем анон­сировать себя в качес­тве ком­мутато­ра с мень­шим при­ори­тетом, что зас­тавит перес­тро­ить­ся дерево STP.

Вы­бор типа ата­ки Claiming Root Role

Как и предполагалось, мы ста­ли кор­невым ком­мутато­ром для нашего сег­мента сети и сейчас смо­жем уви­деть тра­фик, который ранее шел через SW1:

SW2-LINUX-SW3

SW1#show spanning-tree VLAN0001 Spanning tree enabled protocol ieee Root ID Priority 8193 Address aabb.cc00.0f00 Cost 300 Port 2 (Ethernet0/1) Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Bridge ID Priority 8193 (priority 8192 sys-id-ext 1) Address aabb.cc00.1000 Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Aging Time 15 sec Interface Role Sts Cost Prio.Nbr Type ------------------- ---- --- --------- -------- -------------------------------- Et0/0 Altn BLK 100 128.1 Shr Et0/1 Root FWD 100 128.2 Shr

SW2

SW2#show spanning-tree VLAN0001 Spanning tree enabled protocol ieee Root ID Priority 8193 Address aabb.cc00.0f00 Cost 200 Port 3 (Ethernet0/2) Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Bridge ID Priority 32769 (priority 32768 sys-id-ext 1) Address aabb.cc00.2000 Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Aging Time 15 sec Interface Role Sts Cost Prio.Nbr Type ------------------- ---- --- --------- -------- -------------------------------- Et0/0 Desg FWD 100 128.1 Shr Et0/1 Desg FWD 100 128.2 Shr Et0/2 Root FWD 100 128.3 Shr Et0/3 Desg FWD 100 128.4 Shr SW3#show spanning-tree VLAN0001 Spanning tree enabled protocol ieee Root ID Priority 8193 Address aabb.cc00.0f00 Cost 200 Port 4 (Ethernet0/3) Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Bridge ID Priority 32769 (priority 32768 sys-id-ext 1) Address aabb.cc00.3000 Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Aging Time 15 sec Interface Role Sts Cost Prio.Nbr Type ------------------- ---- --- --------- -------- -------------------------------- Et0/0 Desg FWD 100 128.1 Shr Et0/1 Altn BLK 100 128.2 Shr Et0/2 Desg FWD 100 128.3 Shr Et0/3 Root FWD 100 128.4 Shr

Для про­вер­ки запус­тим пинг:

R4#ping 192.168.0.5 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 192.168.0.5, timeout is 2 seconds: .!!!!

Мы можем видеть, что все пакеты ICMP прош­ли через нашу машину.

Па­кеты ICMP идут через наш компь­ютер ICMP в данном случае исполь­зует­ся исключительно для наг­ляднос­ти, данным обра­зом мож­но перех­ватить любой тра­фик, изме­няя струк­туру, пос­тро­енную STP.

Далее рас­смот­рим дру­гие типы атак на STP, которые можно реализовать с помощью Yersinia.

Ти­пы атак фрей­мвор­ка Yersinia

Sending conf BPDU — мы еди­нож­ды отпра­вим BPDU, который зас­тавит ком­мутато­ры в нашем L2-сег­менте перес­тро­ить дерево и вер­нуть­ся к исходной схе­ме, так как BPDU с нашей машины боль­ше не отправ­ляет­ся.

Root-bridge с интерва­лом в две секун­ды отправ­ляет configuration BDPU, в котором ука­заны основные парамет­ры: нап­ример, при­ори­тет текуще­го ком­мутато­ра, его MAC, MAC интерфей­са, с которо­го BPDU был отправ­лен, све­дения о том, нуж­но ли запус­тить механизм FLUSH для очис­тки CAM таб­лиц. Так как в дан­ном сце­нарии мы пытались выдать себя за root bridge, мы отправ­ляем configuration BPDU с при­ори­тетом, рав­ным при­ори­тету текуще­го RB, но с мень­шим MAC.

Sending TCN BPDU зас­тавит root bridge запус­тить механизм очис­тки CAM-таб­лиц от MAC-адре­сов, тра­фик с которых не при­ходит более 15 секунд.

По умол­чанию вре­мя, в течение которо­го MAC-адрес хра­нит­ся в таб­лице, равен 300 секун­дам. При изме­нении сос­тояния пор­та (нап­ример, UP/DOWN) учас­тву­ющий в STP ком­мутатор дол­жен отпра­вить слу­жеб­ный фрейм TCN (topology change notification) в сто­рону root bridge для уве­дом­ления его о том, что про­изош­ло изме­нение в сети. Осталь­ные ком­мутато­ры не зна­ют, какие имен­но MAC-адре­са находи­лись за этим пор­том кон­крет­ного ком­мутато­ра, в резуль­тате чего запус­кает­ся про­цесс flush CAM-таб­лицы. Все адре­са, которые не были изу­чены в течение 15 секунд, будут уда­лены. Такого рода ата­ка поз­воля­ет нам уве­личить наг­рузку на сеть и CPU ком­мутато­ров. TCN отправ­ляет­ся еди­нож­ды.

При­мер сбро­са тай­мера CAM-таб­лицы при получе­нии TC BPDU

SW1#show spanning-tree VLAN0001 Spanning tree enabled protocol ieee Root ID Priority 8193 Address aabb.cc00.1000 This bridge is the root Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Bridge ID Priority 8193 (priority 8192 sys-id-ext 1) Address aabb.cc00.1000 Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Aging Time 300 sec

Пос­ле отправ­ки TCN BPDU:

SW1#show spanning-tree VLAN0001 Spanning tree enabled protocol ieee Root ID Priority 8193 Address aabb.cc00.1000 This bridge is the root Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Bridge ID Priority 8193 (priority 8192 sys-id-ext 1) Address aabb.cc00.1000 Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Aging Time 15 sec

Sending conf BPDUs и Sending TCN BPDU’s дела­ют все выше­опи­сан­ное, но в фор­мате DoS. То есть при отправ­ке configuration BPDU и topology change BPDU сеть начина­ет «штор­мить», CPU ком­мутато­ра силь­но заг­ружа­ется.

Счет­чик получен­ных BPDU

SW2#show spanning-tree interface ethernet 0/2 detail Port 3 (Ethernet0/2) of VLAN0001 is designated forwarding Port path cost 100, Port priority 128, Port Identifier 128.3. Designated root has priority 8193, address aabb.cc00.1000 Designated bridge has priority 32769, address aabb.cc00.2000 Designated port id is 128.3, designated path cost 100 Hello is pending, Topology change is set Timers: message age 0, forward delay 0, hold 0 Number of transitions to forwarding state: 1 Link type is shared by default BPDU: sent 2330, received 6650463

Claiming root, other role и claiming root role with MITM— ата­ки, ана­логич­ные нашему при­меру: изме­няя при­ори­тет или MAC, мы можем перес­тра­ивать текущее дерево STP.

Защита STP

В про­токо­ле STP заложе­ны механиз­мы, которые поз­воля­ют пре­сечь появ­ление новых устрой­ств в качес­тве root bridge, бло­киро­вать пор­ты, на которые при­шел BPDU, либо вклю­чать пол­ную филь­тра­цию BPDU.

В дан­ной статье мы рас­смат­рива­ем прин­ципы и коман­ды, при­меня­емые на обо­рудо­вании Cisco.

Root guard

При получе­нии луч­шего BPDU, чем нынеш­ний, получа­ющий этот BPDU интерфейс будет переве­ден в режим root-inconsistent.

SW2(config)#interface ethernet 0/2 SW2(config-if)#spanning-tree guard root

Сос­тояние пор­та при получе­нии BPDU:

*Aug 1 13:58:03.304: %SPANTREE-2-ROOTGUARD_CONFIG_CHANGE: Root guard enabled on port Ethernet0/2. SW2#show spanning-tree interface ethernet 0/2 Vlan Role Sts Cost Prio.Nbr Type ------------------- ---- --- --------- -------- -------------------------------- VLAN0001 Desg BKN*100 128.3 Shr *ROOT_Inc

Нес­ложно догадать­ся, что при исполь­зовании этой фун­кции ата­ка с помощью фрей­мвор­ка будет недос­тупна.

BPDU guard

Поз­воля­ет огра­ничи­вать домен L2. При получе­нии любого BPDU порт перево­дится в сос­тояние err disable BPDU guard error.

SW2(config)#interface ethernet 0/2 SW2(config-if)#spanning-tree bpduguard enable

Пос­ле получе­ния BDPU на пор­те с фун­кци­ей BPDU guard:

*Aug 1 15:12:50.120: %SPANTREE-2-BLOCK_BPDUGUARD: Received BPDU on port Et0/2 with BPDU Guard enabled. Disabling port. SW2# *Aug 1 15:12:50.120: %PM-4-ERR_DISABLE: bpduguard error detected on Et0/2, putting Et0/2 in err-disable state *Aug 1 15:12:51.120: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0/2, changed state to down *Aug 1 15:12:52.120: %LINK-3-UPDOWN: Interface Ethernet0/2, changed state to down SW2#show interfaces ethernet 0/2 Ethernet0/2 is down, line protocol is down (err-disabled)

BPDU filter

BPDU filter не отправ­ляет и не получа­ет BPDU на пор­те. Ины­ми сло­вами, протокол STP на этом интерфей­се вык­лючен.

SW2(config-if)#spanning-tree bpdufilter enable

Нес­ложно догадать­ся, что при исполь­зовании этих фун­кций ата­ки с применением фрей­мвор­ка будут недос­тупны.

Заключение

Вот так лег­ко, не при­бегая к слож­ным схе­мам, мож­но перех­ватывать тра­фик в сети. STP — дос­таточ­но прос­той про­токол с отсутс­тву­ющей по умолчанию функци­ей защиты. Мно­гие пре­неб­рега­ют уста­нов­кой защит­ных механиз­мов в L2-домене, что может при­вес­ти к доволь­но тяж­ким пос­ледс­тви­ям. Так как STP избавля­ет от петель и не зас­тавля­ет весь тра­фик идти обя­затель­но через RB, необ­ходимо точ­но опре­делить­ся с нап­равле­нием тра­фика и век­тором ата­ки.

Другие статьи