Атаки на домены динамической маршрутизации могут устроить настоящий хаос в сети, так как нарушают сам процесс маршрутизации. В этой статье я поделюсь своей модификацией атаки Evil Twin для перехвата данных в сетях на основе протокола OSPF. Также продемонстрирую способ подключения к автономной системе, покажу, как можно обойти аутентификацию и выполнить вредоносную LSU-инъекцию.
В этой статье я буду говорить о второй версии OSPF. Характеристики ее таковы:
FRRouting — это специальный виртуальный маршрутизатор, который может интегрироваться с твоей ОС и работать как настоящий роутер. Очень крутая штука, поскольку поддерживает множество интересных протоколов: BGP, IS-IS, OSPF, EIGRP, VRRP, BFD и так далее. В этой статье я воспользуюсь именно FRR.
В первую очередь нужно активировать демоны FRR. За каждый протокол будет отвечать отдельный демон. Нам понадобятся демоны ospfd и staticd.
Перед запуском демона переключаем сетевой интерфейс в promiscuous mode, разрешаем маршрутизацию и активируем работу NAT Helper (NFCONNTRACK).
После этого включаем демон FRR и проверяем его состояние.
С помощью команды vtysh попадаем на панель управления маршрутизатором:
Отказоустойчивость сети обеспечивает HSRPv2. Начиная с уровня распределения, я настроил динамическую маршрутизацию OSPF, все хранится в нулевой BACKBONE-зоне.
Также используется MD5-аутентификация. Она не позволяет неаутентифицированным роутерам входить в процесс маршрутизации. Не зная ключ, подключиться к сети OSPF не выйдет.
На скриншоте некоторые характеристики ключа. Идентификатор ключа (ID) — единица.
Для сниффинга криптографического MD5-хеша воспользуемся утилитой Ettercap. Перед этим переключаемся в promisc.
Копируем эти хеши и брутим. Кстати говоря, очень удобно, что хеши сразу представлены в формате John the Ripper.
Пароль удалось сбрутить, это flatl1ne. С этим ключом мы можем подключиться к сети OSPF.
Мы выполним спуфинг хоста SMB Share с адресом 192.168.100.1/32. А именно с помощью инжекта адреса SMB-шары. Инжект представляет собой LSA-сообщение пятого типа, будет сгенерировано сообщение LSU (link-state update), после чего легитимный маршрутизатор примет наш инжект и поместит его в таблицу маршрутизации, а также сообщит остальным соседям об этом объявлении.
В таблице маршрутизации хранятся только лучшие маршруты. У твоего инжекта должны быть наилучшие характеристики, а именно административное расстояние и метрика.
От административного расстояния (АР) зависит предпочтительность маршрута. Чем выше это значение, тем меньше вероятность, что маршрут будет выбран. Значение АР для OSPF эквивалентно 110.
Также у нас есть стоимость маршрута. С помощью FRR мы укажем на редистрибуцию статического маршрута с нулевой стоимостью. Чем эта метрика ниже, тем маршрут более предпочтителен. И так как при инжекте мы указываем маску /32, шанс помещения инжекта в таблицу маршрутизации крайне велик. Потому что пакет, оказавшийся на маршрутизаторе, пойдет в сеть с наибольшей маской (а это будет в формате маршрута 192.168.100.1/32 via 10.10.50.2)
Структура инъекции:
Здесь
Теперь весь трафик, предназначенный для той SMB-шары, пойдет в нашу сторону. После чего мы можем поднять простой SMB-сервер с помощью impacket и перехватить учетные данные пользователей в зашифрованном виде. Да, речь о NetNTLM-хешах. После этого их можно либо сбрутить (Bruteforce), либо отрелеить (NTLM Relay).
В итоге возникает атака Evil Twin, то есть «злой двойник».
Поднимем шару с помощью Impacket и запустим анализатор net-creds.py:
После начала атаки мы перехватываем огромное количество NetNTLM-хешей. Только посмотри на это!
Попробуем сбрутить пароль этого пользователя.
В итоге у нас есть креды intervalsabove:viewfromabove. Прикольно!
Вот таким образом можно перехватывать учетные данные пользователей. NTLM Relay тоже, кстати, работает корректно.
Вмешиваясь в сам процесс маршрутизации, будь осторожен! Эта атака крайне агрессивна: когда пользователи будут стучаться к какой‑нибудь SMB-шаре за своими файлами, они ничего не найдут. Раз уж ты спуфишь саму шару, может быть, тебе удастся поднять ее копию. Однако вскоре ты соберешь достаточно хешей и можешь остановить атаку. Затягивать эксплуатацию не стоит, иначе легитимные сотрудники будут плакать, а пентест перестанет быть секретом.
Из‑за высокой скорости сходимости в OSPF после отмены анонса маршрута структура таблицы маршрутизации станет как прежде, до атаки. И это наступит очень быстро. Скорость сходимости равна четырем секундам. Однако все будет зависеть от размеров самой сети, поскольку все маршрутизаторы должны обновить свои таблицы. В общем, будь осторожен.
Пример настройки MD5-аутентификации в Cisco IOS:
Пример настройки пассивного интерфейса в Cisco IOS:
автор @in9uz Magama Bazarov
КАК РАБОТАЕТ 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.FRRouting — это специальный виртуальный маршрутизатор, который может интегрироваться с твоей ОС и работать как настоящий роутер. Очень крутая штука, поскольку поддерживает множество интересных протоколов: BGP, IS-IS, OSPF, EIGRP, VRRP, BFD и так далее. В этой статье я воспользуюсь именно FRR.
В первую очередь нужно активировать демоны FRR. За каждый протокол будет отвечать отдельный демон. Нам понадобятся демоны ospfd и staticd.
Код:
root@kali:~# nano /etc/frr/daemons
ospfd=yes
staticd=yes
Код:
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
Код:
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.10.20.1 — Fake (VLAN 20) (Windows 10 LTSC);
- 10.10.30.1 — Boundless (VLAN 30) (Windows 10 LTSC);
- 10.10.50.2 — Attacker (VLAN 50) (Kali Linux);
- 10.10.50.100 — Dist-SW1 (HSRPv2 Active) (Cisco vIOS L2 Image);
- 10.10.50.101 — Dist-SW2 (HSRPv2 Standby) (Cisco vIOS L2 Image);
- 192.168.100.1 — SMB Share (Windows Server 2019 Standard).
Анализ трафика
Первым делом нам нужно изучить трафик OSPF, узнать об ID зоны, наличии аутентификации, router-id и так далее. Из пакета OSPF Hello, полученного от Dist-SW1 (10.10.50.100), можно заметить, что используется нулевая зона 0.0.0.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 и прочих).Мы выполним спуфинг хоста SMB Share с адресом 192.168.100.1/32. А именно с помощью инжекта адреса SMB-шары. Инжект представляет собой LSA-сообщение пятого типа, будет сгенерировано сообщение LSU (link-state update), после чего легитимный маршрутизатор примет наш инжект и поместит его в таблицу маршрутизации, а также сообщит остальным соседям об этом объявлении.
Код:
kali# conf ter
kali(config)# router ospf
kali(config-router) network 10.10.50.3/32 area 0.0.0.0
kali(config-router) redistribute static metric 0
В таблице маршрутизации хранятся только лучшие маршруты. У твоего инжекта должны быть наилучшие характеристики, а именно административное расстояние и метрика.
От административного расстояния (АР) зависит предпочтительность маршрута. Чем выше это значение, тем меньше вероятность, что маршрут будет выбран. Значение АР для OSPF эквивалентно 110.
Также у нас есть стоимость маршрута. С помощью FRR мы укажем на редистрибуцию статического маршрута с нулевой стоимостью. Чем эта метрика ниже, тем маршрут более предпочтителен. И так как при инжекте мы указываем маску /32, шанс помещения инжекта в таблицу маршрутизации крайне велик. Потому что пакет, оказавшийся на маршрутизаторе, пойдет в сеть с наибольшей маской (а это будет в формате маршрута 192.168.100.1/32 via 10.10.50.2)
Структура инъекции:
Код:
kali(config)# ip route 192.168.100.1/32 eth0
- 192.168.100.1 — адрес целевого сервера;
- /32 — маска подсети. Она эквивалентна 255.255.255.255;
- eth0 — сетевой интерфейс атакующей системы. То есть в маршруте адресом следующего прыжка (next hop) будет наш хост.
Код:
in9uz@kali:~$ sudo ifconfig eth0:1 192.168.100.1 netmask 255.255.255.255
В итоге возникает атака Evil Twin, то есть «злой двойник».
Поднимем шару с помощью Impacket и запустим анализатор net-creds.py:
Код:
in9uz@kali:~$ sudo impacket-smbserver -smb2support sharePath /home/in9uz/smb-poc-share
in9uz@kali:~/toolkit/net-creds$ sudo python2 net-creds.py -i eth0
Попробуем сбрутить пароль этого пользователя.
В итоге у нас есть креды intervalsabove:viewfromabove. Прикольно!
Вот таким образом можно перехватывать учетные данные пользователей. NTLM Relay тоже, кстати, работает корректно.
Вмешиваясь в сам процесс маршрутизации, будь осторожен! Эта атака крайне агрессивна: когда пользователи будут стучаться к какой‑нибудь SMB-шаре за своими файлами, они ничего не найдут. Раз уж ты спуфишь саму шару, может быть, тебе удастся поднять ее копию. Однако вскоре ты соберешь достаточно хешей и можешь остановить атаку. Затягивать эксплуатацию не стоит, иначе легитимные сотрудники будут плакать, а пентест перестанет быть секретом.
Из‑за высокой скорости сходимости в OSPF после отмены анонса маршрута структура таблицы маршрутизации станет как прежде, до атаки. И это наступит очень быстро. Скорость сходимости равна четырем секундам. Однако все будет зависеть от размеров самой сети, поскольку все маршрутизаторы должны обновить свои таблицы. В общем, будь осторожен.
Код:
kali(config)# no ip route 192.168.100.1/32 eth0
КАК ЗАЩИТИТЬСЯ?
Аутентификация
Используй аутентификацию, и она не позволит неизвестным маршрутизаторам подключаться к автономным системам динамической маршрутизации. Только позаботься о том, чтобы сам ключ аутентификации был достаточно стойким и его так просто не сбрутили.Пример настройки MD5-аутентификации в Cisco IOS:
Код:
Router(config)# interface GigabitEthernet X/X
Router(config-if)# ip ospf authentication message-digest
Router(config-if)# ip ospf message-digest-key 1 md5 y0uve_t4ken_y0ure_pr3c1ous_t1me
Используй пассивные интерфейсы
Они запрещают тому или иному интерфейсу рассылать пакеты приветствия, что лишает пентестера шансов подключиться к домену маршрутизации. Навсегда.Пример настройки пассивного интерфейса в Cisco IOS:
Код:
Router(config)# router ospf X
Router(config-if)# passive-interface GigabitEthernet X/X
ВЫВОДЫ
Вот такие атаки возможны в сетях с мисконфигурацией доменов динамической маршрутизации. Злоумышленники могут использовать подобную технику вкупе с фишингом, что сделает атаку еще более опасной. Надеюсь, мое исследование поможет не им, а благонамеренным пентестерам, а сетевые администраторы начнут закрывать подобные дыры.автор @in9uz Magama Bazarov