FHRP Nightmare. Ад и кошмар систем отказоустойчивости маршрутизации

от автора

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


ссылка на оригинал статьи https://habr.com/ru/post/685072/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *