Fhrp что это
Перейти к содержимому

Fhrp что это

  • автор:

Протоколы группы FHRP (First Hop Redundancy Protocols)

img

FHRP (Протокол резервирования первого перехода) — это группа протоколов способные обеспечить клиентов отказоустойчивым шлюзом.

Что за первый переход такой?. У нас есть коммутируемая среда (SW1) и есть Internet . Internet это маршрутизируемая среда . И для того чтобы перейти из коммутируемой среды , в маршрутизируемую среду для того чтобы выйти в интернет , как раз эти роутеры(R1,R2,VR — Virtual Router) обеспечивают данный переход и для того ,чтобы обеспечить отказоустойчивость этого перехода , его нужно резервировать . А потому и называется протоколы резервирования первого перехода.

И все протоколы группы FHRP будут работать в единой логике: R1 , R2 будут прикидываться VR и в случае отказа одного из маршрутизаторов, то его работу возьмет другой.

Протоколы группы FHRP (First Hop Redundancy Protocols)

  • Forwarding Router ( FR ) — это роутер ,который данный момент активен и маршрутизирует трафик .
  • Standby Router ( SR ) — это роутер ,который стоит в резерве и ждет , когда накроется FR ,чтобы перехватите его работу на себя , в случае сбоя маршрутизатора.
  • FHRPs — это группа ,а значит пришло время познакомить вас с этими протоколами.
    • HSRP (Hot Standby Router Protocol) — Проприетарный протокол разработанный Cisco;
    • VRRP (Virtual Router Redundancy Protocol) — Свободный протокол ,сделан на основе HSRP;
    • GLBP (Gateway Load Balancing Protocol) — Проприетарный протоколCisco , обеспечивающий распределение нагрузки на несколько маршрутизаторов( шлюзов) используя 1 виртуальный адрес.
    • CARP( Common Address Redundancy Protocol) — свободный , разработан как часть OpenBSD , портирован во FreeBSD.

Итак начнём с HSRP

Протокол HSRP рассчитан на 2 роутера, 3 это уже лишний и с этим уже справиться протокол GLBP

HSRP

Предположим ,что R1 это маршрутизатор выхода в интернет и для этого мы поднимем на нём Loopback 1 с адресом 200.200.200.200 и пропишем его в маршруте по умолчанию. Между маршрутизаторами будет настроен RIPv2 и будут анонсированы 2 классовые сети( network 10.0.0.0 и network 192.168.0.0) для простоты анонсирования маршрутов.

  • R1(config)# interface e 0/0 — переходим на интерфейс ethernet 0/0 (этот интерфейс смотрит в локальную сеть на коммутатор )
  • R1(config-if)# ip address 192.168.0.2 255.255.255.0 — задаем ip адрес для физического интерфейса
  • R1(config-if)# standby 1 ip 192.168.0.254 — задаем виртуальный ip адрес (который будет основным шлюзом для свитчей, смотрящих на конфигурируемый роутер). У обоих роутеров он одинаковый
  • R1(config-if)# stanby 1 priority 110 — устанавливаем приоритет данного роутера в 110 (по умолчанию приоритет 100)
  • R1(config-if)# standby 1 preempt — задаем режим приемтинга
  • R1(config-if)# standby 1 authentication md5 key-string MyPassword — задаем аутентификацию, если необходимо. Пароль будет передаваться с защитой алгоритмом хеширования md5, пароль будет MyPassword
  • R1(config-if)# standby 1 timers 100 255 — регулировка таймеров hsrp, где 100 — hello интервал в секундах (как часто посылаются пакеты hello пакеты keep-alive) и 255 — hold interval в секундах (через какой промежуток времени признавать соседа недоступным)
  • R1(config-if)# standby 1 preempt delay minimum 300 — настройка времени задержки (в секундах), через которое роутер будет становиться главным. Эта команда требуется для того,чтобы сначала отработали другие протоколы,прежде чем заработает HSRP . Пример: OSPF включенный на роутере в большой сети не успеет передать маршруты все ,а тут сразу заработает HSRP ,естественно он знать все маршруты не будет,а значить и стабильно гнать трафик тоже. Как раз время delay он будет использовать для того,чтобы дать OSPF передать все маршруты и после этого вкл HSRP.

Сам VPC должен получить следующие настройки: IP : 192.168.0.10/24 GW: 192.168.0.254

Главное ,чтобы клиент был в одной подсети и в качестве шлюза был виртуальный IP адрес.

TRACKING

Также полезно вешать TRACK на интерфейсы ,так как HSRP работает только в сторону ,куда направлен интерфейс ,то он не сможет отработать,когда упадут линки ,смотрящие на роутеры выше.(в данном случае это R3)

  • Router(config)# track 1 interface fa0/1 line-protocol — отслеживаем состояние интерфейса fa0/1, если он падает, то сработает объект отслеживания track 1.
  • Router(config-if)# standby 1 track 1 decrement 15 — если сработает объект отслеживания track 1, то текущий приоритет будет понижен на 15 единиц.
  • Router(config-if)# standby 1 track 1 fa0/1 20 — работает только в HSRP. Позволяет отслеживать интерфейс без дополнительного создания объекта отслеживания.

R1,R2,R0 будут настраиваться одинаково, принцип сохраняется.

А теперь нюансы HSRP

При работе нескольких VLAN , HSRP может идти трафик не совсем рационально из-за протокола STP. Представим ,что R1 это root primary за 10 VLAN, а R2 это ACTIVE router в HSRP . Это значит ,что любой трафик за этот VLAN будет идти следующим образом:VPC — R2 — R1 — R3 вместо того,чтобы идти напрямую VPC — R1 — R3. (L2 трафик всегда ходит через root во избежание петель)

нюансы HSRP

Поэтому рекомендуют использовать HSRP version 2(по умолчанию вкл 1 максимум 255 процессов,а во 2 их 4095) и использовать наилучший приоритет для того роутера, который сейчас в сети root primary за текущий VLAN. И хорошей практикой будет если номер VLAN будет совпадать с номером процесса HSRP. ( № HSRP = VLAN )

