Для того, чтобы повысить уровень отказоустойчивости своей сети на уровне маршрутизации, сетевые администраторы в большинстве случаев используют протоколы семейства 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. Здесь всё достаточно просто:

  1. Берется какая-то группа физических маршрутизаторов, на них запускается специальный процесс HSRP под уникальным числовым идентификатором.

  2. Исходя из значений приоритетов, выбирается ACTIVE-маршрутизатор, STANDBY-маршрутизаторы

  3. Настраивается виртуальный IP-адрес, за который будет отвечать ACTIVE-маршрутизатор

  4. Опционально: настраивается режим 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.

FHRP Nightmare Topology
FHRP Nightmare Topology

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-объявления от двух устройств
HSRP-объявления от двух устройств

Исходя из анализа заголовков пакетов HSRP имеем следующую картину (в рамках моей сети я изучил 2 HSRP-объявления):

  • ACTIVE-устройством является коммутатор под адресом 10.10.10.100, его приоритет 150

  • STANDBY-устройством является коммутатор под адресом 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-домена
Взломанный пароль от HSRP-домена

В итоге нам удалось сбрутить ключ аутентификации к домену 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]
Выбор интерфейса в Loki [HSRP]

После запуска инструмента, сам Loki обнаружит рассылаемые HSRP-объявления от маршрутизаторов. Вводим аутентификационный ключ MD5 (endgame), выбираем опцию "Do gratuitous ARP". Это специальная модификация ARP-кадра, являющейся по факту заглушкой, которое оповещает весь широковещательный домен о новой привязке IP-адреса с MAC-адресом. Далее, кликаем на два устройства (в состоянии Seen) и выбираем опцию Get IP.

Начало атаки [HSRP]
Начало атаки [HSRP]

После этого, Loki сгенерирует кастомную инъекцию с максимальным значением приоритета 255, что в свою очередь позволит атакующему перехватить ACTIVE-роль и встать таким образом человеком по середине (Man-in-the-Middle moment)

Строение HSRP-инъекции
Строение HSRP-инъекции

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

Подключение к FTP-серверу [HSRP]
Подключение к FTP-серверу [HSRP]
Перехваченные креды prayer:sleeper
Перехваченные креды prayer:sleeper

VRRP Hijacking

Stage 1: Information Gathering

В рамках VRRP, эти пакеты приветствия видны только от MASTER-устройства.

Дамп VRRP-трафика
Дамп VRRP-трафика

Исходя из анализа заголовков пакетов 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
Выбор интерфейса [VRRP]
Выбор интерфейса [VRRP]

Loki задетектил VRRP-объявление. Всё тоже самое, генерируем заглушку (Gratuitous ARP) и выполняем инжект

Начало атаки на VRRP-домен
Начало атаки на VRRP-домен

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)

Перехваченные FTP-креды [VRRP]
Перехваченные FTP-креды [VRRP]

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

Информация о AVG-свитче
Информация о AVG-свитче
Информация о AVF-свитче
Информация о AVF-свитче

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, выбираем интерфейс

Выбор интерфейса [GLBP]
Выбор интерфейса [GLBP]

Loki обнаружил объявления. Выполняем инжект x Gratuitous ARP

Начало атаки на GLBP-домен
Начало атаки на GLBP-домен

Loki сгенерировал GLBP-инъекцию со значениями приоритетов и веса (Priority 255 x Weight 255)

GLBP Priority 255 x GLBP Weight 255
GLBP Priority 255 x GLBP 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

Чтение SMB-шары
Чтение SMB-шары
Перехваченный NTLMv2-SSP пользователя distance
Перехваченный NTLMv2-SSP пользователя distance

Можно сбрутить этот NTLMv2-SSP, почему нет

Взломанный пароль пользователя distance
Взломанный пароль пользователя distance

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)


  1. ammo
    28.08.2022 20:31
    +2

    Атака выглядит весьма сильно теоретической, т.к. FHRP в основном используются только в энтерпрайзе, т.е. внутри периметра, за который еще нужно как-то попасть. Т.е. звучит примерно как "ну допустим вы получили рута, при этом открываются следующие уязвимости...". Плюс во всяких параноидальных энвайрнментах (банки) используется port security, так что даже внутри периметра mac на своей машине поменять не получится.

    Другой кейс: операторы связи, где атакующий - рядовой клиент. Ну здесь, как правило, либо один, либо сразу все 3 пункта, из-за которых тоже ничего не получится:

    а) не используется FHRP в сторону клиентов. На BNG-коробках есть похожие на FHRP проприетарные механизмы, но control plane там бегает в одном выделенном VLAN, доступа в который нет у клиентов

    б) используется уникальный VLAN на каждого абонента

    в) вообще не подключают по IPoE (по крайней мере физиков), вместо этого используются PPPoE или L2TP


    1. in9uz Автор
      28.08.2022 22:10

      В основном FHRP используется, чтобы задействовать несколько маршрутизаторов в рамках одной корпоративной сети. И когда ты включаешься в свитч (даже в тот же уровень доступа) - ты уже видишь пакеты FHRP-протокола.

      Атака действительно практичная и PoC в статье присутствует. Просто вероятность встретить FHRP в проде при таких обстоятельствах - относительно небольшая, тут я соглашусь.

      И да, тебе нужно быть прямо в канальном сегменте сети, безусловно.


    1. in9uz Автор
      28.08.2022 22:15
      +1

      Кстати говоря, хочу попробовать провести атаку без смены мака, напишу, что выйдет из этого)

      Там просто впрыск Gratuitous ARP должен всё уладить. Попробую) у этой атаки достаточно много нюансов, с этим всё нужно начать разбираться...


    1. 0HenrY0
      29.08.2022 01:08
      +2

      Пентестера вполне могут пригласить внутрь периметра и даже отключить для него часть защиты. Это распространенная практика.


    1. Karroplan
      29.08.2022 22:08
      +1

      так в современной ИБ внутренний нарушитель считается более опасным чем внешний.


    1. KOCTALEM
      31.08.2022 14:32

      во всяких параноидальных энвайрнментах (банки) используется port security, так что даже внутри периметра mac на своей машине поменять не получится.

      Если нарушитель пробрался внутрь виртуальной среды, например на вебсервер в датацентре, там с port security наблюдаются некоторые сложности. И порезвиться в рамках своего VLAN должно получиться.


  1. olegtsss
    29.08.2022 18:44
    +1

    Отличный материал, спасибо, интересно было читать. Ковырять самому безопасность протоколов — это творчество. И гораздо интереснее, чем перевод иностранных статей, особенно не адаптированный для чтения другими людьми )


    1. in9uz Автор
      29.08.2022 23:10

      Благодарю:3


  1. BjLomax
    30.08.2022 09:32

    Я для балансировки поднимаю две группы на двух роутерах, а со стороны L3 коммутатора или МСЭ делаю два одинаковых маршрута на оба VIP. В нормальной режиме трафик распределяется на роутеры, а при выключении одного из них съезжаются на оставшийся рабочий.


    1. in9uz Автор
      30.08.2022 15:15

      Плавающие статические маршруты?


  1. KOCTALEM
    31.08.2022 14:24

    Спасибо, статья заставила призадуматься. Заглянул на железки, увидел priority 100, записал в todo.

    Небольшая поправка -- чаще вместо "позвоночная" говорят "хребтовая".