В моей статье ты узнаешь, что может значить наличие протокола 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 может использоваться только в сетях 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
Вооружение
Для проведения атаки я буду использовать Loki. Это специальный пакетный инжектор, позволяющий проводить атаки на L2/L3 протоколы, также он умеет и в GLBP-инъекцию, когда в Scapy нет реализации протокола GLBP. Он выполнит инъекцию вредоносного GLBP-пакета со значением 255, что в свою очередь позволяет нам получить AVG-роль. В итоге, у нас появляется возможность перехватывать трафик.
Для проведения атаки нам понадобится следующая информация:
IP-адрес AVG-маршрутизатора (Active маршрутизатора)
Используемый виртуальный IP-адрес
Всю необходимую информацию ты сможешь извлечь путем анализа GLBP-трафика
Проведение атаки на домен 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.
Выбираем маршрутизатор GW1 под адресом 10.10.100.100 и начинаем инжект с помощью опции Get IP
Строение вредоносного GLBP-пакета. Приоритет максимальный, как и значение веса (GLBP Weight)
После выполнения инъекции необходимо создать вторичный 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
Превентивные меры
Аутентификация. Использование аутентификации не позволяет неавторизованным маршрутизаторам входить в процесс 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.
Протокол достаточно редко где используется в рамках продакшна, но тем не менее, меня это не остановило написать статью. Думаю, моя работа подарит пентестерам новый вектор атаки, а сетевые администраторы повысят уровень безопасности своих сетей.