нюансы HSRP

3 Роутера в HSRP не имеет смысла держать,так как он всё равно будет в состоянии Listen и включиться только тогда,если active пропадет, standby займет его место , и только тогда он перейдет в состоянии standby.(речь идет о 3 роутере) Тоже самое будет касаться 4,5 . n роутеров.

SLA

Бывает и другая ситуация ,когда не сам линк от R1 падает ,а устройство находящиеся за ним,к примеру SW2 упал link до R3. Проблему способен решить сервис SLA — Service Level Agreement.

Суть его проста,он ping сервис до провайдера и если он падает ,то отрабатывает track.

отрабатывает track

  • R1(config)# ip sla 1 — создаем зонд
  • R1(config-ip-sla)# icmp-echo 215.215.215.2 source-interface e0/2 — посылаем icmp echo ping на 215.215.215.2
  • R1(config-ip-sla-echo)# frequency 10 — посылаем icmp echo ping с частотой каждые 10 секунд
  • R1(config)# ip sla schedule 1 start-time now life forever — задаем расписание работы ip sla. В данном случае зон будет запущен прямо сейчас, при этом время окончания не задано (навсегда)
  • R1(config)# track 1 ip sla 1 reachability — устанавливаем объект отслеживания на доступность того хоста, на который посылаем icmp echo ping
  • R1(config)# ip route 0.0.0.0 0.0.0.0 2.2.2.2 track 1 — направляем трафик по этому маршруту если объект трекинга track 1 работает (хост пингуется)
  • R1(config)# ip route 0.0.0.0 0.0.0.0 3.3.3.3 10 — если не пингуется, направляем трафик в интернет по другому маршруту (Внимание! Здесь важно задать именно плохую метрику, например 10, иначе будут работать оба маршрута! (балансировка))
  • R1# show track 1 — показать состояние объекта отслеживания

VRRP

Настройка VRRP не сильно отличается от HSRP . Настраивается он также как и HSRP, только вместо standby используется vrrp. Router(config-if)# vrrp 1 ip 192.168.1.1 — включение vrrp. Проще пройтись по отличиям ,чем заново описывать все команды.

  1. У VRRP тоже только 2 состояния Master и Backup(HSRP active и standby)
  2. Preempt включен по умолчанию (HSRP он отключен)
  3. При падении линка VRRP проводит выборы роутера(HSRP имеет запасной). Главного выбирают по IP адресу, когда проводят выборы.
  4. Поддержка Аутентификации в VRRP отсутствует (RFC отсутствует),но в Cisco она реализована(HSRP по умолчанию)
  5. VRRP по умолчанию hello таймер равен 1 секунде , dead таймер равен 3(у HSRP 3 и 10 соответственно)
  6. Виртуальный адрес может совпадать с адресом интерфейса(HSRP такой адрес не даст прописать)
  7. Использует Multicast HSRP равен 224.0.0.2 ( version 1) 224.0.0.102 (version 2) ,а VRRP 224.0.0.18
  8. Может отслеживать только объекты , а HSRP и интерфейсы , и объекты.(смотри раздел tracking)

Диагностика

  • Router# show standby (vrrp or glbp) — показать общую информацию по протоколу группы FHRP
  • Router# show standby brief — показать информацию по протоколу группы FHRP в виде таблицы

First Hop Redundancy Protocols – часть 1

6a0120a85dcdae970b01287770508e970c

Вы построили отказоустойчивую сеть? Куда не плюнь – попадешь в STP, стэк коммутаторов, Cross Stack EtherChannel, Layer3 redundancy, SSO или еще какой дьявольский акроним? Не желаете, вдобавок, обеспечить клиентов отказоустойчивым шлюзом, чтобы поток байтов с bash.org да redtube лился no matter what и не прерывал рабочий процесс тружеников клавиатуры? Ведь способы есть и имя им Frist Hop Redundancy Protocols (FHRP).

Семейство протоколов FHRP включат в себя различные проприетарные (HSRP, GLBP, SMLT), открытые, отягощенные патентами (VRRP) и красноглазые свободные реализации (CARP). В контексте коммутаторов Cisco речь пойдет о HSRP, VRRP и GLBP протоколах.

Не смотря на то, что FHRP подразумевает отказоустойчивый шлюз (что понятно если перевести акроним дословно), проприетарные расширения HSRP способны решать другие задачи. Так, например, с помощью HSRP можно строить отказоустойчивые VPN шлюзы – http://twistedminds.ru/2012/08/cisco-ipsec-vpns-high-availability/.

Как вы знаете, для того, чтобы отправить пакет за пределы своей сети хосту необходимо знать (*) о IP адресе шлюза по умолчанию (default gateway) или next-hop’е. Соответственно все пакеты, направляемые за пределы сети должны быть направлены с DST MAC шлюза по умолчанию, а не на MAC адрес конечной станции.

* – на самом деле нет. Proxy ARP позволяет маршрутизаторам и коммутаторам отвечать на broadcast ARP запросы, сгенерированные хостом в процессе поиска адреса устройства, находящегося в другой сети. На такие запросы маршрутизатор или коммутатор, имеющий маршрут до другой сети, отвечает своим MAC адресом. Подробнее тут – http://twistedminds.ru/2012/09/default-gateway-on-different-subnet/.

Собственно весь смысл FHRP протоколов заключается в том, чтобы позволить нескольким устройствам использовать один адрес, который может быть адресом шлюза по умолчанию, обеспечивая тем самым отказоустойчивость next-hop’а для клиентов. А может и не быть.

Hot Standby Router Protocol (HSRP)

HSRP – проприетарный протокол Cisco, описанный в RFC2281 (как я понял без расширений, позволяющих организовывать Stateful IPSEC Failover). Смысл его состоит в том, что каждое из устройств, предоставляющее отказоустойчивый шлюз объединяется в HSRP группу. Таких групп может быть несколько (HSRP group 1 для ip 192.168.1.1 vlan 11, HSRP group 2 для ip 192.168.2.1 vlan 21 etc). В таких группах одно устройство выбирается как Active (и занимается непосредственной пересылкой данных), другое как Standby (и ждет гибели Active), а остальные остаются в состоянии listen. Вы можете организовывать балансировку нагрузки, делая одно устройство Active в HSRP group 1, а другое в HSRP group 2. Таких групп может быть 256 (0-255).

