Содержание статьи
warning
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
Как работает OSPF
OSPF (open shortest path first) — это протокол внутридоменной динамической маршрутизации, основанный на математическом алгоритме Эдсгера Дейкстры. Это link-state-протокол, и во время передачи данных по OSPF анализируется состояние канала. На основе состояния канала OSPF структурирует таблицы маршрутизации, поддерживает их актуальность и выполняет автоматический обмен маршрутной информацией со своими соседями. OSPF — открытый стандарт, который поддерживают все вендоры сетевого оборудования. И это самый распространенный протокол внутридоменной маршрутизации в рамках продакшена.
В этой статье я буду говорить о второй версии OSPF. Характеристики ее таковы:
- OSPF для трансляции служебной информации использует IP-адрес групповой рассылки
224.
;0. 0. 5 - поддерживает IPv4;
- работает исключительно на сетевом уровне;
- в качестве объявлений состояния каналов использует сообщения LSA (link-state advertisement);
- поддерживает VLSM;
- имеет высокий коэффициент уровня сходимости по сравнению с дистанционно‑векторными протоколами;
- строит дерево кратчайших путей (так как основан на алгоритме Дейкстры);
- использует формулу
reference
для оценки стоимости маршрута. То есть константа полосы пропускания делится на фактическую скорость полосы пропускания. Однако значениеbandwidth / link bandwidth reference
может быть изменено.bandwdith
Что может помешать атакующему?
Протокол OSPF атаковать куда сложнее, чем его родственников — дистанционно‑векторные протоколы маршрутизации (например, RIP или EIGRP). Обозначу основные проблемы:
- AS OSPF может быть разбита на зоны. Инженеры могут спроектировать домен маршрутизации OSPF с несколькими зонами, чтобы уменьшить нагрузку на вычислительные ресурсы маршрутизаторов. Нужно учитывать это в домене маршрутизации OSPF, как и возможность прохождения пакетов между этими зонами. Например, если ты собираешься выполнять инъекции маршрутов.
- Наличие пакетов приветствия Hello. Подключиться к домену маршрутизации OSPF будет возможно, если сетевой администратор не позаботился о конфигурации пассивных интерфейсов, сама конфигурация позволяет отключать рассылку пакетов приветствия на уровне самих анонсируемых сетей. Если в сетевом анализаторе не встретишь пакеты OSPF — либо OSPF нет, либо настроены пассивные интерфейсы. А это делает невозможным проведение атаки на домен динамической маршрутизации.
Вмешательство в процесс маршрутизации
Чтобы атаковать домен динамической маршрутизации, нужно подключиться непосредственно к самому процессу маршрутизации. Это можно сделать через настоящий роутер (имею в виду железку) либо воспользоваться FRR.
info
FRRouting — это специальный виртуальный маршрутизатор, который может интегрироваться с твоей ОС и работать как настоящий роутер. Очень крутая штука, поскольку поддерживает множество интересных протоколов: BGP, IS-IS, OSPF, EIGRP, VRRP, BFD и так далее. В этой статье я воспользуюсь именно FRR.
В первую очередь нужно активировать демоны FRR. За каждый протокол будет отвечать отдельный демон. Нам понадобятся демоны ospfd
и staticd
.
root@kali:~# nano /etc/frr/daemons
ospfd=yesstaticd=yes
Перед запуском демона переключаем сетевой интерфейс в promiscuous mode, разрешаем маршрутизацию и активируем работу NAT Helper (NFCONNTRACK).
in9uz@kali:~$ sudo ip link set eth0 promisc on
in9uz@kali:~$ sudo sysctl -w net.ipv4.ip_forward=1
in9uz@kali:~$ sudo modprobe nf_conntrack
root@kali:~# echo "1" > /proc/sys/net/netfilter/nf_conntrack_helper
После этого включаем демон FRR и проверяем его состояние.
in9uz@kali:~$ sudo systemctl start frr
in9uz@kali:~$ sudo systemctl status frr
С помощью команды vtysh
попадаем на панель управления маршрутизатором:
in9uz@kali:~$ sudo vtysh
kali# show ver
Структура лабораторной сети
В качестве лаборатории мы с тобой выстроим трехуровневую сеть. Для SMB-шары я выделил отдельный сегмент (WAREHOUSE), но на самом деле это просто коммутатор уровня распределения. Также есть несколько виртуальных сетей, они находятся на коммутаторах уровня доступа, а на коммутаторах уровня распределения происходит уже маршрутизация между самими VLAN.
Отказоустойчивость сети обеспечивает HSRPv2. Начиная с уровня распределения, я настроил динамическую маршрутизацию OSPF, все хранится в нулевой BACKBONE-зоне.
-
10.
— Fake (VLAN 20) (Windows 10 LTSC);10. 20. 1 -
10.
— Boundless (VLAN 30) (Windows 10 LTSC);10. 30. 1 -
10.
— Attacker (VLAN 50) (Kali Linux);10. 50. 2 -
10.
— Dist-SW1 (HSRPv2 Active) (Cisco vIOS L2 Image);10. 50. 100 -
10.
— Dist-SW2 (HSRPv2 Standby) (Cisco vIOS L2 Image);10. 50. 101 -
192.
— SMB Share (Windows Server 2019 Standard).168. 100. 1
Анализ трафика
Первым делом нам нужно изучить трафик OSPF, узнать об ID зоны, наличии аутентификации, router-id
и так далее. Из пакета OSPF Hello, полученного от Dist-SW1 (10.
), можно заметить, что используется нулевая зона 0.
.
Также используется MD5-аутентификация. Она не позволяет неаутентифицированным роутерам входить в процесс маршрутизации. Не зная ключ, подключиться к сети OSPF не выйдет.
Обход аутентификации (Authentication Bypassing)
На скриншоте некоторые характеристики ключа. Идентификатор ключа (ID) — единица.
Для сниффинга криптографического MD5-хеша воспользуемся утилитой Ettercap. Перед этим переключаемся в promisc.
in9uz@kali:~$ sudo ip link set eth0 promisc on
in9uz@kali:~$ sudo ettercap -G
Копируем эти хеши и брутим. Кстати говоря, очень удобно, что хеши сразу представлены в формате John the Ripper.
in9uz@kali:~$ cat >> ospf-hashes
in9uz@kali:~$ john ospf-hashes --wordlist=ospfwordlist
Пароль удалось сбрутить, это flatl1ne
. С этим ключом мы можем подключиться к сети OSPF.
Evil Twin и перехват NetNTLM
Начало атаки
Основной принцип атаки заключается в редистрибуции статического маршрута в сеть OSPF с наименьшей метрикой. Эта сеть выступит в качестве вектора для инъекции ложного маршрута. FRR позволяет оперировать статической маршрутизацией и ее редистрибуцией, что освобождает нас от использования дискретных утилит (Loki, Scapy и прочих).
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»