Для того, чтобы повысить уровень отказоустойчивости своей сети на уровне маршрутизации, сетевые администраторы в большинстве случаев используют протоколы семейства FHRP. Меня зовут @in9uz, и в рамках данной статьи ты узнаешь какой кошмар может возникнуть в сети, если к конфигурации системы горячего резервирования маршрутизаторов FHRP отнеслись халатно с точки зрения дизайна и безопасности.
It's coming through
It's coming through another motherfuckin' big tricks...
ᛝ
Intro (Disclaimer)
Данная статья предназначена для специалистов по безопасности, которые проводят пентест в рамках согласованного, легитимного контракта. Разрушение и взлом чужих компьютерных сетей могут преследоваться по закону. Будь осторожен и старайся не испытывать свою судьбу. Скиллы, которые ты освоишь из моей статьи - это только твоя область ответственности.
Для чего созданы FHRP-протоколы
FHRP (First Hop Redundancy Protocol) — это семейство сетевых протоколов, которые позволяют объединить группу физических маршрутизаторов в один логический, с целью повышения отказоустойчивости локальной сети. Далее, у образовавшегося логического маршрутизатора есть свой виртуальный IP-адрес. Этот виртуальный адрес будет назначаться, как адрес шлюза по умолчанию для конечных хостов. Самыми распространенными протоколами класса FHRP являются - HSRP, VRRP и GLBP, безопасность которых я и рассмотрю в рамках этой статьи.
Протокол HSRP (Hot Standby Router/Redundancy Protocol)
Является проприетарной разработкой инженеров Cisco. Здесь всё достаточно просто:
Берется какая-то группа физических маршрутизаторов, на них запускается специальный процесс HSRP под уникальным числовым идентификатором.
Исходя из значений приоритетов, выбирается ACTIVE-маршрутизатор, STANDBY-маршрутизаторы
Настраивается виртуальный IP-адрес, за который будет отвечать ACTIVE-маршрутизатор
Опционально: настраивается режим PREEMPT, аутентификация, etc
Сущности домена HSRP и терминология
HSRP Active Router — устройство, занимающееся обработкой, маршрутизацией легитимного трафика.
HSRP Standby Router — устройство, находящееся в режиме ожидания, которое ожидает отказа активного маршрутизатора. После падения основного Active-роутера, Standby-роутер возьмет на себя главенствующую роль и будет заниматься обязанностями Active-роутера;
HSRP Group — группа устройств одной HSRP-группы, обеспечивают работу и отказоустойчивость логического маршрутизатора;
HSRP MAC Address — виртуальный MAC-адрес логического маршрутизатора в домене HSRP;
HSRP Virtual IP Address — это специальный виртуальный IP-адрес в группе HSRP. Данный IP-адрес будет шлюзом по умолчанию для конечных хостов, используется на самом логическом маршрутизаторе.
HSRP Preempt mode - опция, которая позволяет павшему ACTIVE-устройству (после его воскрешения) вернуть себе роль ACTIVE, после того когда его заменил один из STANDBY-маршрутизаторов (ситуация, когда была выполнена подмена ACTIVE-устройства, вышедшего из строя). По умолчанию, Preempt-режим в HSRP отключен.
Скелет и механика работы HSRP
HSRP реализован поверх стека протоколов TCP/IP, поэтому для трансляции служебной информации используется протокол транспортного уровня UDP под номером порта 1985. HSRP-маршрутизаторы в рамках одной логической группы обмениваются специальными пакетами приветствия "hello" каждые 3 секунды, однако, если в течении 10 секунд HSRP-маршрутизатор в рамках одной группы не получил пакет приветствия от своего HSRP-соседа, то он признает его "погибшим"
У данного протокола есть две версии и они отличаются следующими характеристиками:
Количества групп (HSRPv1 предлагает до 255 групп, когда HSRPv2 может до 4096)
MAC-адреса (HSRPv1 -
00:00:0c:07:ac:xx
/ HSRPv2 -00:00:0C:9F:FX:XX
) (XX - это номер группы HSRP)IP-адреса групповой рассылки (HSRPv1 -
224.0.0.2
/ HSRPv2 -224.0.0.102
)
Протокол VRRP (Virtual Router Redundancy Protocol)
Данный протокол разработан на основе феноменов протокола HSRP, вследствие чего имеет большие неприятности с патентами. Поэтому его "свободным" и "открытым" назвать нельзя. Но по крайней мере поддерживается всеми вендорами сетевого оборудования, т.е. использование VRRP в твоей сети позволяет тебе быть независимым от какой-либо экосистемы вендора.
Скелет и механика работы VRRP
Де-факто, если ты знаешь как работает HSRP, ты знаешь как работает и VRRP. Между HSRP и VRRP очень много общего, но отличительные характеристики для тебя обозначу:
VRRP не реализован поверх стека протоколов TCP/IP. Данный протокол работает исключительно на сетевом уровне
Его IP-адрес мультикастовой рассылки -
224.0.0.18
Его идентификатор -
112
Вторая версия VRRPv2 отличается поддержкой IPv4 и поддержкой аутентификации. Тип аутентификации в зависимости от вендора. Например, Cisco предлагает защитить VRRP с использованием MD5-аутентификации, когда MikroTik (RouterOS) предлагает AH-аутентификации (AH - это протокол из оперы IPSec'a)
Третья версия - VRRPv3 отличается поддержкой IPv6, но лишается аутентификации.
VRRP-соседи в рамках одного домена отказоустойчивости обмениваются специальными пакетами приветствия, каждую секунду (своего рода hello time). Но также есть своего рода "dead timer" - если в течении 10 секунд пакета приветствия не будет - тот роутер от которого ожидался этот "hello" - выпадет из домена отказоустойчивости
Проблема возникновения псевдобалансировки
Проблема заключается в том, что у протоколов HSRP и VRRP нет механизма балансировки нагрузки. При их использовании возникает псевдобалансировка, когда по умолчанию фактически пашет только одно устройство, когда остальные отдыхают и работают в режиме ожидания. Однако, вы можете просто раскидать ваши VLAN по логическим процессам HSRP/VRRP на уровне коммутаторов распределения (L3 свитчи) или на маршрутизаторов, когда будут создаваться логические VLAN-интерфейсы (802.1Q Encapsultation Moment)
Ниже будут примеры настроек для HSRP и VRRP в отношении сетей VLAN 10 и VLAN 30. Dist-SW1 будет пахать на VLAN 10, а за VLAN 30 спать. Dist-SW2 пашет за VLAN 30, а за VLAN 10 спит.
HSRP for VLANs (Cisco IOS)
Dist-SW1(config)# interface vlan 10
Dist-SW1(config-if)# standby 10 ip 10.10.10.254
Dist-SW1(config-if)# standby 10 priority 150
Dist-SW1(config-if)# standby 10 preempt
Dist-SW1(config-if)# standby 10 authentication md5 key-string my_heartbeats
Dist-SW1(config-if)# end
Dist-SW1(config)# interface vlan 30
Dist-SW1(config-if)# standby 30 ip 10.10.30.254
Dist-SW1(config-if)# standby 30 priority 90
Dist-SW1(config-if)# standby 30 authentication md5 key-string my_heartbeats
Dist-SW1(config-if)# end
Dist-SW2(config)# interface vlan 10
Dist-SW2(config-if)# standby 10 ip 10.10.30.254
Dist-SW2(config-if)# standby 10 priority 90
Dist-SW2(config-if)# standby 10 authentication md5 key-string my_heartbeats
Dist-SW2(config-if)# end
Dist-SW2(config)# interface vlan 30
Dist-SW2(config-if)# standby 30 ip 10.10.10.254
Dist-SW2(config-if)# standby 30 priority 150
Dist-SW2(config-if)# standby 30 preempt
Dist-SW2(config-if)# standby 30 authentication md5 key-string my_heartbeats
Dist-SW2(config-if)# end
VRRP for VLANs (Cisco IOS)
Dist-SW1(config)# interface vlan 10
Dist-SW1(config-if)# vrrp 10 ip 10.10.10.254
Dist-SW1(config-if)# vrrp 10 priority 150
Dist-SW1(config-if)# vrrp 10 preempt
Dist-SW1(config-if)# vrrp 10 authentication md5 key-string my_heartbeats
Dist-SW1(config-if)# end
Dist-SW1(config)# interface vlan 30
Dist-SW1(config-if)# vrrp 30 ip 10.10.30.254
Dist-SW1(config-if)# vrrp 30 priority 90
Dist-SW1(config-if)# vrrp 30 authentication md5 key-string my_heartbeats
Dist-SW1(config-if)# end
Dist-SW2(config)# interface vlan 10
Dist-SW2(config-if)# vrrp 10 ip 10.10.30.254
Dist-SW2(config-if)# vrrp 10 priority 90
Dist-SW2(config-if)# vrrp 10 authentication md5 key-string my_heartbeats
Dist-SW2(config-if)# end
Dist-SW2(config)# interface vlan 30
Dist-SW2(config-if)# vrrp 30 ip 10.10.10.254
Dist-SW2(config-if)# vrrp 30 priority 150
Dist-SW2(config-if)# vrrp 30 preempt
Dist-SW2(config-if)# vrrp 30 authentication md5 key-string my_heartbeats
Dist-SW2(config-if)# end
Протокол GLBP (Gateway Load Balancing Protocol)
Разработан инженерами Cisco Systems. Как и HSRP, данный протокол реализован поверх стека протоколов TCP/IP, поэтому для трансляции служебной информации используется протокол транспортного уровня UDP под номером порта 3222. GLBP-маршрутизаторы в рамках одной логической группы обмениваются специальными пакетами приветствия "hello" каждые 3 секунды, однако, если в течении 10 секунд GLBP-маршрутизатор в рамках одной группы не получил пакет приветствия от своего GLBP-соседа, то он признает его "погибшим". Однако, значения таймеров могут конфигурироваться в зависимости от нужд админа.
Скелет и механика работы GLBP
GLBP обеспечивает распределение нагрузки на несколько маршрутизаторов (шлюзов) используя один виртуальный IP-адрес и несколько виртуальных MAC-адресов. Каждый хост сконфигурирован с одинаковым виртуальным IP-адресом и все маршрутизаторы в виртуальной группе участвуют в передаче пакетов.
Работает гораздо иначе в отношении протоколов HSRP и VRRP, так как использует механизмы настоящей балансировки нагрузки, обозначу ниже:
Host-Dependent. Тип балансировки нагрузки, использующийся в сети, где есть NAT. Host-Dependent гарантирует тот факт, что хосту вернется тот же MAC-адрес AVF-устройства, который использовался в раннем моменте времени, тем самым трансляции сконфигурированного NAT в отношении хоста разорваны не будут.
Round-Robin. В данном режиме AVG-устройство раздает MAC-адреса членам AVF попеременно. Именно этот механизм используется по умолчанию
Weight-based round-robin. Балансировка нагрузки на основе специальной метрики "Weight" (если переводить с английского - это вес)
Сущности домена GLBP и терминология
AVG (Active Virtual Gateway) - устройство, которое является по сути батей всего логического домена GLBP. "Батя" указывает остальным маршрутизаторам как выполнять обработку легитимного трафика. Раздает MAC-адреса, ответственнен за ответы за ARP-запросы. Кстати говоря, в рамках одной группы GLBP, AVG-членов может быть только один маршрутизатор.
AVF (Active Virtual Forwarder) - устройство в домене GLBP, которое занимается обработкой трафика. Их может быть несколько.
GLBP Group - логическая группа GLBP, в которую входят физические маршрутизаторы. У каждой логической группы GLBP есть свой уникальный числовой идентификатор
GLBP MAC - виртуальный MAC-адрес AVF-членов, раздаваемый существующим AVG-роутером.
GLBP Virtual IP Address - IP-адрес, за который ответственнен AVG-маршрутизатор
GLBP Preempt Mode - опция, позволяющая воскресшему AVG-устройству вернуть себе роль, после того, когда его подменил AVF, исходя из значений приоритетов. По умолчанию, в отношении AVG режим преемптинга отключен, когда для AVF-членов режим преемптинга включен (с задержкой до 30 секунд, но данное значение может конфигурироваться вручную)
GLBP Weight - метрика, указывающая степень нагрузки на интерфейс устройства. Чем эта метрика больше, тем выше нагрузка на интерфейс маршрутизатора.
Механизм селекции
В отношении FHRP-протоколов, значение приоритетов у маршрутизаторов по умолчанию равно 100. Если админ не настраивал приоритеты вручную, то в случае HSRP (ACTIVE), в случае VRRP (MASTER), в случае GLBP (AVG) станет тот маршрутизатор, у которого наибольший адрес. Безусловно, эти приортеты насстраиваются вручную, в зависимости от нужд сетевого администратора и какая ему инфраструктура отказоустойчивости нужна.
Механизм FHRP-таймингов
HSRP (Hello time: 3 sec / Hold time: 10 sec)
VRRP (Hello time: 1 sec / Hold time: 3 sec)
GLBP (Hello time: 3 sec / Hold time: 10 sec)
FHRP Hijacking
Домены FHRP уязвимы к Hijack-атаке, если лидирующие ACTIVE/MASTER/AVG не имеют максимального значения приоритета в отношении своей конфигурации. Если атакующий проведет инъекцию HSRP/VRRP/GLBP-пакета с максимальными значениями приоритетов, он сможет перехватить трафик внутри сети.
Stages Theory
Information Gathering. Этап разведки информации, выяснение значений приоритетов, поиск аутентификации, используемый виртуальный IP-адрес, MAC-адреса
Authentication Bypassing. Этап обхода аутентификации. Если она есть, разумеется. Сохраняем дамп трафика, эксфильтруем хеши и брутим ключ от домена.
Injection. Этап подготовки сетевого интерфейса, прописывание MAC-адреса, разрешение маршрутизации, генерация и отправка вредоносной FHRP-инъекции.
Routing Management. Создание вторичного IP-адреса, конфигурация нового маршрута по умолчанию, (NAT) MASQUERADE
Weaponize
Wireshark. С помощью данного анализатора сетевого трафика мы будем проводить процесс Information Gathering, перечисление заголовков пакетов
John & *2john-эксфильтраторы. John является брутфорсером хешей, *2john скрипты помогут воспроизвести эксфильтрацию хешей из дампа трафика
Loki. Является пакетным инжектором, фреймворком для проведения анализа защищенности различных L2/L3-протоколов, даже DRP, FHRP и т.д.
Векторы атаки
MITM. Атака типа "человек по середине" с целью перехвата легитимного трафика. Выполняется путем вредоносного FHRP-инжекта с максимальным значением приоритета.
Blackhole. Атака с целью завернуть трафик легитимной подсети в НИКУДА. Blackhole в переводе с английского - "черная дыра". Типа трафик в черную дыру улетает и всё, приехали...
Kicking router via UDP Flood. DoS-атака, механизм которой заключается в массовой рассылке UDP-датаграмм с целью вывести из строя конечный роутер. Работает в отношении HSRP & GLBP, ибо когда на роутерах запускаются процессы этих протоколов, они автоматически начинают прослушивать UDP-порты 1985 и 3222 (HSRP и GLBP соответственно), для VRRP, опять же, транспортного уровня нет.
Ограничения атаки
Зависимость от мощности CPU. После MITM-атаки, трафик всей сети или VLAN-сегмента (в зависимости от существующей инфраструктуры) побежит через твое устройство и оно должно быть готово к обработке, маршрутизации трафика всего легитимного сегмента. Иначе возникнет DoS, а заказчик такой сценарий не оценит и потекут горячие слёзы.
Производительность сетевого интерфейса. Сетевая карта, использующаяся в момент проведения атаки должна быть достаточно мощной, чтобы справиться с обработкой большого количества трафика.
Зависимость от возможной VLAN-сегментации сети. Если ты находишься, например, в VLAN 10 и сможешь провести MITM через инжект - ты будешь перехватывать трафик того VLAN, в котором сам и находишься. Трафик других VLAN'ов ты не достанешь.
FHRP Nightmare Topology
В рамках практической реализации атак, я собрал трехуровневую сеть, которую я обеспечил доступом в сеть интернет, OSPF и доменами отказоустойчивости HSRP/VRRP/GLBP. В рамках моей атаки, я буду воздействовать именно на уровень распределения сети (Distribution Layer) и перехватывать трафик сети VLAN 10.
Papercut - FTP-сервер под IP-адресом 172.16.60.100
Dustup - тачка с ОС Windows 10 под IP-адресом 172.16.40.1
Attacker (Mercy) - система атакующего с Kali Linux под IP-адресом 10.10.10.3
Boundless - клиентская машина с Linux Mint под IP-адресом 10.10.10.5
Левая часть свитчей уровня Distribution - свитчи Cisco vIOS: Dist-SW1 и Dist-SW2 под адресами 10.10.10.100
и 10.10.10.101
соответственно
Edge Router - пограничный маршрутизатор данной сети, обеспечивает всю сеть интернетом путем механизма NAT (PAT Mechanism Moment)
В качестве динамической маршрутизации выступает позвоночная (BACKBONE) зона OSPF и идентификатором 0
А процессы HSRP/VRRP/GLBP реализованы на виртуальных SVI-интерфейсах.
HSRP Hijacking
Stage 1: Information Gathering
Из дампа трафика в Wireshark мы видим HSRP-объявления от двух коммутаторов под адресами 10.10.10.100
и 10.10.10.101
Исходя из анализа заголовков пакетов HSRP имеем следующую картину (в рамках моей сети я изучил 2 HSRP-объявления):
ACTIVE-устройством является коммутатор под адресом
10.10.10.100
, его приоритет 150STANDBY-устройством является коммутатор под адресом
10.10.10.101
, его приоритет 90Используется криптографическая аутентификация (MD5)
Виртуальный IP-адрес
10.10.10.254
Виртуальный MAC:
00:00:0c:07:ac:01
(ACTIVE)Номер HSRP группы
1
Так как ACTIVE-коммутатор имеет приоритет 150
из 255
- вырисовывается вектор Hijack-атаки. Но также, есть используется аутентификация. Аутентификация в отношении FHRP не позволяет неавторизованным устройствам вступать в процесс обеспечения отказоустойчивости. Но так как мы являемся атакующим, нам необходимо выяснить что за ключ используется в качестве аутентификации к HSRP-домену.
Stage 2: Authentication Bypassing
Необходимо сохранить дамп трафика в формате .pcap, далее с помощью hsrp2john.py (в моем случае скрипт называется hsrpexfiltrate.py) выполняем эксфильтрацию хешей. Данный скрипт выплюнет MD5-хеши и в тот же момент преобразует их к формату Джона, что удобно. Потом эти хеши можно перебросить в отдельный файл и скормить его Джону, т.е. этот файл будет выступать в качестве входных данных для брута. Ну и с помощью ключа "--wordlist" указываем путь до словаря
in9uz@Mercy:~$ python2 hsrpexfiltrate.py hsrpwithauth.pcap
in9uz@Mercy:~$ cat >> hsrpv1md5hashes
in9uz@Mercy:~$ john hsrpv1md5hashes --wordlist=/usr/share/wordlists/rockyou.txt
В итоге нам удалось сбрутить ключ аутентификации к домену HSRP - endgame
Stage 3: Injection
В первую очередь, нам необходимо сменить MAC-адрес на виртуальный MAC-адрес ACTIVE-коммутатора. Это делается для того, чтобы в лишний раз не стриггернуть систему DAI (Dynamic ARP Inspection), ибо DAI вполне может удивиться тому, что в отношении 10.10.10.254
теперь присутствует другой MAC-адрес.
Далее, переключаем наш сетевой интерфейс в неразборчивый режим (promiscious mode) и разрешаем маршрутизацию трафика.
in9uz@Mercy:~$ sudo macchanger --mac=00:00:0C:07:AC:01 eth0
in9uz@Mercy:~$ sudo ifconfig eth0
in9uz@Mercy:~$ sudo sysctl -w net.ipv4.ip_forward=1
Теперь нужно запустить Loki, выбрать сетевой интерфейс
in9uz@Mercy:~$ sudo loki_gtk.py
После запуска инструмента, сам Loki обнаружит рассылаемые HSRP-объявления от маршрутизаторов. Вводим аутентификационный ключ MD5 (endgame), выбираем опцию "Do gratuitous ARP". Это специальная модификация ARP-кадра, являющейся по факту заглушкой, которое оповещает весь широковещательный домен о новой привязке IP-адреса с MAC-адресом. Далее, кликаем на два устройства (в состоянии Seen) и выбираем опцию Get IP.
После этого, Loki сгенерирует кастомную инъекцию с максимальным значением приоритета 255
, что в свою очередь позволит атакующему перехватить ACTIVE-роль и встать таким образом человеком по середине (Man-in-the-Middle moment)
Stage 4: Routing Management
После осуществеленного инжекта, нам необходимо заняться небольшим роутинг-менеджментом.
Сперва нужно удалить старый маршрут по умолчанию, идущий через 10.10.10.254
, ибо так как мы стали новым ACTIVE-маршрутизатором, мы являемся владельцем этого виртуального адреса (10.10.10.254), но при старом маршруте весь трафик замыкается на нашей ОС, что без дополнительных морок вызывает DoS в отношении легитимных хостов :))
Также нужно создать на нашем интерфейсе вторичный адрес со значением HSRP Virtual IP Address (10.10.10.254), опять же, после атаки мы являемся владельцем этого адреса.
in9uz@Mercy:~$ sudo ifconfig eth0:1 10.10.10.254 netmask 255.255.255.0
Пропишем новый маршрут по умолчанию через 10.10.10.100
(это бывший ACTIVE-роутер), но даже не смотря на то, что мы отжали у него ACTIVE-роль, он всё равно сможет выполнить маршрутизацию трафика куда нам нужно. Также можно попробовать прописать второй статический маршрут через 10.10.10.101
, с указанием специальной метрики, т.е. здесь со вторым маршрутом уже реализовывается плавающая статическая маршрутизация.
in9uz@Mercy:~$ sudo route del default
in9uz@Mercy:~$ sudo route add -net 0.0.0.0 netmask 0.0.0.0 gw 10.10.10.100
Также необходимо настроить NAT (MASQUERADING), чтобы видеть ещё и исходящий трафик, кроме входящего
in9uz@Mercy:~$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
В итоге нам удалось провести MITM-атаку. Чтобы наглядно показать импакт от атаки, подключусь к FTP-серверу Papercut
VRRP Hijacking
Stage 1: Information Gathering
В рамках VRRP, эти пакеты приветствия видны только от MASTER-устройства.
Исходя из анализа заголовков пакетов HSRP обозначим следующую информацию:
MASTER-устройством является маршрутизатор под адресом
10.10.10.100
, его приоритет 150Аутентификация отсутствует
Виртуальный IP-адрес
10.10.10.254
Виртуальный MAC:
00:00:5e:00:01:01
Номер VRRP группы
1
Stage 2: Injection
Меняем MAC-адрес на тот, который относится к MASTER, неразборчивый режим и разрешаем маршрутизацию
in9uz@Mercy:~$ sudo macchanger --mac 00:00:5e:00:01:01 eth0
in9uz@Mercy:~$ sudo ifconfig eth0 promisc
in9uz@Mercy:~$ sudo sysctl -w net.ipv4.ip_forward=1
Запускаем Loki
in9uz@Mercy:~$ sudo loki_gtk.py
Loki задетектил VRRP-объявление. Всё тоже самое, генерируем заглушку (Gratuitous ARP) и выполняем инжект
Loki выполнил инжект, можно изучить его тело (У инжекта приоритет 255
)
Stage 3: Routing Management
Всё тот же роутинг-менеджемент. Прописываем роуты, создаем вторичный адрес и настраиваем NAT (MASQUERADE)
in9uz@Mercy:~$ sudo ifconfig eth0:1 10.10.10.254 netmask 255.255.255.0
in9uz@Mercy:~$ sudo route del default
in9uz@Mercy:~$ sudo route add -net 0.0.0.0 netmask 0.0.0.0 gw 10.10.10.100
in9uz@Mercy:~$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Для наглядности снова подключусь к тому FTP-серверу (Papercut), но с другими кредами (death:betrayal)
GLBP Hijacking
Stage 1: Information Gathering
Видим GLBP-объявления от двух устройств. Исходя из анализа пакетов GLBP мы имеем следующую картину:
AVG-роутером является устройство под адресом
10.10.10.100
AVF-роутером является устройство под адресом
10.10.10.101
Аутентификация отсутствует
Номер группы GLBP
1
Виртуальный IP-адрес
10.10.10.254
Виртуальный MAC:
00:07.b4:00.01:01
Stage 2: Injection
Меняем MAC-адрес на тот, который был у AVG, promiscious mode и разрешение маршрутизации
in9uz@Mercy:~$ sudo macchanger --mac=00:07.b4:00.01:01 eth0
in9uz@Mercy:~$ sudo ifconfig eth0 promisc
in9uz@Mercy:~$ sudo sysctl -w net.ipv4.ip_forward=1
Запускаем Loki, выбираем интерфейс
Loki обнаружил объявления. Выполняем инжект x Gratuitous ARP
Loki сгенерировал GLBP-инъекцию со значениями приоритетов и веса (Priority 255
x Weight 255
)
Stage 3: Routing Management
Создаем вторичный адрес, прописываем роут и NAT
in9uz@Mercy:~$ sudo ifconfig eth0:1 10.10.10.254 netmask 255.255.255.0
in9uz@Mercy:~$ sudo route del default
in9uz@Mercy:~$ sudo route add -net 0.0.0.0 netmask 0.0.0.0 gw 10.10.10.100
in9uz@Mercy:~$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Мы стали "человеком по середине", запустим net-creds.py, данная тулза будет дергать чувствительные данные во время анализа трафика (т.е. незашифрованный HTTP/FTP-трафик, NTLM-хэши)
in9uz@Mercy:~/FHRPNightmare/net-creds$ sudo python2 net-creds.py -i eth0
Для наглядности синицирую чтение SMB-шары от имени пользователя distance
Можно сбрутить этот NTLMv2-SSP
, почему нет
Prevention
Использование ACL. ACL позволяет фильтровать трафик по различным параметрам, начиная от IP-адреса источника, заканчивая по TCP/UDP портам. (в зависимости от того, какой ACL используете - стандартный или расширенный?)
Для HSRP: ACL aganist 224.0.0.2
or 224.0.0.102
, UDP/1985
Для VRRP: ACL aganist 224.0.0.18
Для GLBP: ACL aganist 224.0.0.102
, UDP/3222
Использование аутентификации. Аутентификация не позволяет неавторизованным маршрутизаторам входить в домены отказоустойчивости. Если собираешься защищать домен с помощью аутентификации, используй стойкие ключи, чтобы их было не так просто сбрутить.
Вот Cisco IOS может похвастаться наличием Key-Chain аутентификации, где может быть использовано несколько ключей, а также можно будет настроить временные промежутки, в рамках которых ключи будут приниматься и отправляться. RouterOS вот вообще имеет дикую AH-аутентификацию для VRRP, там такая соль используется - хрен сбрутишь, даже словарный пароль. Кстати говоря, Cisco IOS использует MD5-аутентификацию для FHRP, а RouterOS - AH (протокол из оперы IPSec)
Максимальные значения приоритетов. Из соображений безопасности рекомендуется на Master- или Active-маршрутизаторе выставить максимальный приоритет. В таком случае, если злоумышленник отправит вредоносный пакет с приоритетом
255
, у него не выйдет стать «главным», поскольку таковой уже имеется. Кстати говоря, для VRRP удастся выкрутить значение только254
, ибо приоритет255
образовывается де-факто, после того, как MASTER обслуживает IP-адрес
Outro
Протоколы FHRP помогают организовать систему горячего резервирования шлюзов маршрутизации. Такие системы широко распространены в рамках рассмотренного мною кейса. Но теперь ты знаешь, что может произойти с сетью, если инженер не позаботился о дизайне и безопасности конфигурации самих FHRP-протоколов.
Кстати говоря, вот этот FHRP Hijacking может служить альтернативой ARP-спуфингу. В сетях AD открываются все возможности для Relay-атак и сбора информации, также можно реализовать фишинговые атаки и многое другое. Очень надеюсь, это данное моё исследование подарит пентестерам новые векторы атак для пентестеров, а сетевые администраторы обзаведутся новыми кейсами, чтобы повысить безопасность своей сети.
ᛝ
Комментарии (11)
BjLomax
30.08.2022 09:32Я для балансировки поднимаю две группы на двух роутерах, а со стороны L3 коммутатора или МСЭ делаю два одинаковых маршрута на оба VIP. В нормальной режиме трафик распределяется на роутеры, а при выключении одного из них съезжаются на оставшийся рабочий.
KOCTALEM
31.08.2022 14:24Спасибо, статья заставила призадуматься. Заглянул на железки, увидел priority 100, записал в todo.
Небольшая поправка -- чаще вместо "позвоночная" говорят "хребтовая".
ammo
Атака выглядит весьма сильно теоретической, т.к. FHRP в основном используются только в энтерпрайзе, т.е. внутри периметра, за который еще нужно как-то попасть. Т.е. звучит примерно как "ну допустим вы получили рута, при этом открываются следующие уязвимости...". Плюс во всяких параноидальных энвайрнментах (банки) используется port security, так что даже внутри периметра mac на своей машине поменять не получится.
Другой кейс: операторы связи, где атакующий - рядовой клиент. Ну здесь, как правило, либо один, либо сразу все 3 пункта, из-за которых тоже ничего не получится:
а) не используется FHRP в сторону клиентов. На BNG-коробках есть похожие на FHRP проприетарные механизмы, но control plane там бегает в одном выделенном VLAN, доступа в который нет у клиентов
б) используется уникальный VLAN на каждого абонента
в) вообще не подключают по IPoE (по крайней мере физиков), вместо этого используются PPPoE или L2TP
in9uz Автор
В основном FHRP используется, чтобы задействовать несколько маршрутизаторов в рамках одной корпоративной сети. И когда ты включаешься в свитч (даже в тот же уровень доступа) - ты уже видишь пакеты FHRP-протокола.
Атака действительно практичная и PoC в статье присутствует. Просто вероятность встретить FHRP в проде при таких обстоятельствах - относительно небольшая, тут я соглашусь.
И да, тебе нужно быть прямо в канальном сегменте сети, безусловно.
in9uz Автор
Кстати говоря, хочу попробовать провести атаку без смены мака, напишу, что выйдет из этого)
Там просто впрыск Gratuitous ARP должен всё уладить. Попробую) у этой атаки достаточно много нюансов, с этим всё нужно начать разбираться...
0HenrY0
Пентестера вполне могут пригласить внутрь периметра и даже отключить для него часть защиты. Это распространенная практика.
Karroplan
так в современной ИБ внутренний нарушитель считается более опасным чем внешний.
KOCTALEM
Если нарушитель пробрался внутрь виртуальной среды, например на вебсервер в датацентре, там с port security наблюдаются некоторые сложности. И порезвиться в рамках своего VLAN должно получиться.