Номера групп значимы только на интерфейсе, иными словами вы можете создать HSRP Group 5 на SVI VLAN 20 и HSRP Group 5 на SVI Vlan 30. Устройства в группе обмениваются Hello пакетами на multicast адрес 224.0.0.2, используя UDP порт 1985.

Выборы активного маршрутизатора происходят изначально по Priority Value, которое, по умолчанию, равно 100. Устройство с наивысшим приоритетом (0-255) выигрывает. Если priority у всех устройств одинакова, то выигрывает маршрутизатор с большим IP адресом. Меняется priority так:

Switch(config-if)# standby #_group priority #_priority

Устройства, принимающие участие в создании HSRP группы проходят через несколько стадий: Disabled > Init > Listen > Speak > Standby > Active. Только standby (second best) маршрутизатор следит за hello пакетами от Active устройства. По умолчанию hello timer – 3 sec, hold – 10 sec. Если по прошествии этого времени не были получены Hello пакеты устройство объявляется мертвым, а Standby маршрутизатор перехватывает Active роль. В тот же момент следующее лучше устройство (по priority или по IP) переходит из Listen в Standby. Изменить таймеры можно так:

Switch(config-if)# standby group timers [msec] #_hello_sec [msec] #_holdtime_sec

После того, как отдавшее концы устройство возвращается к жизни, оно не перехватывает на себя роль Active, даже если его приоритет выше, чем у текущего Active. Вернуть себе заветный статус можно либо подождав пока откажет текущий Active маршрутизатор, либо настроить preemption – вытеснение:

Switch(config-if)# standby #_group preempt [delay [ minimum #_sec ] reload #_sec ]
  • Ключ minimum заставляет устройство ждать с момента пока не поднимется интерфейс. Задержка составляет от 0 до 3600 секунд.
  • Ключ reload заставляет ждать устройство c момента включения те же 0-3600 секунд.
Аутентификация HSRP

Бывает cleartext, бывает MD5. Знакомьтесь, это cleartext:

Switch(config-if)# standby #_group authentication #_string
Switch(config-if)# standby #_group authentication md5 key-string #_string

Так же можно использовать цепочки ключей.

Отслеживание состояние интерфейсов

Вы можете отслеживать состояние интерфейсов, отличных от тех, которые принимают участие в формировании HSRP группы. Сделано это для того, чтобы переключить активный маршрутизатор в HSRP группе в том случае, если, к примеру, упал uplink к ядру, а коммуникации смотрящие в сторону клиентов находятся в полном порядке. Фича носит название interface tracking и настраивается так:

Switch(config-if)#standby #_group track #_interface #_priority_decrement_value

Preemption, понятное дело, должно быть настроено, в противном случае standby маршрутизатор не перехватит активную роль, не смотря на изменение приоритета.

Putting all together

hsrp demo

По легенде SwitchA и SwitchB подключены fa1/0 портами в сегмент с рабочими станциями, fa1/10 в сегмент с сервером. Требуется настроить HSRP группу с тем, чтобы default gateway 192.168.1.1 оставался доступным даже в том случае если один из коммутаторов выйдет из строя. Так же требуется производить отслеживание состояние fa1/10 интерфейсов, смотрящих в сегмент с серверами.

SwitchX(config)#int vla 1 SwitchX(config-if)# ip address 192.168.1.[2|3] 255.255.255.0 SwitchX(config-if)# standby 1 ip 192.168.1.1 SwitchX(config-if)# standby 1 preempt SwitchX(config-if)# standby 1 authentication DERSECRET SwitchX(config-if)# standby 1 track FastEthernet1/10

Обратите внимание на то, что в interface tracking мы не указали то, на сколько надо уменьшить приоритет. По умолчанию decrement value равно 10:

SwitchA#show standby vlan 1 Vlan1 - Group 1 State is Active 2 state changes, last state change 00:23:35 Virtual IP address is 192.168.1.1 Active virtual MAC address is 0000.0c07.ac01 Local virtual MAC address is 0000.0c07.ac01 (v1 default) Hello time 3 sec, hold time 10 sec Next hello sent in 0.468 secs Authentication text "DERSECRE" Preemption enabled Active router is local Standby router is 192.168.1.3, priority 100 (expires in 9.472 sec) Priority 100 (default 100) Track interface FastEthernet1/10 state Up decrement 10 IP redundancy name is "hsrp-Vl1-1" (default)

Так же имеет смысл обратить внимание на Virtual MAC address. 0000.0c07.ac означает то, что перед нами адрес HSRP группы, а последний байт отражает номер группы. В данном случае группа 1 – 01.

fhrp

Или VRRP – стандартизированный протокол, описанный в RFC 2338. VRRP очень похож на HSRP и все, что вам следуют сделать, так это запомнить не большие различия в терминологии. По это причине я не буду подробно описывать VRRP, а остановлюсь только на ключевых различиях и другом синтаксисе конфигурации.

Так же как и HSRP VRRP предоставляет один отказоустойчивый VIP адрес от всей группы маршрутизаторов. Активный маршрутизатор называется master, все остальные – backup, при чем все backup маршрутизаторы слушают multicast адрес, а не только second best как это было в случае с HSRP.

Номера VRRP групп такие же как у HSRP – 0-255, приоритет настраивается так же – 1-254. Чем выше, тем лучше.

First Hop Redundancy Protocols – часть 1

11/05/2013 10/05/2013 by Stanislav

6a0120a85dcdae970b01287770508e970c

Вы построили отказоустойчивую сеть? Куда не плюнь – попадешь в STP, стэк коммутаторов, Cross Stack EtherChannel, Layer3 redundancy, SSO или еще какой дьявольский акроним? Не желаете, вдобавок, обеспечить клиентов отказоустойчивым шлюзом, чтобы поток байтов с bash.org да redtube лился no matter what и не прерывал рабочий процесс тружеников клавиатуры? Ведь способы есть и имя им Frist Hop Redundancy Protocols (FHRP).

