Безопасность

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

Атака и защита STP

Тема сегодняшней статьи «Атака и защита протокола STP». Протокол STP име­ет свои плюсы и минусы. Далее мы рассмотрим, как можно воспользоваться особенностями STP для атаки на STP. В конце поговорим о защите STP от атак.

Не будем пересказывать интернет и разбираться в протоколе 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
Дамп тра­фика в сниффере Wireshark

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

Вы­бор типа аИн­форма­ция о получен­ных STP BPDUа­ки Claiming Root Role
Ин­форма­ция о получен­ных STP BPDU

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

Вы­бор типа ата­ки Claiming Root Role
Вы­бор типа ата­ки 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 идут через наш компь­ютер


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

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

Ти­пы атак фрей­мвор­ка 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, необ­ходимо точ­но опре­делить­ся с нап­равле­нием тра­фика и век­тором ата­ки.

Оригинал

Кнопка «Наверх»