На внутреннем пентесте банковского филиала я подключился к сетевой розетке в переговорной, запустил Yersinia - и через 30 секунд access-порт стал trunk. В Wireshark полезли пакеты серверного VLAN, управления коммутаторами и IP-телефонии. Причина банальна: DTP в режиме
dynamic auto на всех пользовательских портах. Админ не тронул дефолтную конфигурацию Cisco Catalyst - и вся VLAN-сегментация обнулилась одним кадром. Такая же история попадалась мне на нескольких проектах с legacy-инфраструктурой: филиалы, промплощадки, серверные по принципу «работает - не трогай». Обучение пентесту сетей на уровне L2 - навык, без которого ни OSCP, ни PNPT не сдать, а русскоязычные курсы эту тему почти не покрывают.VLAN и trunk-порты: зачем пентестеру разбираться в L2
VLAN делит один физический коммутатор на изолированные широковещательные домены. Хост в VLAN 10 не видит хосты в VLAN 20 - трафик между ними идёт только через маршрутизатор. На этом строится сегментация сети: серверы, пользователи, телефония и управление живут в разных VLAN.Порты коммутатора работают в двух режимах. Access-порт принадлежит одному VLAN - к нему подключают рабочие станции. Trunk-порт гонит трафик нескольких VLAN между коммутаторами, добавляя к кадрам тег 802.1Q с идентификатором VLAN. Кадры native VLAN передаются по trunk без тега - и эта деталь критична для атаки double tagging.
Если смотреть через призму MITRE ATT&CK, у VLAN hopping нет выделенного T-кода. Тактически он создаёт условия для Lateral Movement (T1210 - если в сегменте торчит уязвимый сервис, T1021 - если доступны удалённые службы) и Discovery (T1046, T1040), но формально ближе к этапу discovery/exploitation. После физического доступа к порту (initial access) пентестер эксплуатирует L2-протоколы, чтобы попасть в сегменты, куда прямой доступ закрыт. Перед попыткой VLAN hopping нужна разведка топологии (Network Topology, T1590.004) и обнаружение сервисов (Network Service Discovery, T1046) - понять, какие VLAN существуют и что в них крутится.
Две основные атаки - switch spoofing через DTP и 802.1Q double tagging. Обе бьют по конфигурационным ошибкам, а не по уязвимостям в коде коммутатора.
Switch spoofing через DTP - атака на trunk-порт коммутатора
[Применимо: внутренний пентест, legacy Cisco-инфраструктура]Dynamic Trunking Protocol - проприетарный протокол Cisco для автоматического согласования trunk-соединений. Если порт в режиме
dynamic auto или dynamic desirable, любое устройство, пославшее DTP-кадр с запросом trunk, получит полноценный trunk с доступом ко всем разрешённым VLAN. Одним кадром.Yersinia - основной инструмент для switch spoofing атаки. Предустановлен в Kali Linux, умеет бить по DTP, STP, CDP и другим L2-протоколам. Альтернатива - скрипты для DTP-spoofing с GitHub (например,
dtp-spoof.py; перед использованием проверьте актуальность репозитория): sudo python3 dtp-spoof.py -i eth0 --desirable.
Bash:
# Yersinia: активация trunking через GUI (проверено на Yersinia 0.8.2)
sudo yersinia -G
# GUI → Launch attack → DTP → enable trunking (путь в меню может отличаться в других версиях)
# После установки trunk - создание sub-интерфейсов для целевых VLAN
sudo modprobe 8021q
sudo ip link add link eth0 name eth0.10 type vlan id 10
sudo ip link set eth0.10 up
sudo dhclient -v eth0.10
Когда техника работает:
- Порт коммутатора в режиме
dynamic autoилиdynamic desirable(дефолт на многих Cisco Catalyst) - DTP включён (по умолчанию на большинстве Cisco)
- Порт явно настроен:
switchport mode access+switchport nonegotiate - Коммутатор не Cisco (Arista, Juniper, MikroTik - DTP не поддерживают)
- Включён 802.1X - DTP-кадры отбрасываются до аутентификации
- Port Security с ограничением MAC-адресов
- Современные корпоративные стандарты закрывают DTP на access-портах
sudo voiphopper -i eth0 -c 0, но набор обязательных флагов может отличаться) имитирует IP-телефон, обнаруживает Voice VLAN и создаёт sub-интерфейс автоматически. Этот приём работает даже при отключённом DTP, если access-порт настроен в режиме «access + voice». На нескольких проектах именно через Voice VLAN удавалось попасть в сегмент управления, когда DTP был закрыт.802.1Q double tagging - VLAN hopping с native VLAN
[Применимо: внутренний пентест, атакующий на native VLAN]Double tagging не требует DTP. Атакующий формирует Ethernet-кадр с двумя 802.1Q-заголовками: внешний тег совпадает с native VLAN, внутренний - с целевым. Первый коммутатор снимает внешний тег (native VLAN - легитимный) и пересылает кадр через trunk. Второй коммутатор видит оставшийся внутренний тег и доставляет кадр в целевой VLAN. Такая вот «матрёшка» из тегов.
Python:
from scapy.all import Ether, Dot1Q, IP, ICMP, sendp
frame = (Ether(dst="aa:bb:cc:dd:ee:ff") / # MAC-адрес жертвы (unicast)
Dot1Q(vlan=1) / # Внешний тег: native VLAN
Dot1Q(vlan=20) / # Внутренний тег: целевой VLAN
IP(dst="10.10.20.11") /
ICMP())
sendp(frame, iface="eth0")
А вот UDP-сервисы уязвимы - протокол не требует подтверждения. Теоретически однонаправленность можно обойти, если в целевом VLAN доступен UDP-сервис с уязвимостью, допускающей выполнение кода (например, десериализация). В таком гипотетическом сценарии жертва выполняет произвольный код и инициирует reverse shell на внешний сервер атакующего напрямую, минуя VLAN-ограничение - ответ идёт не через double tagging, а через обычную маршрутизацию. Это чисто академический пример: публичных демонстраций подобной связки с double tagging я не нашёл, и на практике такой сценарий маловероятен.
Когда техника работает:
- Атакующий подключён к native VLAN trunk-канала (обычно VLAN 1)
- Native VLAN совпадает с VLAN атакующего
- Между атакующим и целью - минимум два коммутатора с trunk
- Native VLAN изменён на неиспользуемый (best practice)
- На trunk включена опция
vlan dot1q tag native - Целевой сервис работает по TCP
- Коммутатор обрабатывает double tag на входном порте (некоторые современные модели)
Лаборатория для обучения пентесту сетей
Требования к окружению
| Параметр | Минимум | Рекомендуется |
|---|---|---|
| RAM | 8 ГБ (GNS3 + 2 коммутатора + Kali) | 16 ГБ (EVE-NG + полный стенд) |
| CPU | 4 ядра с VT-x/AMD-V | 8 ядер |
| Диск | 40 ГБ SSD | 100 ГБ SSD |
| ОС хоста | Ubuntu 22.04 / Windows 10+ | Ubuntu 22.04 |
| Гипервизор | GNS3 (бесплатно) | EVE-NG Community (бесплатно) |
Для образов Cisco IOS легальный источник - Cisco Modeling Labs (CML), подписка порядка $200/год для персонального использования. Бесплатные альтернативы для отработки VLAN: MikroTik RouterOS в режиме CHR, Arista vEOS. Для switch spoofing и double tagging хватит двух виртуальных коммутаторов и Kali Linux.
Что отрабатывать
Минимальный лабораторный сценарий для пентеста VLAN:- Настроить два коммутатора с trunk-каналом, три VLAN (управление, пользователи, серверы)
- Оставить один порт в
dynamic auto- запустить Yersinia, убедиться в переключении на trunk - Настроить native VLAN 1 на trunk - отправить double-tagged кадр через Scapy, проверить доставку в Wireshark на дальнем коммутаторе
- Применить защитные меры из чеклиста ниже - повторить атаки и убедиться в блокировке
Чеклист защиты при тестировании сегментации сети
📚 Часть контента скрыта. Этот материал доступен участникам сообщества с рангом One Level или выше
Получить доступ просто — достаточно зарегистрироваться и проявить активность на форуме
Получить доступ просто — достаточно зарегистрироваться и проявить активность на форуме
Каждый пункт закрывает конкретный вектор VLAN hopping. Такой чеклист в отчёте экономит администратору часы разбора абстрактных рекомендаций.
L2-атаки часто воспринимают как «слишком привязанные к Cisco» и неактуальные. На внутренних пентестах это опровергается стабильно. DTP в дефолте живёт на удалённых филиалах, промышленных площадках и в серверных, где коммутаторы ставили десять лет назад. Один сработавший DTP-spoofing даёт доступ к управленческому VLAN за минуту - быстрее большинства атак на веб-приложения.
Курсы по сетевой безопасности разделяют атаку и защиту на разные модули, но в реальности это один цикл: сломал - понял почему сломалось - закрыл - проверил что закрылось. Строчка
switchport nonegotiate превращается из конспекта в осознанное действие, когда видишь в Wireshark, как без неё DTP-кадр поднимает trunk. На экзамене OSCP теорию не спрашивают - дают сеть и время. Те, кто руками прогнал весь цикл «атака → Wireshark → защита → повторная проверка», решают сетевые задачи быстрее. Если хочешь системную подготовку по сетевым атакам с лабами и ментором - на WAPT эту цепочку проходят в первых модулях.