Семейство протоколов FHRP включат в себя различные проприетарные (HSRP, GLBP, SMLT), открытые, отягощенные патентами (VRRP) и красноглазые свободные реализации (CARP). В контексте коммутаторов Cisco речь пойдет о HSRP, VRRP и GLBP протоколах.

FHRP Nightmare. Ад и кошмар систем отказоустойчивости маршрутизации

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

It's coming through It's coming through another motherfuckin' big tricks. ᛝ

Intro (Disclaimer)

Данная статья предназначена для специалистов по безопасности, которые проводят пентест в рамках согласованного, легитимного контракта. Разрушение и взлом чужих компьютерных сетей могут преследоваться по закону. Будь осторожен и старайся не испытывать свою судьбу. Скиллы, которые ты освоишь из моей статьи — это только твоя область ответственности.

Для чего созданы FHRP-протоколы

FHRP (First Hop Redundancy Protocol) — это семей­ство сетевых про­токо­лов, которые позволяют нескольким физическим маршрутизторам делить/обслуживать один виртуальный IP-адрес, с целью повышения отказоустойчивости локальной сети. Этот виртуальный адрес будет наз­начать­ся, как адрес шлюза по умолчанию для конечных хостов. Самыми распространенными про­токо­лами клас­са FHRP являются — HSRP, VRRP и GLBP, безопасность которых я и рассмотрю в рамках этой статьи.

Протокол HSRP (Hot Standby Router/Redundancy Protocol)

Является проприетарной разработкой инженеров Cisco. Здесь всё достаточно просто:

  1. Берется какая-то группа физических маршрутизаторов, на них запускается специальный процесс HSRP под уникальным числовым идентификатором.
  2. Исходя из значений приоритетов, выбирается ACTIVE-маршрутизатор, STANDBY-маршрутизаторы
  3. Настраивается виртуальный IP-адрес, за который будет отвечать ACTIVE-маршрутизатор
  4. Опционально: настраивается режим PREEMPT, аутентификация, etc
Сущности домена HSRP и терминология
  • HSRP Active Router — устрой­ство, занимающееся обработкой, маршрутизацией легитимного трафика.
  • HSRP Standby Router — устрой­ство, находящееся в режиме ожидания, которое ожи­дает отка­за активно­го мар­шру­тиза­тора. Пос­ле падения основно­го Active-роуте­ра, Standby-роутер возь­мет на себя гла­венс­тву­ющую роль и будет занимать­ся обя­зан­ностя­ми Active-роуте­ра;
  • HSRP Group — груп­па устрой­ств одной HSRP-груп­пы, обес­печива­ют работу и отка­зоус­той­чивость логичес­кого мар­шру­тиза­тора;
  • HSRP MAC Address — вир­туаль­ный MAC-адрес логичес­кого мар­шру­тиза­тора в домене HSRP;
  • HSRP Virtual IP Address — это спе­циаль­ный вир­туаль­ный IP-адрес в груп­пе HSRP. Дан­ный IP-адрес будет шлю­зом по умол­чанию для конеч­ных хос­тов, исполь­зует­ся на самом логичес­ком мар­шру­тиза­торе.
  • HSRP Preempt mode — опция, которая позволяет павшему ACTIVE-устройству (после его воскрешения) вернуть себе роль ACTIVE, после того когда его заменил один из STANDBY-маршрутизаторов (ситуация, когда была выполнена подмена ACTIVE-устройства, вышедшего из строя). По умолчанию, Preempt-режим в HSRP отключен.

Скелет и механика работы HSRP

HSRP реализован поверх стека протоколов TCP/IP, поэтому для трансляции служебной информации используется протокол транспортного уровня UDP под номером порта 1985. HSRP-маршрутизаторы в рамках одной логической группы обмениваются специальными пакетами приветствия «hello» каждые 3 секунды, однако, если в течении 10 секунд HSRP-маршрутизатор в рамках одной группы не получил пакет приветствия от своего HSRP-соседа, то он признает его «погибшим»

У данного протокола есть две версии и они отличаются следующими характеристиками:

  • Количества групп (HSRPv1 предлагает до 255 групп, когда HSRPv2 может до 4096)
  • MAC-адреса (HSRPv1 — 00:00:0c:07:ac:xx / HSRPv2 — 00:00:0C:9F:FX:XX ) (XX — это номер группы HSRP)
  • IP-адреса групповой рассылки (HSRPv1 — 224.0.0.2 / HSRPv2 — 224.0.0.102 )

Протокол VRRP (Virtual Router Redundancy Protocol)

Данный протокол разработан на основе феноменов протокола HSRP, вследствие чего имеет большие неприятности с патентами. Поэтому его «свободным» и «открытым» назвать нельзя. Но по крайней мере поддерживается всеми вендорами сетевого оборудования, т.е. использование VRRP в твоей сети позволяет тебе быть независимым от какой-либо экосистемы вендора.

Скелет и механика работы VRRP

Де-факто, если ты знаешь как работает HSRP, ты знаешь как работает и VRRP. Между HSRP и VRRP очень много общего, но отличительные характеристики для тебя обозначу:

  • VRRP не реализован поверх стека протоколов TCP/IP. Данный протокол работает исключительно на сетевом уровне
  • Его IP-адрес мультикастовой рассылки — 224.0.0.18
  • Его идентификатор — 112
  • Вторая версия VRRPv2 отличается поддержкой IPv4 и поддержкой аутентификации. Тип аутентификации в зависимости от вендора. Например, Cisco предлагает защитить VRRP с использованием MD5-аутентификации, когда MikroTik (RouterOS) предлагает AH-аутентификации (AH — это протокол из оперы IPSec’a)
  • Третья версия — VRRPv3 отличается поддержкой IPv6, но лишается аутентификации.

