Невозможно отучить людей изучать самые ненужные предметы.
Введение в CSS
Преимущества стилей
Добавления стилей
Типы носителей
Базовый синтаксис
Значения стилевых свойств
Селекторы тегов
Классы
CSS3
Надо знать обо всем понемножку, но все о немногом.
Идентификаторы
Контекстные селекторы
Соседние селекторы
Дочерние селекторы
Селекторы атрибутов
Универсальный селектор
Псевдоклассы
Псевдоэлементы
Кто умеет, тот делает. Кто не умеет, тот учит. Кто не умеет учить - становится деканом. (Т. Мартин)
Группирование
Наследование
Каскадирование
Валидация
Идентификаторы и классы
Написание эффективного кода
Вёрстка
Изображения
Текст
Цвет
Линии и рамки
Углы
Списки
Ссылки
Дизайны сайтов
Формы
Таблицы
CSS3
HTML5
Блог для вебмастеров
Новости мира Интернет
Сайтостроение
Ремонт и советы
Все новости
Справочник от А до Я
HTML, CSS, JavaScript
Афоризмы о учёбе
Статьи об афоризмах
Все Афоризмы
Помогли мы вам |
Классические коммутаторы работают на канальном уровне (Data Link Layer) модели OSI. На уровне L2 коммутаторы работают с кадрами (frame) для передачи данных. Отправитель добавляет к оригинальным данным заголовки кадра, в которые включен MAC-адрес источника и MAC-адрес получателя. На основе этих адресов применяется логика передачи кадра.
При получении кадра коммутатор добавляет в свою таблицу MAC-адресов адрес источника и интерфейс, на котором этот кадр получен. Таким образом коммутатор заполняет свою таблицу и, основываясь на ней, сразу же примет решение, на какой интерфейс отправить кадр. Если у коммутатора нет в таблице нужного адреса, кадр будет отправлен во все порты, кроме того, с которого кадр был получен, в надежде получить ответ от принимающего устройства. Такой тип трафика называется Unknown unicast flooding — разновидность бродкаста.
Бродкаст — обычная ситуация для сетей, например когда отправляется ARP request. ARP request имеет адрес получателя в кадре FF:
. Все коммутаторы будут рассылать данный кадр на все свои порты (на все порты в пределах VLAN).
Enterprise-сети строятся с использованием резервирования, оборудования, добавления избыточности на уровне линков и так далее. Так как в ethernet-кадрах нет поля TTL, которое используется в IP-пакетах для дополнительной защиты от петель, то каждый из них может передаваться по сети бесконечно, нагружая оборудование и переполняя CAM-таблицы.
Для предотвращения таких ситуаций применяется протокол STP, основная задача которого — избавить сеть от петель.
Существует несколько версий протокола STP. В данной статье мы рассматриваем 802.1D.
STP работает по следующему принципу. В домене L2 выбирается корневой коммутатор — root bridge. Выбор основывается на приоритете (по умолчанию 32768). Чем меньше приоритет, тем лучше. У всех коммутаторов значение стоит по умолчанию, выбор происходит по связке приоритет + MAC. Коммутатор, у которого значение MAC будет меньше (более старый коммутатор), станет root bridge, что повлияет на производительность сети.
Далее каждый non-root bridge коммутатор выбирает один порт, ведущий к root bridge, порты, используемые для передачи трафика, и порты, которые должны быть выключены, чтобы избежать появления петель коммутации.
По умолчанию в процессе выбора корневого коммутатора в протоколе STP нет механизмов защиты. Также в нем нет встроенных механизмов аутентификации, паролей или проверок источника. STP доверяет всем.
При появлении в сети нового коммутатора, приоритет которого будет ниже приоритета текущего корневого коммутатора, выбирается новое корневое устройство. Манипулируя такими сценариями, мы можем изменить оптимальные пути трафика и даже попробовать их перехватить, заспамить сеть специальными сообщениями STP — TCN, что приведет к очищению таблиц коммутации каждого коммутатора и вызовет потери, снижение производительности сети и другие проблемы.
Для применения этой атаки достаточно подключить к сети компьютер с Linux и фреймворком Yersinia, который позволит запустить STP на нашем хосте, выдав себя за коммутатор. Это позволит нам манипулировать нашим L2-сегментом.
Этот фреймворк предоставляет нам большой выбор атак на 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.
Эти сообщения означают, что STP на коммутаторах запущен и не заблокирован на подключенных к нам портах. Объединяем наши интерфейсы в bridge для того, чтобы трафик проходил через наше устройство, запускаем фреймворк Yersinia и видим, что нам доступен STP на обоих интерфейсах.
Запускаем атаку и выбираем тип атаки Claiming Root Role, означающий, что мы начнем анонсировать себя в качестве коммутатора с меньшим приоритетом, что заставит перестроиться дерево STP.
Как и ожидалось, мы стали корневым коммутатором для нашего сегмента сети и теперь сможем увидеть трафик, который ранее шел через SW1:
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#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 тут используется только для наглядности, таким образом можно перехватить любой трафик, изменив структуру, построенную STP.
Рассмотрим также другие типы атак на STP, которые позволяет выполнять Yersinia.
Sending conf BPDU — мы единожды отправим BPDU, который заставит коммутаторы в нашем L2-сегменте перестроить дерево и вернуться к исходной схеме, так как BPDU с нашей машины больше не отправляется.
|
|