IPv6 — слепая зона твоей сети
Я долго откладывал эту тему, потому что думал: кому это надо, все сидят на четверке. А потом на одной из сетей случайно обнаружил IPv6, который никто даже не думал мониторить. Контроллер домена раздавал NTLM, файрвол смотрел только в IPv4, а IDS вообще не знал, что в сети есть шестой протокол.Почему вообще стоит смотреть в сторону IPv6
IPv6 включён по умолчанию. Windows, Linux — они из коробки поднимают IPv6 и начинают слушать. При этом большинство админов его не настраивают, не фильтруют и не логируют. Получается парадокс: протокол живёт, интерфейсы активны, а в политиках безопасности его как будто не существует.И тут важно понимать одну деталь. Windows отдаёт приоритет IPv6 над IPv4. Это стандартное поведение, прописанное в RFC 6724. Если машина получит адрес по обоим протоколам, она предпочтёт шестой.
Механизм работы и отличия от IPv4
Чтобы понять вектора атак, нужно разобраться в нескольких ключевых отличиях IPv6 от его предшественника.
Не удалось прогрузить медиа
Link-local адреса. Каждый интерфейс с включённым IPv6 автоматически генерирует себе адрес вида fe80::/64. DHCP как для четверки не нужно — машина просто берёт и назначает его сама. Эти адреса не маршрутизируются, но прекрасно работают в пределах сегмента. Фактически, любая машина в локалке уже доступна по IPv6, даже если он «не настроен».
SLAAC (Stateless Address Autoconfiguration). Механизм, при котором хост получает глобальный IPv6 адрес без всякого DHCP. Роутер отправляет Router Advertisement (RA) с префиксом сети, а хост на его основе сам формирует себе адрес. Звучит удобно, но проблема в том, что RA может отправить кто угодно. Никакой аутентификации тут нет.
NDP (Neighbor Discovery Protocol). Это замена ARP. Работает через ICMPv6 сообщения: Neighbor Solicitation и Neighbor Advertisement. Выполняет ту же задачу — связывает IP адрес с MAC адресом. И точно так же подвержен спуфингу, как и ARP.
Multicast-группы. В IPv6 нет широковещания в привычном смысле. Вместо него — мультикаст. Адрес ff02::1 — это все узлы в сегменте, ff02::2 — все роутеры. Один пинг на ff02::1 — и ты получаешь список всех живых хостов с IPv6. Без всякого сканирования портов.
Разведка: как найти то, чего «нет»
Самый легкий способ узнать есть ли в сети IPv6 — отправить echo request на адрес всех узлов:
ping6 ff02::1%eth0В ответ прилетят reply от каждой машины с активным IPv6. Причём те самые машины, которые не отвечали на ARP или были в другом VLAN для IPv4, тут могут спокойно отозваться.
Если отзываются идем дальше. Для удобной работы нужно установить THC-IPv6 — это набор утилит, заточенных именно под разведку и спуф IPv6. Ставится одной командой:
apt install thc-ipv6Несколько полезных инструментов оттуда:
atk6-alive6 eth0— активное обнаружение хостов в сегменте, аналог того же мультикаст пинга, но с более детальным выводомatk6-detect-new-ip6 eth0— пассивный мониторинг, сидит и ловит NDP, записывая все новые адресаatk6-passive_discovery6 eth0— тоже пассивный сбор, но анализирует весь проходящий трафик
nmap -6 -sV -sC fe80::1%eth0Но есть нюанс. Классическое сканирование по диапазону в IPv6 бессмысленно — адресное пространство слишком огромное. Поэтому сначала собираем адреса через мультикаст пинг, а потом точечно сканируем конкретные хосты.
DHCPv6 spoofing + DNS hijacking
В большинстве корпоративных сетей нет легитимного DHCPv6 сервера. IPv4 раздаётся через обычный DHCP, а про шестерку никто не подумал. Но машины по умолчанию отправляют DHCPv6 Solicit — они ищут сервер, который выдаст им IPv6 конфигурацию. Если его нет, запрос просто уходит в пустоту.
Для атаки нам нужно поднять свой сервер. Он отвечает на эти запросы и выдаёт клиентам одну важную настройку — адрес DNS сервера. Наш адрес. С этого момента все DNS запросы от жертвы идут к нам. Мы можем отвечать на них как угодно: перенаправлять на свои сервисы, подсовывать WPAD для перехвата трафика, или что самое интересное — провоцировать NTLM аутентификацию.
Не удалось прогрузить медиа
Для этой атаки есть инструмент — mitm6.
mitm6 -d target.localОн делает три вещи: отвечает на DHCPv6 запросы, выдаёт себя в качестве DNS сервера, и отвечает на DNS запросы адресами, которые ведут к нам. При этом IPv4 не затрагивается — для пользователя всё выглядит нормально.
Вторая половина атаки — ntlmrelayx. Пока mitm6 перехватывает DNS, ntlmrelayx принимает входящие NTLM аутентификации и релеит их на целевые сервисы:
ntlmrelayx.py -6 -wh fakewpad.target.local -t ldap://dc.target.local -l lootЧто может произойти в итоге: если у целевого пользователя достаточно привилегий, через LDAP relay можно создать новую учётку в домене или даже делегировать права. И это все просто потому, что IPv6 был включен и никем не контролировался.
Важно: релей на LDAP/LDAPS будет работать только если на контроллере домена не включены LDAP Signing и Channel Binding. Microsoft уже давно рекомендует их включение и в последних обновлениях Windows Server начинает принудительно их активировать. В захарденной среде этот вектор может быть закрыт. Также стоит учитывать значение ms-DS-MachineAccountQuota — по умолчанию любой доменный пользователь может создать до 10 машинных аккаунтов, что используется в RBCD атаке. Если квота выставлена в 0, создание аккаунта через релей не пройдёт.
Атака номер два: Router Advertisement spoofing
Этот вектор строится на механизме SLAAC, про который я упоминал выше.
Идея простая: мы рассылаем в сеть поддельные Router Advertisement, представляясь маршрутизатором. Клиенты принимают наши RA, конфигурируют себе IPv6 адрес с нашим префиксом, и что главное — начинают использовать нас как шлюз по умолчанию.
С этого момента весь IPv6 трафик жертвы идёт через нас.
В THC-IPv6 для этого есть утилита fake_router6:
fake_router6 eth0 2001:db8::/64Она начинает рассылать RA с указанным префиксом. Все машины в сегменте, у которых включён SLAAC (а он включён по умолчанию), получат новый IPv6 адрес и пропишут нас как маршрутизатор. Для более тонкой настройки также можно собрать пакеты через Scapy. Это даёт полный контроль над содержимым RA: можно указать время жизни маршрута, MTU, конкретные опции DNS — что угодно. Но для базовой демонстрации fake_router6 более чем достаточно.
Важный момент: эта атака заметнее, чем DHCPv6 spoofing. Если в сети есть легитимный IPv6 роутер, начнётся конфликт RA. Но если IPv6 маршрутизации нет (а её обычно нет), то наши пакеты будут единственными, и никто ничего не заметит.
Атака номер три: NDP spoofing
Это прямой аналог ARP спуфинга, только для IPv6. Вместо ARP Reply мы отправляем поддельные Neighbor Advertisement, привязывая чужой IPv6 адрес к нашему MAC.
Инструмент — parasite6 из того же THC-IPv6:
parasite6 eth0Он работает в пассивном режиме: слушает Neighbor Solicitation и отвечает на них, подставляя свой MAC. Результат тот же — перехват трафика на канальном уровне.
Не удалось прогрузить медиа
Разница с обычным спуфингом в том, что NDP работает через ICMPv6, а значит теоретически может быть защищён через SEND (Secure Neighbor Discovery). На практике SEND почти нигде не внедрён — слишком сложно и ресурсоемко. Так что NDP спуфинг работает практически везде, где есть IPv6.
Обход периметра: IPv6 туннели
Отдельная история это туннельные протоколы, которые заворачивают IPv6 в IPv4. Teredo, 6to4, ISATAP — эти механизмы изначально создавались для плавного перехода между протоколами, но в контексте безопасности они превращаются в обходные каналы.
К примеру, Teredo инкапсулирует IPv6 в UDP/IPv4 на порту 3544. Если файрвол не блокирует этот порт явно, машина внутри сети может установить IPv6 туннель наружу, полностью минуя корпоративный периметр. Windows раньше включала Teredo по умолчанию, и хотя сейчас его приоритет снижен, на старых системах он всё ещё может быть активен.
ISATAP ещё хуже — он создаёт туннель внутри сети, позволяя пакетам ходить поверх IPv4 инфраструктуры. Если атакующий подымает фейковый ISATAP (для этого достаточно ответить на DNS запрос isatap.domain.local), он получает возможность маршрутизировать IPv6 трафик через себя.
Практика: поднимаем стенд и атакуем
Не удалось прогрузить медиа
Для показательности я поднял лабу и прошел всю цепочку от разведки до перехвата DNS. Дальше покажу как это выглядит в реальности.
Домен поднят, пользователи созданы (jsmith, adminuser в группе Domain Admins). IPv6 на всех машинах включён по умолчанию — именно так, как это выглядит в 99% корпоративных сетей.
Важный момент: на Win10 и на сервере я специально не трогал настройки IPv6. Ничего не включал, ничего не отключал. Всё дефолтное.
Шаг 1: Разведка через IPv6
Первым делом проверяем, жив ли IPv6 в сети. С Kali отправляем пинг на все узлы:
ping6 ff02::1%eth1Не удалось прогрузить медиа
В ответ прилетают оба хоста — и контроллер домена, и рабочая станция. Обе машины отозвались по link-local адресам, хотя «IPv6 в сети не настроен». Уже на этом этапе мы знаем MAC адреса и IPv6 адреса всех живых хостов в сегменте — без единого ARP запроса и без сканирования портов.
Шаг 2: DHCPv6 spoofing — перехватываем DNS
Запускаем mitm6. Он начинает отвечать на DHCPv6 запросы от машин и назначает себя DNS сервером:
sudo mitm6 -d lab.local -i eth1В течение нескольких секунд видим:
Не удалось прогрузить медиа
IPv6 address fe80::2929:1 is now assigned to mac=08:00:27:be:b4:80 host=DC2.lab.local. ipv4=IPv6 address fe80::2929:2 is now assigned to mac=08:00:27:e0:a1:49 host=WS01.lab.local. ipv4=Обе машины получили IPv6 адреса от нас. С этого момента мы — их DNS сервер по IPv6. Windows предпочитает IPv6 над IPv4, поэтому запросы пойдут к нам, а не к контроллеру домена.
Дальше в логах видим DNS спуфинг в действии:
Sent spoofed reply for dc2.lab.local. to fe80::75a1:589:3b7c:3d4aSent spoofed reply for wpad.lab.local. to fe80::75a1:589:3b7c:3d4aМашина WS01 начала искать WPAD конфигурацию (Web Proxy Auto-Discovery) и мы отвечаем на этот запрос, перенаправляя её на себя.
Шаг 3: NTLM relay — ловим аутентификацию
Параллельно с mitm6 запускаем ntlmrelayx для перехвата и relay NTLM-аутентификации:
Не удалось прогрузить медиа
sudo impacket-ntlmrelayx -6 -t ldap://192.168.56.10 -wh fakewpad.lab.local -l loot --no-smb-serverКогда Win10 обращается за WPAD конфигурацией, ntlmrelayx принимает запрос:
[*] Servers started, waiting for connections[*] (HTTP): Client requested path: /wpad.datМашина пришла к нам за конфигурацией. В корпоративной сети с полноценным сетевым стеком на этом этапе Windows автоматически отправит NTLM аутентификацию, и ntlmrelayx перенаправит её на контроллер домена через LDAP. Результат — дамп информации о домене (пользователи, группы, политики) или создание нового пользователя с привилегиями Domain Admin.
При успешном relay в консоли ntlmrelayx появляется:
[*] Authenticating against ldap://192.168.56.10 as LAB\WS01$ SUCCEED[*] Dumping domain info...А в папке loot оказываются файлы с полным дампом домена: domain_users.html, domain_groups.html, domain_computers.html
Вся цепочка атаки выглядит так:
- IPv6 включён на всех машинах по умолчанию — ни один админ его не контролировал
- Мы назначили себя DNS сервером через DHCPv6
- Все DNS запросы жертв пошли через нас — полный контроль над именованием
- Windows начала искать WPAD через наш поддельный DNS — входная точка для NTLM relay
- Перехваченная аутентификация релеится на контроллер домена — дамп AD или создание нового админа
👍36
❤️8
🔥6
😮6
🤔9
💯4
LIMB