VRRP-соседи в рамках одного домена отказоустойчивости обмениваются специальными пакетами приветствия, каждую секунду (своего рода hello time). Но также есть своего рода «dead timer» — если в течении 10 секунд пакета приветствия не будет — тот роутер от которого ожидался этот «hello» — выпадет из домена отказоустойчивости

Проблема возникновения псевдобалансировки

Проблема заключается в том, что у протоколов HSRP и VRRP нет механизма балансировки нагрузки. При их использовании возникает псевдобалансировка, когда по умолчанию фактически пашет только одно устройство, когда остальные отдыхают и работают в режиме ожидания. Однако, вы можете просто раскидать ваши VLAN по логическим процессам HSRP/VRRP на уровне коммутаторов распределения (L3 свитчи) или на маршрутизаторов, когда будут создаваться логические VLAN-интерфейсы (802.1Q Encapsultation Moment)

Ниже будут примеры настроек для HSRP и VRRP в отношении сетей VLAN 10 и VLAN 30. Dist-SW1 будет пахать на VLAN 10, а за VLAN 30 спать. Dist-SW2 пашет за VLAN 30, а за VLAN 10 спит.

HSRP for VLANs (Cisco IOS)
Dist-SW1(config)# interface vlan 10 Dist-SW1(config-if)# standby 10 ip 10.10.10.254 Dist-SW1(config-if)# standby 10 priority 150 Dist-SW1(config-if)# standby 10 preempt Dist-SW1(config-if)# standby 10 authentication md5 key-string my_heartbeats Dist-SW1(config-if)# end Dist-SW1(config)# interface vlan 30 Dist-SW1(config-if)# standby 30 ip 10.10.30.254 Dist-SW1(config-if)# standby 30 priority 90 Dist-SW1(config-if)# standby 30 authentication md5 key-string my_heartbeats Dist-SW1(config-if)# end Dist-SW2(config)# interface vlan 10 Dist-SW2(config-if)# standby 10 ip 10.10.30.254 Dist-SW2(config-if)# standby 10 priority 90 Dist-SW2(config-if)# standby 10 authentication md5 key-string my_heartbeats Dist-SW2(config-if)# end Dist-SW2(config)# interface vlan 30 Dist-SW2(config-if)# standby 30 ip 10.10.10.254 Dist-SW2(config-if)# standby 30 priority 150 Dist-SW2(config-if)# standby 30 preempt Dist-SW2(config-if)# standby 30 authentication md5 key-string my_heartbeats Dist-SW2(config-if)# end
VRRP for VLANs (Cisco IOS)
Dist-SW1(config)# interface vlan 10 Dist-SW1(config-if)# vrrp 10 ip 10.10.10.254 Dist-SW1(config-if)# vrrp 10 priority 150 Dist-SW1(config-if)# vrrp 10 preempt Dist-SW1(config-if)# vrrp 10 authentication md5 key-string my_heartbeats Dist-SW1(config-if)# end Dist-SW1(config)# interface vlan 30 Dist-SW1(config-if)# vrrp 30 ip 10.10.30.254 Dist-SW1(config-if)# vrrp 30 priority 90 Dist-SW1(config-if)# vrrp 30 authentication md5 key-string my_heartbeats Dist-SW1(config-if)# end Dist-SW2(config)# interface vlan 10 Dist-SW2(config-if)# vrrp 10 ip 10.10.30.254 Dist-SW2(config-if)# vrrp 10 priority 90 Dist-SW2(config-if)# vrrp 10 authentication md5 key-string my_heartbeats Dist-SW2(config-if)# end Dist-SW2(config)# interface vlan 30 Dist-SW2(config-if)# vrrp 30 ip 10.10.10.254 Dist-SW2(config-if)# vrrp 30 priority 150 Dist-SW2(config-if)# vrrp 30 preempt Dist-SW2(config-if)# vrrp 30 authentication md5 key-string my_heartbeats Dist-SW2(config-if)# end

Протокол GLBP (Gateway Load Balancing Protocol)

Разработан инженерами Cisco Systems. Как и HSRP, данный протокол реализован поверх стека протоколов TCP/IP, поэтому для трансляции служебной информации используется протокол транспортного уровня UDP под номером порта 3222. GLBP-маршрутизаторы в рамках одной логической группы обмениваются специальными пакетами приветствия «hello» каждые 3 секунды, однако, если в течении 10 секунд GLBP-маршрутизатор в рамках одной группы не получил пакет приветствия от своего GLBP-соседа, то он признает его «погибшим». Однако, значения таймеров могут конфигурироваться в зависимости от нужд админа.

Скелет и механика работы GLBP

GLBP обеспечивает распределение нагрузки на несколько маршрутизаторов (шлюзов) используя один виртуальный IP-адрес и несколько виртуальных MAC-адресов. Каждый хост сконфигурирован с одинаковым виртуальным IP-адресом и все маршрутизаторы в виртуальной группе участвуют в передаче пакетов.

Работает гораздо иначе в отношении протоколов HSRP и VRRP, так как использует механизмы настоящей балансировки нагрузки, обозначу ниже:

  • Host-Dependent. Тип балансировки нагрузки, использующийся в сети, где есть NAT. Host-Dependent гарантирует тот факт, что хосту вернется тот же MAC-адрес AVF-устройства, который использовался в раннем моменте времени, тем самым трансляции сконфигурированного NAT в отношении хоста разорваны не будут.
  • Round-Robin. В данном режиме AVG-устройство раздает MAC-адреса членам AVF попеременно. Именно этот механизм используется по умолчанию
  • Weight-based round-robin. Балансировка нагрузки на основе специальной метрики «Weight» (если переводить с английского — это вес)
