Категория > Новости > Атаки на STP. Взламываем протокол STP с помощью Yersinia - «Новости»
Атаки на STP. Взламываем протокол STP с помощью Yersinia - «Новости»26-08-2021, 00:02. Автор: Charlson |
Протокол STP был придуман аж в 1985 году, но активно используется до сих пор и насчитывает несколько модификаций. Без применения протокола STP не обходится практически ни одна сеть. Исключение составляют разве что современные сети ЦОД с различными протоколами TRILL или транспортными механизмами VXLAN, но это совсем другая история. STP имеет свои недостатки и особенности, и в этой статье мы посмотрим, как ими можно воспользоваться. Для начала кратко опишем техническую составляющую STP.Как устроен STPКлассические коммутаторы работают на канальном уровне (Data Link Layer) модели OSI. На уровне L2 коммутаторы работают с кадрами (frame) для передачи данных. Отправитель добавляет к оригинальным данным заголовки кадра, в которые включен MAC-адрес источника и MAC-адрес получателя. На основе этих адресов применяется логика передачи кадра. При получении кадра коммутатор добавляет в свою таблицу MAC-адресов адрес источника и интерфейс, на котором этот кадр получен. Таким образом коммутатор заполняет свою таблицу и, основываясь на ней, сразу же примет решение, на какой интерфейс отправить кадр. Если у коммутатора нет в таблице нужного адреса, кадр будет отправлен во все порты, кроме того, с которого кадр был получен, в надежде получить ответ от принимающего устройства. Такой тип трафика называется Unknown unicast flooding — разновидность бродкаста. Бродкаст — обычная ситуация для сетей, например когда отправляется ARP request. ARP request имеет адрес получателя в кадре Enterprise-сети строятся с использованием резервирования, оборудования, добавления избыточности на уровне линков и так далее. Так как в ethernet-кадрах нет поля TTL, которое используется в IP-пакетах для дополнительной защиты от петель, то каждый из них может передаваться по сети бесконечно, нагружая оборудование и переполняя CAM-таблицы. Широковещательный шторм Для предотвращения таких ситуаций применяется протокол STP, основная задача которого — избавить сеть от петель. infoСуществует несколько версий протокола STP. В данной статье мы рассматриваем 802.1D. STP работает по следующему принципу. В домене L2 выбирается корневой коммутатор — root bridge. Выбор основывается на приоритете (по умолчанию 32768). Чем меньше приоритет, тем лучше. У всех коммутаторов значение стоит по умолчанию, выбор происходит по связке приоритет + MAC. Коммутатор, у которого значение MAC будет меньше (более старый коммутатор), станет root bridge, что повлияет на производительность сети. Далее каждый non-root bridge коммутатор выбирает один порт, ведущий к root bridge, порты, используемые для передачи трафика, и порты, которые должны быть выключены, чтобы избежать появления петель коммутации. Результат работы протокола STP для защиты от петель По умолчанию в процессе выбора корневого коммутатора в протоколе STP нет механизмов защиты. Также в нем нет встроенных механизмов аутентификации, паролей или проверок источника. STP доверяет всем. При появлении в сети нового коммутатора, приоритет которого будет ниже приоритета текущего корневого коммутатора, выбирается новое корневое устройство. Манипулируя такими сценариями, мы можем изменить оптимальные пути трафика и даже попробовать их перехватить, заспамить сеть специальными сообщениями STP — TCN, что приведет к очищению таблиц коммутации каждого коммутатора и вызовет потери, снижение производительности сети и другие проблемы. Для применения этой атаки достаточно подключить к сети компьютер с Linux и фреймворком Yersinia, который позволит запустить STP на нашем хосте, выдав себя за коммутатор. Это позволит нам манипулировать нашим L2-сегментом. Применение атаки и изменения в топологии STP при включении компьютера с фреймворком Yersinia Этот фреймворк предоставляет нам большой выбор атак на STP: флуд TCN, перехват ролей коммутаторов. ПрактикаПерейдем к простому стенду для экспериментов. Топология стенда в виртуальной лаборатории В нашем примере используется часть стандартной топологии, чаще всего применяемой в корпоративном сегменте. 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 прошли через наш компьютер infoICMP тут используется только для наглядности, таким образом можно перехватить любой трафик, изменив структуру, построенную STP. Рассмотрим также другие типы атак на STP, которые позволяет выполнять Yersinia. Типы атак фреймворка Yersinia Sending conf BPDU — мы единожды отправим BPDU, который заставит коммутаторы в нашем L2-сегменте перестроить дерево и вернуться к исходной схеме, так как BPDU с нашей машины больше не отправляется. Перейти обратно к новости |