Настольная книга компьютерного исследователя


Некоторые интересные мысли по поводу VRRP протокола

 Представим что у нас есть некоторая сетка, прикрученная к инету, весь траффик идет через роутер. В результате какой-нибудь кульхацкерской атаки или из-за кривых рук админа роутер падает. Пользователи начинают отсасывать на все то время, пока рутер в дауне.Предположим что админ не дурак, а босс у него не жмот и таких роутеров у него два, ситуация проще но все равно юзеря будут отсасывать на время перенастройки роутинга на другом роутере. А теперь представим что это в результате падения роутеров весь роутинг настраивается сам… И это волшебная палка называется VRRP-Virtual Routing Redundancy Proto — как переводится сами разберетесь.

 Суть этого протокола в следующем:

 1) Создаются виртуальные рутеры, каждый из которых имеет уникальный VRID и IP-адрес

 2) из VRRP-рутеров выбирается мастер, все остальные становятся бекапными

 3) Мастер передает информацию из одной ipсети в другую,  слейвы следят за состоянием  главного

4) При выходе из строя мастера, один из слейвов присваетвает IP адрес мастера и начинает обрабатывать траффик (Я специально не буду заострять внимание на подробности, кого заинтересует-rfc и вперед)

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

 Cтруктура пакета:

0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Версия| Тип  | ID виртуального роутера|Приоритет|Число IP-адресов|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Тип авторизации |Интервал обьявлений  |  Контрольная сумма       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         IP Адрес (1)                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            .                                    |
|                            .                                    |
|                            .                                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         IP Address (n)                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Данные авторизации   (1)                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Данные авторизации   (2)                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

[~/vrrp/tcpdump-3.6.2] # ./tcpdump -X -vvv ip proto 112

tcpdump: listening on fxp0

01:37:37.717750 zaebis.ru > VRRP.MCAST.NET: vrrp zaebis.ru > VRRP.MCAST.NET: VRRPv2-advertise 20: vrid=3 prio=40 authtype=1 intvl=3 addrs: zaebis.ru auth secret (ttl 255, id 34402, len 0)