Сущности домена GLBP и терминология
  • AVG (Active Virtual Gateway) — устройство, которое является по сути батей всего логического домена GLBP. «Батя» указывает остальным маршрутизаторам как выполнять обработку легитимного трафика. Раздает MAC-адреса, ответственнен за ответы за ARP-запросы. Кстати говоря, в рамках одной группы GLBP, AVG-членов может быть только один маршрутизатор.
  • AVF (Active Virtual Forwarder) — устройство в домене GLBP, которое занимается обработкой трафика. Их может быть несколько.
  • GLBP Group — логическая группа GLBP, в которую входят физические маршрутизаторы. У каждой логической группы GLBP есть свой уникальный числовой идентификатор
  • GLBP MAC — виртуальный MAC-адрес AVF-членов, раздаваемый существующим AVG-роутером.
  • GLBP Virtual IP Address — IP-адрес, за который ответственнен AVG-маршрутизатор
  • GLBP Preempt Mode — опция, позволяющая воскресшему AVG-устройству вернуть себе роль, после того, когда его подменил AVF, исходя из значений приоритетов. По умолчанию, в отношении AVG режим преемптинга отключен, когда для AVF-членов режим преемптинга включен (с задержкой до 30 секунд, но данное значение может конфигурироваться вручную)
  • GLBP Weight — метрика, указывающая степень нагрузки на интерфейс устройства. Чем эта метрика больше, тем выше нагрузка на интерфейс маршрутизатора.

Механизм селекции

В отношении FHRP-протоколов, значение приоритетов у маршрутизаторов по умолчанию равно 100. Если админ не настраивал приоритеты вручную, то в случае HSRP (ACTIVE), в случае VRRP (MASTER), в случае GLBP (AVG) станет тот маршрутизатор, у которого наибольший адрес. Безусловно, эти приортеты насстраиваются вручную, в зависимости от нужд сетевого администратора и какая ему инфраструктура отказоустойчивости нужна.

Механизм FHRP-таймингов

FHRP Hijacking

Домены FHRP уязвимы к Hijack-атаке, если лидирующие ACTIVE/MASTER/AVG не имеют максимального значения приоритета в отношении своей конфигурации. Если атакующий проведет инъекцию HSRP/VRRP/GLBP-пакета с максимальными значениями приоритетов, он сможет перехватить трафик внутри сети.

Stages Theory
  • Information Gathering. Этап разведки информации, выяснение значений приоритетов, поиск аутентификации, используемый виртуальный IP-адрес, MAC-адреса
  • Authentication Bypassing. Этап обхода аутентификации. Если она есть, разумеется. Сохраняем дамп трафика, эксфильтруем хеши и брутим ключ от домена.
  • Injection. Этап подготовки сетевого интерфейса, прописывание MAC-адреса, разрешение маршрутизации, генерация и отправка вредоносной FHRP-инъекции.
  • Routing Management. Создание вторичного IP-адреса, конфигурация нового маршрута по умолчанию, (NAT) MASQUERADE
Weaponize
  • Wireshark. С помощью данного анализатора сетевого трафика мы будем проводить процесс Information Gathering, перечисление заголовков пакетов
  • John & *2john-эксфильтраторы. John является брутфорсером хешей, *2john скрипты помогут воспроизвести эксфильтрацию хешей из дампа трафика
  • Loki. Является пакетным инжектором, фреймворком для проведения анализа защищенности различных L2/L3-протоколов, даже DRP, FHRP и т.д.

Векторы атаки

  • MITM. Атака типа «человек по середине» с целью перехвата легитимного трафика. Выполняется путем вредоносного FHRP-инжекта с максимальным значением приоритета.
  • Blackhole. Атака с целью завернуть трафик легитимной подсети в НИКУДА. Blackhole в переводе с английского — «черная дыра». Типа трафик в черную дыру улетает и всё, приехали.
  • Kicking router via UDP Flood. DoS-атака, механизм которой заключается в массовой рассылке UDP-датаграмм с целью вывести из строя конечный роутер. Работает в отношении HSRP & GLBP, ибо когда на роутерах запускаются процессы этих протоколов, они автоматически начинают прослушивать UDP-порты 1985 и 3222 (HSRP и GLBP соответственно), для VRRP, опять же, транспортного уровня нет.

Ограничения атаки

  • Зависимость от мощности CPU. После MITM-атаки, трафик всей сети или VLAN-сегмента (в зависимости от существующей инфраструктуры) побежит через твое устройство и оно должно быть готово к обработке, маршрутизации трафика всего легитимного сегмента. Иначе возникнет DoS, а заказчик такой сценарий не оценит и потекут горячие слёзы.
  • Производительность сетевого интерфейса. Сетевая карта, использующаяся в момент проведения атаки должна быть достаточно мощной, чтобы справиться с обработкой большого количества трафика.
  • Зависимость от возможной VLAN-сегментации сети. Если ты находишься, например, в VLAN 10 и сможешь провести MITM через инжект — ты будешь перехватывать трафик того VLAN, в котором сам и находишься. Трафик других VLAN’ов ты не достанешь.

FHRP Nightmare Topology

В рамках практической реализации атак, я собрал трехуровневую сеть, которую я обеспечил доступом в сеть интернет, OSPF и доменами отказоустойчивости HSRP/VRRP/GLBP. В рамках моей атаки, я буду воздействовать именно на уровень распределения сети (Distribution Layer) и перехватывать трафик сети VLAN 10.

FHRP Nightmare Topology

Papercut — FTP-сервер под IP-адресом 172.16.60.100

Dustup — тачка с ОС Windows 10 под IP-адресом 172.16.40.1

Attacker (Mercy) — система атакующего с Kali Linux под IP-адресом 10.10.10.3

Boundless — клиентская машина с Linux Mint под IP-адресом 10.10.10.5

Левая часть свитчей уровня Distribution — свитчи Cisco vIOS: Dist-SW1 и Dist-SW2 под адресами 10.10.10.100 и 10.10.10.101 соответственно

Edge Router — пограничный маршрутизатор данной сети, обеспечивает всю сеть интернетом путем механизма NAT (PAT Mechanism Moment)

В качестве динамической маршрутизации выступает позвоночная (BACKBONE) зона OSPF и идентификатором 0

А процессы HSRP/VRRP/GLBP реализованы на виртуальных SVI-интерфейсах.

HSRP Hijacking

Stage 1: Information Gathering

Из дампа трафика в Wireshark мы видим HSRP-объявления от двух коммутаторов под адресами 10.10.10.100 и 10.10.10.101

HSRP-объявления от двух устройств

