Петухов Олег, юрист в области международного права и защиты персональных данных, специалист в области информационной безопасности, защиты информации и персональных данных.
Телеграм-канал: https://t.me/zashchitainformacii Группа в Телеграм: https://t.me/zashchitainformacii1 Сайт: https://legascom.ru Электронная почта: online@legascom.ru #защитаинформации #информационнаябезопасность
Протокол STP (Spanning Tree Protocol) предназначен для предотвращения зацикливания пакетов в сети при наличии дублирующих маршрутов. Работает это следующим образом. Сначала производится обнаружение коммутаторов, которые связаны между собой. Затем выбирается Root Bridge, главный, корневой коммутатор. Далее по специальному алгоритму будут заблокированы порты коммутатора, которые создают петли в получившейся топологии.
Для построения древовидной структуры сети без петель в сети должен быть определен корневой коммутатор (root switch), от которого и строится это дерево. В качестве корневого коммутатора выбирается коммутатор с наименьшим значением идентификатора. Идентификатор коммутатора – это число длиной восемь байт, шесть младших байт которого составляет МАС-адрес его блока управления, а два старших байта конфигурируются вручную. Это позволяет администратору сети влиять на процесс выбора корневого коммутатора. Если администратор не вмешается в этот процесс, корневойкоммутатор будет выбран случайным образом - им станет устройство с минимальным MAC-адресом блока управления. Такой выбор может оказаться далеко не рациональным. Поэтому следует выбрать корневой коммутатор, исходя из имеющейся топологии сети, и назначить ему вручную наименьший идентификатор. При автоматическом выборе корневым становится коммутатор с меньшим значением МАС-адреса его блока управления. Далее, для каждого коммутатора определяется корневой порт (root port) - это порт, который имеет по сети кратчайшее расстояние до корневого коммутатора. Для каждого логического сегмента сети выбирается так называемый назначенный мост (designated bridge), один из портов которого будет принимать пакеты от сегмента и передавать их в направлении корневого моста через корневой порт данного моста.
Что может предпринять атакующий? Он может так же, как и в предыдущем примере, притвориться коммутатором, направить в сторону атакуемого коммутатора BPDU-пакет, в котором он может подделать приоритет, МАС-адрес, для того чтобы самому стать корневым коммутатором и с его помощью перехватить сетевой трафик. Корневым коммутатором становится тот, у которого самый высокий приоритет. В случае если приоритет у нескольких коммутаторов одинаковый, то для выбора корневого коммутатора используется МАС-адрес, у кого он меньше, тот и становится корневым.
Проведем небольшую практическую работу по обнаружению МАС-адресов других машин и подмене МАС на своей. Для этого нам снова потребуется сниффер Wireshark. Необходимо, как и в примере с концентраторами, включить прослушивание сетевого интерфейса. Только теперь нас будет интересовать не HTTP-трафик, а STP. Нам необходимо выявить МАС-адрес корневого коммутатора. Для того чтобы получить эту информацию, необходимо знать топологию сети. Получить значение МАС-адреса корневого порта можно с помощью Wireshark.
Для того чтобы получить информацию о МАС-адресах, необходимо просмотреть значение полей Source и Destination в заголовке перехваченного фрейма. Нас интересует источник, для поддельного адреса нашего коммутатора указываем меньший адрес, например уменьшенный на единицу, как в примере ниже.
root@kali:~# macchanger –mac=xx:xx:xx:xx:xx:xx-1 eth0
Current MAC: 00:16:ec:f1:45:e8 (unknown)
Faked MAC: xx:xx:xx:xx:xx:xx (unknown)
Перестартуем сетевой интерфейс.
root@kali:~# ifdown eth0
root@kali:~# ifup eth0
Internet Systems Consortium DHCP Client V3.1.1
Copyright 2004-2008 Internet Systems Consortium.
All rights reserved.
For info, please visit http://www.isc.org/sw/dhcp/ Listening on LPF/eth0/04:2f:11:65:fc:0a
Sending on LPF/eth0/04:2f:11:65:fc:0a
Sending on Socket/fallback
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 3
DHCPOFFER of 192.168.1.8 from 192.168.1.101
DHCPREQUEST of 192.168.1.8 on eth0 to 255.255.255.255 port 67
DHCPACK of 192.168.1.8 from 192.168.1.101
bound to 192.168.1.8 -- renewal in 42928 seconds.
if-up.d/mountnfs[eth0]: waiting for interface eth1 before doing NFS mounts
if-up.d/mountnfs[eth0]: waiting for interface eth2 before doing NFS mounts
if-up.d/mountnfs[eth0]: waiting for interface ath0 before doing NFS mounts
if-up.d/mountnfs[eth0]: waiting for interface wlan0 before doing NFS mounts
По умолчанию приоритеты должны быть одинаковые, соответственно, протокол STP выберет для маршрута порты с наименьшим МАС.
Теперь злоумышленнику необходимо отправить BPDU-пакет, в котором указать свой идентификатор коммутатора. Другие коммутаторы в ответ также отправляют свои идентификаторы, и если идентификатор, отправленный злоумышленником, будет содержать наименьший МАС, то при равных приоритетах он будет выбран корневым.
Сформировать поддельный BPDU-пакет можно следующим образом.
В окне конструктора пакетов PackEth необходимо указать МАС-адреса источника пакетов и получателя. Адрес источника необходимо указывать поддельный.
В поле User defi ned network payload указываются следующие значения:
идентификатор версии протокола STA - 2 байта. Коммутаторы должны поддерживать одну и ту же версию протокола STA, иначе может установиться активная конфигурация с петлями;
тип BPDU - 1 байт. Существуют два типа BPDU – конфигурационный BPDU, то есть заявка на возможность стать корневым коммутатором, на основании которой происходит определение активной конфигурации, и BPDU уведомления о реконфигурации, которое посылается коммутатором, обнаружившим событие, требующее проведения реконфигурации -
отказ линии связи, отказ порта, изменение приоритетов коммутатора или портов;
флаги - 1 байт. Один бит содержит флаг изменения конфигурации, второй - флаг подтверждения изменения конфигурации;
идентификатор корневого коммутатора - 8 байт;
расстояние до корня - 2 байта;
идентификатор коммутатора - 8 байт;
идентификатор порта - 2 байта;
время жизни сообщения - 2 байта. Измеряется в единицах по 0,5 с, служит для выявления устаревших сообщений. Когда пакет BPDU проходит через коммутатор, тот добавляет ко времени жизни пакета время его задержки данным коммутатором;
максимальное время жизни сообщения - 2 байта. Если пакет BPDU имеет время жизни, превышающее максимальное, то он игнорируется коммутаторами;
интервал hello, через который посылаются пакеты BPDU;
задержка смены состояний - 2 байта. Задержка определяет минимальное время перехода портов коммутатора в активное состояние. Такая задержка необходима, чтобы исключить возможность временного возникновения петель при неодновременной смене состояний портов во время реконфигурации. У пакета BPDU уведомления о реконфигурации отсутствуют все поля, кроме двух первых. Отправить составленный пакет можно, нажав Send.
Если на предыдущих шагах мы правильно вычислили МАС других участников STP, то по идее алгоритм этого протокола должен пересчитать маршруты так, чтобы весь трафик был отправлен на наш поддельный порт. Для того чтобы не оказаться обнаруженным, хакеру необходимо будет обеспечить доставку трафика через свою машину далее к месту назначения. Так как в противном случае весь трафик будет уходить в никуда, и факт подделки МАС будет быстро обнаружен. Однако эту задачу в рамках данной данного поста мы решать не будем.
Какие меры необходимо предпринять, чтобы избавиться от этой уязвимости?
Прежде всего необходимо запретить хождение BPDU-пакетов с портов, на которых нет никаких коммутаторов. И в случае если такой пакет все же пришел, переводить этот порт в режим shutdown. Затем необходимо обезопасить наш корневой коммутатор, чтобы ни при каких условиях не мог быть выбран другой корневой коммутатор, в том числе и атакующий. Атакующему не составит большого труда поставить приоритет выше, чем у настоящего главного коммутатора, и МАС-адрес поменьше, чтобы гарантировать, что атакующий представляется root.
Для решения данной задачи нам необходимо перевести все порты коммутатора в специальный режим STP, который называется portfast. После этого клиент, подключенный к такому порту, не будет принимать участия в разрешении маршрутов по алгоритму STP (это может занять достаточно много времени, до 40 секунд на построение топологии сети), и лишь после этого будут начинать передавать пользовательские данные через порт. По умолчанию режим portfast на коммутаторах Cisco отключен, так что нам придется его сконфигурировать вручную. Также настроим отключение порта в случае получения BPDU-пакета.
Switch# conf t
Switch (config)# int range f0/1-24
Switch (config-if-range)# spanning-tree portfast
Switch(config)# spanning-tree portfast bpguard default
Switch(config)# int f0/1
Switch (config-if)# spanning-tree guard root
Содержимое первых двух строк нам знакомо по предыдущим примерам. В третьей мы включаем режим portfast. Далее указываем, что на этих портах хождение BPDU-пакетов противопоказано. И последние две команды выполняются для защиты root bridge. То есть мы предполагаем, что другой коммутатор подключен к нашему по порту f0/1 и соответственно необходимо его использовать в качестве root.
Теперь даже если злоумышленник направит в сторону коммутатора BPDU-пакет с максимальным приоритетом и меньшим МАС-адресом, то он все равно не сможет стать корневым коммутатором и перенаправить весь трафик через себя.

Присоединяйтесь — мы покажем вам много интересного
Присоединяйтесь к ОК, чтобы подписаться на группу и комментировать публикации.
Нет комментариев