0×0000   4500 0028 8662 0000 ff70 6095 d418 2043        E..(.b…p`….C

0×0010   e000 0012 2103 2801 0103 8552 d418 2041        ….!.(….R…A

0×0020   7365 6372 6574 0000 0000 90d6 15e6             secret……..

01:37:38.226696 zaebis.ru > VRRP.MCAST.NET: vrrp zaebis.ru > VRRP.MCAST.NET: VRRPv2-advertise 20: vrid=9 prio=40 authtype=1 intvl=3 addrs: zaebca.ru auth secret (ttl 255, id 34403, len 40)
0×0000   4500 0028 8663 0000 ff70 6094 d418 2043        E..(.c…p`….C
0×0010   e000 0012 2109 2801 0103 788c d418 2d01        ….!.(…x…-.
0×0020   7365 6372 6574 0000 0000 1c29 6f46             secret…..)oF

01:37:40.728032 zaebis.ru > VRRP.MCAST.NET: vrrp zaebis.ru > VRRP.MCAST.NET: VRRPv2-advertise 20: vrid=3 prio=40 authtype=1 intvl=3 addrs: zaebis.ru auth secret (ttl 255, id 34408, len 40)

0×0000   4500 0028 8668 0000 ff70 608f d418 2043        E..(.h…p`….C

0×0010   e000 0012 2103 2801 0103 8552 d418 2041        ….!.(….R…A

0×0020   7365 6372 6574 0000 0000 ab49 ac64             secret…..I.d

01:37:41.237433 zaebis.ru > VRRP.MCAST.NET: vrrp zaebis.ru > VRRP.MCAST.NET: VRRPv2-advertise 20: vrid=9 prio=40 authtype=1 intvl=3 addrs: zaebca auth secret (ttl 255, id 34410, len 40)

0×0000   4500 0028 866a 0000 ff70 608d d418 2043        E..(.j…p`….C

0×0010   e000 0012 2109 2801 0103 788c d418 2d01        ….!.(…x…-.

0×0020   7365 6372 6574 0000 0000 34b0 9f8d             secret….4…

Рассмотрим пакетики
01:19:54 Время посылки пакета
zaebis.ru хост с которого идет бкаст
VRRP.MCAST.NET — зарезервированный хост на который шлются широковещательные vrrp пакеты (224.0.0.8)
VRRPv2 версия протокола vrrp
vrid=9 Идентификатор виртуального роутера
prio=40 приоритет роутера пославшего пакет, диапазон от 1-254,чем больше номер тем выше приоритет.
authtype=1 Тип авторизации. 0 — без авторизации; 1 — plain text; 2 -  Через заголовок IP
intvl=3 интервал обьявлений в секундах по дефолту — 0
zaebca — хост или айпи-адрес(а) который(е) прилинкованы к интерфейсу
ttl 255 — TTL, равен 255 всегда по дефолту. Более того если в пакете указано другое значение ttl, то пакет дискардится рутером и отбрасывается.

Теперь разберемся что мы отсниффали:
vrid=3,vrid=9 — весьма интересно…это говорит как минимум о том что есть как
минимум два физических рутера,а в перспективе около 5.Также возможна ситуация
когда применяется схема с распределением нагрузки.

0×0020   7365 6372 6574 0000 0000 34b0 9f8d             secret….4…

Смотрим в Тип авторизации — tcpdump услужливо подскзывает — 1, то есть plain text. Magik word здесь — secret..

Существует несколько ситуаций при которых бекуп становится мастером:

 ..)Мастер перестает рассылать бикастные vrrp пакеты. В нашем случае пакеты шлются через каждые 3 секунды. Что можно придумать? Если имеется под контролем тачечка, которая в свою очередь является бекупом, то банальный дос мастера, чуть больше 3 секунд, и все… Канал перехвачен все танцуют… Более сложная ситуация когда бекупов несколько, и тот который под контролем — самый последний. Для тех кто любит вешать сетки есть предложение
досить рутеры по очереди ;D Рано или поздно все будет гуд,  или админ просечет и выгонит из сетки.

Теперь немного более интересный вариант, а что если попробовать назначить бекупный рутер мастером самому? То есть послать пакетик от имени мастера, и назначить свой слейв мастером. Лезем в rfc:

5.3.4  Priority

The priority field specifies the sending VRRP router’s priority for the virtual router.  Higher values equal higher priority.  This field is an 8 bit unsigned integer field.

The priority value for the VRRP router that owns the IP address(es) associated with the virtual router MUST be 255 (decimal).

VRRP routers backing up a virtual router MUST use priority values between 1-254 (decimal).  The default priority value for VRRP routers backing up a virtual router is 100 (decimal).

The priority value zero (0) has special meaning indicating that the current Master has stopped participating in VRRP.  This is used to trigger Backup routers to quickly transition to Master without having to wait for the current Master to timeout.

Последний абзац… То есть мы можем послать пакетик в поле Priority котором будет стоять 0, и самим назначить бекуп мастером… Интересная идея? Не так ли?

В принципе долго ходить не надо было — я пошел на freebsd.org и скачал себе vrrpd ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-stable/All/freevrrpd-1.0.tbz

Скачиваем, компилим, юзаем. Что нам нужно для того чтобы послать правильный пакет? Нам нужно заполнить ВСЕ (это важно, а то пакет будет дискардится) поля пакета данными (структура выше). И еще нам нужно знать password — в нашем случае это secret.

Дальнейшие этапы я описывать не буду, слишком все просто, ставьте луникс или бсд, качайте vrrpd, tcpdump и вперед.

PS. Еще раз повторяю что все поля пакета должны быть не пустыми, а заполнены согласно rfc, иначе пакет будет отвергатся.

PPS. vrrp — очень интересный протокол, там есть где развернутся.

PPPS Что бы вы не думали, что vrrp -динозавр, который никто не использует,  я вам скажу что он используется во многих сетках прилинкованных прям на m9 ;D

http://www.ietf.org/rfc/rfc2338.txt?number=2338-rfc тут.



©2013 Журнал Хакера Entries (RSS) and Comments (RSS)