Исходя из анализа заголовков пакетов HSRP имеем следующую картину (в рамках моей сети я изучил 2 HSRP-объявления):

  • ACTIVE-устройством является коммутатор под адресом 10.10.10.100 , его приоритет 150
  • STANDBY-устройством является коммутатор под адресом 10.10.10.101 , его приоритет 90
  • Используется криптографическая аутентификация (MD5)
  • Виртуальный IP-адрес 10.10.10.254
  • Виртуальный MAC: 00:00:0c:07:ac:01 (ACTIVE)
  • Номер HSRP группы 1

Так как ACTIVE-коммутатор имеет приоритет 150 из 255 — вырисовывается вектор Hijack-атаки. Но также, есть используется аутентификация. Аутентификация в отношении FHRP не позволяет неавторизованным устройствам вступать в процесс обеспечения отказоустойчивости. Но так как мы являемся атакующим, нам необходимо выяснить что за ключ используется в качестве аутентификации к HSRP-домену.

Stage 2: Authentication Bypassing

Необходимо сохранить дамп трафика в формате .pcap, далее с помощью hsrp2john.py (в моем случае скрипт называется hsrpexfiltrate.py) выполняем эксфильтрацию хешей. Данный скрипт выплюнет MD5-хеши и в тот же момент преобразует их к формату Джона, что удобно. Потом эти хеши можно перебросить в отдельный файл и скормить его Джону, т.е. этот файл будет выступать в качестве входных данных для брута. Ну и с помощью ключа «—wordlist» указываем путь до словаря

in9uz@Mercy:~$ python2 hsrpexfiltrate.py hsrpwithauth.pcap in9uz@Mercy:~$ cat >> hsrpv1md5hashes in9uz@Mercy:~$ john hsrpv1md5hashes --wordlist=/usr/share/wordlists/rockyou.txt

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

В итоге нам удалось сбрутить ключ аутентификации к домену HSRP — endgame

Stage 3: Injection

В первую очередь, нам необходимо сменить MAC-адрес на виртуальный MAC-адрес ACTIVE-коммутатора. Это делается для того, чтобы в лишний раз не стриггернуть систему DAI (Dynamic ARP Inspection), ибо DAI вполне может удивиться тому, что в отношении 10.10.10.254 теперь присутствует другой MAC-адрес.

Далее, переключаем наш сетевой интерфейс в неразборчивый режим (promiscious mode) и разрешаем маршрутизацию трафика.

in9uz@Mercy:~$ sudo macchanger --mac=00:00:0C:07:AC:01 eth0 in9uz@Mercy:~$ sudo ifconfig eth0 in9uz@Mercy:~$ sudo sysctl -w net.ipv4.ip_forward=1

Теперь нужно запустить Loki, выбрать сетевой интерфейс

in9uz@Mercy:~$ sudo loki_gtk.py

Выбор интерфейса в Loki [HSRP]

После запуска инструмента, сам Loki обнаружит рассылаемые HSRP-объявления от маршрутизаторов. Вводим аутентификационный ключ MD5 (endgame), выбираем опцию «Do gratuitous ARP». Это специальная модификация ARP-кадра, являющейся по факту заглушкой, которое оповещает весь широковещательный домен о новой привязке IP-адреса с MAC-адресом. Далее, кликаем на два устройства (в состоянии Seen) и выбираем опцию Get IP.

Начало атаки [HSRP]

После этого, Loki сгенерирует кастомную инъекцию с максимальным значением приоритета 255 , что в свою очередь позволит атакующему перехватить ACTIVE-роль и встать таким образом человеком по середине (Man-in-the-Middle moment)

Строение HSRP-инъекции

Stage 4: Routing Management

После осуществеленного инжекта, нам необходимо заняться небольшим роутинг-менеджментом.

Сперва нужно удалить старый маршрут по умолчанию, идущий через 10.10.10.254 , ибо так как мы стали новым ACTIVE-маршрутизатором, мы являемся владельцем этого виртуального адреса (10.10.10.254), но при старом маршруте весь трафик замыкается на нашей ОС, что без дополнительных морок вызывает DoS в отношении легитимных хостов :))

Также нужно создать на нашем интерфейсе вторичный адрес со значением HSRP Virtual IP Address (10.10.10.254), опять же, после атаки мы являемся владельцем этого адреса.

in9uz@Mercy:~$ sudo ifconfig eth0:1 10.10.10.254 netmask 255.255.255.0

Пропишем новый маршрут по умолчанию через 10.10.10.100 (это бывший ACTIVE-роутер), но даже не смотря на то, что мы отжали у него ACTIVE-роль, он всё равно сможет выполнить маршрутизацию трафика куда нам нужно. Также можно попробовать прописать второй статический маршрут через 10.10.10.101 , с указанием специальной метрики, т.е. здесь со вторым маршрутом уже реализовывается плавающая статическая маршрутизация.

in9uz@Mercy:~$ sudo route del default in9uz@Mercy:~$ sudo route add -net 0.0.0.0 netmask 0.0.0.0 gw 10.10.10.100

Также необходимо настроить NAT (MASQUERADING), чтобы видеть ещё и исходящий трафик, кроме входящего

in9uz@Mercy:~$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

В итоге нам удалось провести MITM-атаку. Чтобы наглядно показать импакт от атаки, подключусь к FTP-серверу Papercut

Подключение к FTP-серверу [HSRP]Перехваченные креды prayer:sleeper

VRRP Hijacking

Stage 1: Information Gathering

В рамках VRRP, эти пакеты приветствия видны только от MASTER-устройства.

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

Исходя из анализа заголовков пакетов HSRP обозначим следующую информацию:

  • MASTER-устройством является маршрутизатор под адресом 10.10.10.100 , его приоритет 150
  • Аутентификация отсутствует
  • Виртуальный IP-адрес 10.10.10.254
  • Виртуальный MAC: 00:00:5e:00:01:01
  • Номер VRRP группы 1
Stage 2: Injection

Меняем MAC-адрес на тот, который относится к MASTER, неразборчивый режим и разрешаем маршрутизацию

in9uz@Mercy:~$ sudo macchanger --mac 00:00:5e:00:01:01 eth0 in9uz@Mercy:~$ sudo ifconfig eth0 promisc in9uz@Mercy:~$ sudo sysctl -w net.ipv4.ip_forward=1
in9uz@Mercy:~$ sudo loki_gtk.py

Выбор интерфейса [VRRP]

Loki задетектил VRRP-объявление. Всё тоже самое, генерируем заглушку (Gratuitous ARP) и выполняем инжект

Начало атаки на VRRP-домен

Loki выполнил инжект, можно изучить его тело (У инжекта приоритет 255 )

Stage 3: Routing Management

Всё тот же роутинг-менеджемент. Прописываем роуты, создаем вторичный адрес и настраиваем NAT (MASQUERADE)

in9uz@Mercy:~$ sudo ifconfig eth0:1 10.10.10.254 netmask 255.255.255.0 in9uz@Mercy:~$ sudo route del default in9uz@Mercy:~$ sudo route add -net 0.0.0.0 netmask 0.0.0.0 gw 10.10.10.100 in9uz@Mercy:~$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Для наглядности снова подключусь к тому FTP-серверу (Papercut), но с другими кредами (death:betrayal)

Перехваченные FTP-креды [VRRP]

GLBP Hijacking

Stage 1: Information Gathering

Видим GLBP-объявления от двух устройств. Исходя из анализа пакетов GLBP мы имеем следующую картину:

  • AVG-роутером является устройство под адресом 10.10.10.100
  • AVF-роутером является устройство под адресом 10.10.10.101
  • Аутентификация отсутствует
  • Номер группы GLBP 1
  • Виртуальный IP-адрес 10.10.10.254
  • Виртуальный MAC: 00:07.b4:00.01:01

Информация о AVG-свитчеИнформация о AVF-свитче

Stage 2: Injection

Меняем MAC-адрес на тот, который был у AVG, promiscious mode и разрешение маршрутизации

in9uz@Mercy:~$ sudo macchanger --mac=00:07.b4:00.01:01 eth0 in9uz@Mercy:~$ sudo ifconfig eth0 promisc in9uz@Mercy:~$ sudo sysctl -w net.ipv4.ip_forward=1

Запускаем Loki, выбираем интерфейс

Выбор интерфейса [GLBP]

Loki обнаружил объявления. Выполняем инжект x Gratuitous ARP

Начало атаки на GLBP-домен

Loki сгенерировал GLBP-инъекцию со значениями приоритетов и веса (Priority 255 x Weight 255 )

GLBP Priority 255 x GLBP Weight 255

Stage 3: Routing Management

Создаем вторичный адрес, прописываем роут и NAT

in9uz@Mercy:~$ sudo ifconfig eth0:1 10.10.10.254 netmask 255.255.255.0 in9uz@Mercy:~$ sudo route del default in9uz@Mercy:~$ sudo route add -net 0.0.0.0 netmask 0.0.0.0 gw 10.10.10.100 in9uz@Mercy:~$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Мы стали «человеком по середине», запустим net-creds.py, данная тулза будет дергать чувствительные данные во время анализа трафика (т.е. незашифрованный HTTP/FTP-трафик, NTLM-хэши)

in9uz@Mercy:~/FHRPNightmare/net-creds$ sudo python2 net-creds.py -i eth0

Для наглядности синицирую чтение SMB-шары от имени пользователя distance

Чтение SMB-шарыПерехваченный NTLMv2-SSP пользователя distance

Можно сбрутить этот NTLMv2-SSP , почему нет

Взломанный пароль пользователя distance

Prevention

  • Использование ACL. ACL позволяет фильтровать трафик по различным параметрам, начиная от IP-адреса источника, заканчивая по TCP/UDP портам. (в зависимости от того, какой ACL используете — стандартный или расширенный?)

Для HSRP: ACL against 224.0.0.2 or 224.0.0.102 , UDP/1985

Для VRRP: ACL against 224.0.0.18

Для GLBP: ACL against 224.0.0.102 , UDP/3222

  • Использование аутентификации. Аутентификация не позволяет неавторизованным маршрутизаторам входить в домены отказоустойчивости. Если собираешься защищать домен с помощью аутентификации, используй стойкие ключи, чтобы их было не так просто сбрутить.

Вот Cisco IOS может похвастаться наличием Key-Chain аутентификации, где может быть использовано несколько ключей, а также можно будет настроить временные промежутки, в рамках которых ключи будут приниматься и отправляться. RouterOS вот вообще имеет дикую AH-аутентификацию для VRRP, там такая соль используется — хрен сбрутишь, даже словарный пароль. Кстати говоря, Cisco IOS использует MD5-аутентификацию для FHRP, а RouterOS — AH (протокол из оперы IPSec)

  • Максимальные значения приоритетов. Из сооб­ражений безопас­ности рекомен­дует­ся на Master- или Active-мар­шру­тиза­торе выс­тавить мак­сималь­ный при­ори­тет. В таком слу­чае, если зло­умыш­ленник отпра­вит вре­донос­ный пакет с при­ори­тетом 255 , у него не вый­дет стать «глав­ным», пос­коль­ку таковой уже име­ется. Кстати говоря, для VRRP удастся выкрутить значение только 254 , ибо приоритет 255 образовывается де-факто, после того, как MASTER обслуживает IP-адрес

Outro

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

Кста­ти говоря, вот этот FHRP Hijacking может слу­жить аль­тер­нативой ARP-спу­фин­гу. В сетях AD откры­вают­ся все воз­можнос­ти для Relay-атак и сбо­ра информа­ции, так­же мож­но реали­зовать фишин­говые ата­ки и мно­гое дру­гое. Очень надеюсь, это данное моё исследование подарит пентестерам новые век­торы атак для пен­тесте­ров, а сетевые адми­нис­тра­торы обза­ведут­ся новыми кей­сами, что­бы повысить безопас­ность сво­ей сети.

  • Информационная безопасность
  • Cisco
  • Сетевые технологии
  • Сетевое оборудование

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *