Как маршрутизатор помогает минимизировать объем трафика ipv6 neighbor discovery в сети

Обновлено: 06.07.2024

Новое в IPv6-это автоконфигурация, которая является почти " мини-DHCP " - сервером, и некоторые протоколы были удалены или изменены. Точно так же, как IPv4, хосты, настроенные на IPv6, должны узнать MAC-адрес других устройств , но мы больше не используем ARP, он был заменен протоколом под названием NDP (Neighbour Discovery Protocol) .

ТЕОРЕТИЧЕСКИЕ ОСНОВЫ

Помимо изучения MAC-адресов, NDP используется для решения ряда задач:

  • Router Discovery (обнаружение маршрутизаторов) : NDP используется для изучения всех доступных маршрутизаторов IPv6 в подсети.
  • Обнаружение MAC-адресов : после того, как хост выполнил проверку DAD и использует IPv6 адрес он должен будет обнаружить MAC адреса хостов с которыми он хочет общаться.
  • DAD (обнаружение дубликатов адресов) : каждый хост IPv6 будет ждать, чтобы использовать свой адрес, если только он не знает, что ни одно другое устройство не использует тот же адрес. Этот процесс называется DAD, и NDP делает это за нас.
  • SLAAC : NDP используется, чтобы узнать, какой адрес и длину префикса должен использовать хост.

Мы рассмотрим все задачи, чтобы увидеть, как они работают. Начнем с обнаружения маршрутизатора. Когда хост настроен на IPv6, он автоматически обнаруживает маршрутизаторы в подсети.

  • RS (Router Solicitation) , который отправляется на "все маршрутизаторы ipv6" FF02::2 multicast адрес.
  • RA (Router Advertisement) отправляется маршрутизатором и включает в себя его link-local IPv6 адрес.

Когда хост отправляет запрос маршрутизатору, маршрутизатор будет отвечать на одноадресный адрес хоста. Маршрутизаторы также будут периодически отправлять рекламные объявления маршрутизаторов для всех заинтересованных сторон, они будут использовать для этого адрес FF02:: 1 "все узлы".

Большинство маршрутизаторов также будут иметь global unicast адрес, настроенный на интерфейсе, в этом случае хосты будут узнавать не только о link-local адресе, но и о префиксе, который используется в подсети.

  • NS (Neighbor Solicitation)
  • NA (Neighbor Advertisement)

Запрос соседа работает аналогично запросу ARP , он запрашивает определенный хост для своего MAC-адреса, и объявление соседа похоже на ответ ARP, поскольку оно используется для отправки MAC-адреса. В основном это выглядит так:

Host1 был настроен с IPv6-адресом 2001:1:1:1::2, который уже используется Host2. Он будет посылать запрос соседства, но поскольку host2 имеет тот же IPv6-адрес, он ответит объявлением соседа. Host1 теперь знает, что это дубликат IPv6-адреса. Эта проверка выполняется для всех одноадресных адресов, включая link-local адреса. Это происходит, когда вы настраиваете их и каждый раз, когда интерфейс находится в состоянии "up".

Последний NPD, который мы рассмотрим, - это SLAAC , которая позволяет хостам автоматически настраивать свой IPv6-адрес. Для IPv4 мы всегда использовали DHCP для автоматического назначения IP-адреса, шлюза по умолчанию и DNS-сервера нашим хостам, и эта опция все еще доступна для IPv6 (мы рассмотрим ее ниже).

DHCP прекрасная "вещь", но недостатком является то, что вам нужно установить DHCP-сервер, настроить пул с диапазонами адресов, шлюзами по умолчанию и DNS-серверами.

Когда мы используем SLAAC, наши хосты не получают IPv6-адрес от центрального сервера, но он узнает префикс, используемый в подсети, а затем создает свой собственный идентификатор интерфейса для создания уникального IPv6-адреса. Вот как работает SLAAC:

Маршрутизаторы Cisco будут использовать EUI-64 для создания идентификатора интерфейса, но некоторые операционные системы будут использовать случайное значение. Благодаря SLAAC хост будет иметь IPv6-адрес и шлюз, но один элемент все еще отсутствует. DNS-сервер. SLAAC не может помочь нам с поиском DNS-сервера, поэтому для этого шага нам все еще требуется DHCP.

DHCP для IPv6 называется DHCPv6 и поставляется в двух формах:

Мы рассмотрим DHCPv6 чуть позже, но для SLAAC нам нужно понять, что такое stateless DHCPv6 . Обычно DHCP-сервер отслеживает IP-адреса, которые были арендованы клиентами, другими словами, он должен сохранять "состояние" того, какие IP-адреса были арендованы и когда они истекают.

Сервер stateless DHCPv6 не отслеживает ничего для клиентов. Он имеет простую конфигурацию с IPv6-адресами нескольких DNS-серверов . Когда хост IPv6 запрашивает у сервера DHCPv6 IPv6-адрес DNS-сервера, он выдает этот адрес, и все.

Поэтому, когда вы используете SLAAC, вам все еще нужен stateless DHCPv6, чтобы узнать о DNS-серверах.

Теперь вы узнали все задачи, которые NPD выполняет для нас:

  • Router Discovery
  • MAC Address Discovery
  • Duplicate Address Detection
  • Stateless Address Autoconfiguration

НАСТРОЙКА НА CISCO

Давайте посмотрим на NPD на некоторых маршрутизаторах, чтобы увидеть, как он работает в реальности. Будет использоваться следующая топология для демонстрации:

Сегодня мы решили затронуть тему настройки IPv6 на коммутаторах доступа SNR. Не станем писать банальностей, вроде "IPv4-адреса заканчиваются", но вспомним Республику Беларусь, где уже около года действует закон об обязательном предоставлении абонентам IPv6-адресов. Обратимся к статистике Google, которая фиксирует рост доли IPv6 в мировом сетевом трафике с 5,5% в январе 2015 до 32% в октябре 2020. Согласитесь, не взрывной, но уверенный рост. Предоставление IPv6-адресов также может стать конкурентным преимуществом для операторов связи, это можно использовать в целях маркетинга.

IPv6 на коммутаторах доступа SNR

Статистика Google по использованию IPv6 в мировом сетевом трафике

Краткий обзор IPv6

Протокол сетевого уровня IPv6 (RFC 8200) решает не только проблему нехватки классических IP-адресов. Многие механизмы в нем пересмотрены, что-то оптимизировали, от чего-то отказались. Увеличение длины IP-адреса с 32 до 128 бит - пожалуй, наименьшее из изменений.

Ключевые отличия от IPv4

  • Полностью переработан заголовок IP-пакета.
  • Полный отказ от бродкаста в пользу мультикаста.
  • Отказ от классов сетей.
  • На смену протоколу ARP пришел Neighbor Discovery Protocol (NDP).
  • Добавлен механизм SLAAC, позволяющий получить уникальный, глобально маршрутизируемый IPv6-адрес без использования какого-либо DHCP-сервера.
  • Добавлен механизм Prefix Delegation, позволяющий CPE анонсировать префикс оператора связи, а IPv6-хосту генерировать себе на его основе адрес.
  • В силу количества IPv6-адресов NAT становится не нужен.
  • Введены новые типы сетевых адресов.
  • Вместо маски подсети используется только длина префикса.


Заголовок IPv6

Сравним заголовки IPv4 и IPv6-пакетов, используя картинки прямо из RFC:

IPv6 на коммутаторах доступа SNR

Заголовок пакета IPv4

IPv6 на коммутаторах доступа SNR

Заголовок пакета IPv6

Можно заметить, что в новой версии протокола заголовок заметно упростился за счет использования меньшего количества полей. Разработчики посчитали, что на современном оборудовании часть из них просто не нужна. Например, нет смысла считать контрольную сумму, если это уже сделано на канальном уровне и будет сделано на транспортном. Т.к. IPv6-заголовок имеет фиксированную длину 40 байт, то и в поле IHL (Internet Header Length) больше нет смысла и т.д. Добавлено совершенно новое поле ‘IPv6 Flow Label’, служащее для упрощения маршрутизации пакетов одного потока (RFC 6437).

Neighbor Discovery Protocol вместо ARP

IPv6 на коммутаторах доступа SNR

IPv6 на коммутаторах доступа SNR


Типы IPv6 адресов

  • Global Unicast Address - аналог внешнего IPv4-адреса;
  • Link-Local Unicast Address - совершенно новый тип служебных IP-адресов, служащих для взаимодействия протоколов;
  • Unique Local Addresses - аналог внутреннего IPv4-адреса.

Методы динамической конфигурации IPv6-адреса

  • Stateless Address Autoconfiguration (SLAAC).
  • Stateless DHCPv6.
  • Stateful DHCPv6.

IPv6 на коммутаторах доступа SNR

IPv6 на коммутаторах доступа SNR

IPv6 на коммутаторах доступа SNR

IPv6 на коммутаторах доступа SNR

IPv6 на коммутаторах доступа SNR

Основные настройки IPv6 на коммутаторах SNR

Разобравшись с теорией, можно переходить к практике. Рассмотрим базовые настройки IPv6 на коммутаторах доступа SNR.

Хочется отметить, что все управляемые коммутаторы SNR, от FastEthernet моделей, таких как SNR-S2985G-24TC, до гигабитных коммутаторов с 10Г аплинками ( SNR-S2989G-24TX), поддерживают одинаковый функционал и имеют одинаковые настройки в части IPv6.

Назначить IPv6-адрес управления

Назначить адрес L3-интерфейсу можно несколькими методами. Полностью указать его с длиной префикса, использовать метод EUI-64 или использовать DHCPv6-клиент. Последний способ требует предварительно внесения в конфигурацию строки ‘service dhcpv6’. Рассмотрим все три способа на трех VLAN-интерфейсах:

Задать статическую IPv6 neighbor-запись

Полностью аналогично статической ARP-записи и производится из-под VLAN-интерфейса.

Настроить DHCPv6 Relay

Security RA и его использование

Важно отметить, что механизмы защиты Security RA и SAVI являются взаимоисключающими.

SAVI и DHCPv6 Snooping

Настройка savi check binding имеет два режима. Simple mode удаляет записи из таблицы, когда порт находится в состоянии DOWN, а время аренды IPv6-адреса истекло. Probe mode дополнительно посылает NS-пакет перед этим для дополнительной проверки состояния клиента. Если NA-пакет не получен в ответ, запись удаляется.

CPS (Control Packet Snooping)

CPS работает совместно с SAVI и анализирует IPv6-пакеты на предмет префикса. Если он не соответствует тому, что задан в CPS, выдаваемый DHCPv6-сервером адрес не попадет в SAVI биндинг-таблицу. Рассмотрим порядок его настройки. Пропишем разрешенный префикс для global-unicast адреса, а затем префикс fe80::/64 под который будут подпадать все link-local адреса:

Теперь если DHCPv6-сервер во VLAN 100 отдаст на DHCP-SOLICIT-запрос адрес с отличным от 2001:db8:100:1::/64 префиксом, такой адрес не попадет в SAVI биндинг-таблицу.

ND Security

ND Security позволяет влиять на автоматическое изучение neighbor-записей и контролировать их, является полным аналогом ARP Security. Три рассматриваемые далее команды можно применять как глобально, так и из-под VLAN-интерфейса. Тогда они будут применяться только в этом VLAN. Рассмотрим пример использования ND Security. На данный момент имеем в neighbor-таблице две записи, связанные с тестовым ПК1.

IPv6 neighbour table: 2 entries

Теперь рассмотрим команду ‘ipv6 nd-security updateprotect’. Как понятно из названия, она блокирует обновление MAC-адресов в neighbor-записях. Если после ее применения изменить MAC-адрес на тестовом ПК, то его запись в neighbor-таблице не обновится.

На данный момент обе записи в таблице динамические. Сконвертируем их в статические командой ‘ipv6 nd-security convert’. Записи стали статическими и попали в конфигурацию:

IPv6 neighbour table: 2 entries

Наконец, запретим автоматическое изучение новых neighbor-записей командой ipv6 nd-security learnprotect‘. ’

Заключение

Подводя итог, можно сказать, что мы поговорили про основные особенности IPv6, принцип работы и посмотрели на самые яркие отличия от IPv4. Рассмотрели типы адресов и все способы их выдачи. На этом мы, надеюсь, не заканчиваем знакомиться с протоколом IP шестой версии. Если статья вызовет достаточный интерес, то можно ждать продолжения - рассказ про работу с опциями 18 (interface-id), 37 (remote-id) и 38 (subscriber-id). А также детальное рассмотрение DHCPv6-снупинга и релея на коммутаторах доступа SNR.
По всем вопросам вы можете обратиться к вашему менеджеру. Напоминаем, что у нас есть Telegram-канал, а также подробная база знаний.

Протокол Обнаружения Соседей (англ. Neighbor Discovery Protocol, NDP ) — протокол из набора Internet Protocol Suite, используемый совместно с IPv6. Он работает на уровне слоя Интернет Модели Интернета и ответственен за автонастройку адреса конечных точек сети, обнаружения других узлов на линии, обнаружения адреса других узлов на уровне канала связи, обнаружение конфликта адресов, поиск доступных путей и DNS-серверов, обнаружения подсетей и поддержки доступности информации о путях к другим активным соседним узлам.

Этот протокол устанавливает пять различных типов пакета ICMPv6 для выполнения функций IPv6 сходных с ARP, ICMP, Router Discovery и Router Redirect протоколов для IPv4. Тем не менее, он обеспечивает множество улучшений через взаимозаменяющиеся части IPv4. Например, он включает NUD, который повышает надежность доставки пакетов в присутствии проблемных маршрутизаторов или подключений, или непостоянных узлов.

Технические детали.

На рисунке 2.14 показан процесс обнаружения маршрутизатора.


Рис. 2.14. Процесс обнаружения маршрутизатора

NDP устанавливает следующие пять типов пакета ICMPv6:

  1. Запрос на доступность маршрутизаторов
  2. Ответ маршрутизатора
  3. Запрос доступных соседей
  4. Ответ соседа
  5. Перенаправление
  • Обнаружение маршрутизатора: узел может разместить маршрутизатор, находящийся на подключенной линии.
  • Обнаружение подсети: узлы могут обнаруживать работающие подсети для подключенных линий.
  • Обнаружение параметров: узлы могут запрашивать параметры линии (например, размер MTU).
  • Автоматическая настройка адреса: конфигурирование адресов сетевых интерфейсов.
  • Разрешение адреса: работа между IP-адресом и адресами уровня канала связи.
  • Обнаружение следующего перехода: узлы могут находить следующий на пути пакета маршрутизатор.
  • Обнаружение недоступности соседа(NUD): определение того, что сосед более недоступен на линии.
  • Обнаружение конфликта адресов(DAD): узлы сами могут определять, занят ли адрес.
  • Перенаправление: маршрутизатор может информировать узел о других наилучших маршрутизаторах для начала пути пакета.
  • Рекурсивный DNS-сервер(RDNSS) и список поиска DNS(DNSSL) назначается через параметры отклика маршрутизатора(RA). Это новая функция, и поддерживается не всем программным обеспечением.

Изменения в протоколе IPv6 Neighbor Discovery


Этот формат выражает следующие изменения по сравнению с форматом, первоначально специфицированном для протокола Neighbor Discovery:

2. Модифицированный формат опции Prefix Information

Протокол мобильного IPv6 требует знания глобального адреса маршрутизатора при построении списка домашних агентов как части механизма динамического определения адресов домашних агентов.


Рис. 2.16. Формат опции Prefix Information

Этот формат выражает следующие изменения по сравнению с форматом, первоначально специфицированным для протокола Neighbor Discovery:

  • Router Address (R) (адрес маршрутизатора)
  • 1-битовый флаг «адрес маршрутизатора». Если установлен, указывает на то, что поле Prefix содержит полный IP-адрес, присвоенный посылающему маршрутизатору. Указанный префикс представляет собой первые биты поля Prefix, определяемые полем Prefix Length. IP-адрес маршрутизатора имеет ту же самую область действия и подчиняется тем же самым значениям времени жизни, что и объявляемый префикс. Такое использование поля Prefix соответствует его использованию при объявлении самого префикса, поскольку объявление префикса использует только первые биты. Таким образом, интерпретация этого флагового бита не зависит от обработки, которая требуется для обработки флаговых битов On-Link (L) и Autonomous Address-Configuration (A).
  • Reserved1 (зарезервировано1)
  • Сокращенное с 6 до 5 бит поле, чтобы учесть добавление указанного выше бита.

Кроме того, следующее требование может помочь мобильным узлам при определении перемещений. Кроме изменений префиксов на линке, маршрутизаторы, которые посылают несколько объявлений Router Advertisement с установленным в некоторых включенных опциях Prefix Information битом Router Address (R), должны (SHOULD) представить по крайней мере одну опцию и адрес маршрутизатора, который остается тем же самым во всех объявлениях.

3. Формат новой опции Advertisement Interval


Рис. 2.17. Формат опции Advertisement Interval

Это поле не используется. Оно должно (MUST) инициализироваться в ноль отправителем и должно (MUST) игнорироваться получателем.

  • Advertisement Interval (период объявлений)

4. Формат новой опции Home Agent Information

Протокол мобильного IPv6 определяет новую опцию Home Agent Information (информация домашнего агента), которая используется в объявлениях маршрутизатора, посылаемых домашним агентом для объявления информации, специфической для функционирования данного маршрутизатора в качестве домашнего агента. На рисунке 2.18 показан формат опции Home Agent Information.


Рис. 2.18. Ф ормат опции Home Agent Information

Это поле не используется. Оно должно (MUST) инициализироваться в ноль отправителем и должно (MUST) игнорироваться получателем.

  • Home Agent Preference (приоритет домашнего агента)

Посылающий домашний агент может (MAY) динамически устанавливать это значение, например, базируясь на количестве мобильных узлов, которые он в текущий момент времени обслуживает, или на своих ресурсах, оставшихся для обслуживания дополнительных мобильных узлов; подобные динамические установки выходят за рамки данного документа. Однако любая подобная динамическая установка приоритета домашнего агента должна (MUST) устанавливать приоритет соответствующе, относительно подразумеваемого нулевого значения приоритета домашнего агента, который может использоваться некоторыми домашними агентами на данном линке (т.е. домашний агент, не включающий опцию Home Agent Information в свои объявления маршрутизатора, будет рассматриваться как имеющий нулевое значение приоритета).

  • Home Agent Lifetime (время жизни домашнего агента)

Домашние агенты могут (MAY) включать эту опцию в свои объявления маршрутизатора. Данная опция не должна (MUST NOT) включаться в объявление маршрутизатора, в котором не установлен бит Home Agent (H). Если данная опция не включена в объявление маршрутизатора, в котором бит Home Agent (H) установлен, то время жизни для данного домашнего агента должно (MUST) рассматриваться равным времени жизни маршрутизатора в объявлении маршрутизатора. Если вместо одного незапрошенного группового объявления большего размера посылается несколько объявлений, то эти все множественные объявления с установленным битом Router Address (R) должны (MUST) включать эту опцию с одним и тем же содержимым, в противном случае эта опция должна (MUST) опускаться во всех объявлениях.

«Маршрутизаторы формируют объявления маршрутизатора достаточно часто, чтобы хосты узнали об их присутствии в течение нескольких минут, но не настолько часто, чтобы полагаться на отсутствие объявлений для определения неисправности маршрутизатора; определение неисправности обеспечивает отдельный алгоритм Neighbor Unreachability Detection (алгоритм определения недостижимости соседей)».

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

Один из методов, который может обеспечить быстрое определение перемещений, заключается в том, чтобы увеличить скорость посылки незапрошенных объявлений маршрутизатора. Протокол мобильного IPv6 смягчает это ограничение так, чтобы маршрутизаторы могли (MAY) чаще посылать незапрошенные групповые объявления. Этот метод может применяться там, где предполагается предоставление маршрутизатором услуг посещающим мобильным узлам (т.е. беспроводные сетевые интерфейсы), или там, где он служит домашним агентом одному или нескольким мобильным узлам (которые могут вернуться домой и должны услышать его объявления).

Машрутизаторы, поддерживающие мобильность, должны (SHOULD) иметь возможность конфигурирования с меньшими значениями MinRtrAdvInterval и MaxRtrAdvInterval, чтобы разрешить более частую посылку незапрошенных групповых объявлений. Допустимыми минимальными значениями являются:

  • MinRtrAdvInterval 0.03 секунды
  • MaxRtrAdvInterval 0.07 секунды

В случае, когда используются минимальные периоды и задержки, среднее время между незапрошенными групповыми объявлениями маршрутизатора составляют 50 мсек. Использование этих модифицированных ограничений должно быть (MUST) конфигурируемым. Системы, в которых эти значения доступны, не должны (MUST NOT) по умолчанию переходить на них, а должны (SHOULD) по умолчанию использовать значения, определенные в RFC 2461. Для каждого сетевого интерфейса при конфигурировании этих ограничений должны (SHOULD) приниматься во внимание знания типа сетевого интерфейса и операционной среды. Это важно для некоторых беспроводных линков, в которых увеличение частоты групповых сигналов может приводить к значительным накладным расходам. Маршрутизаторы должны (SHOULD) придерживаться периодов, определенных в RFC 2461, если эти накладные расходы могут привести к деградации услуг.

Дополнительно, возможные малые значения MaxRtrAdvInterval могут в некоторых мобильных узлах создавать некоторые проблемы с определением перемещений. Чтобы гарантировать, что это не проблема, маршрутизаторы должны (SHOULD) добавлять 20 миллисекунд к любым периодам объявлений, посылаемых в объявлениях маршрутизатора, которые имеют значение менее 200 миллисекунд, чтобы учесть дисперсность планирования как на мобильном узле, так и на маршрутизаторе.

Заметим, что групповые объявления маршрутизатора в конкретных беспроводных сетях с ограниченной пропускной способностью требуются не всегда. Определение мобильности или изменения линка в таких сетях может быть сделано на более низких уровнях. Объявления маршрутизатора в таких сетях должны (SHOULD) посылаться только в случае запроса. В таких сетях должна (SHOULD) существовать возможность запрещения выдачи незапрошенных групповых объявлений маршрутизатора на конкретных интерфейсах. В этом случае значения MinRtrAdvInterval и MaxRtrAdvInterval могут быть установлены достаточно большими.

Домашние агенты должны (MUST) включать опцию Source Link-Layer Address во все объявления маршрутизатора, которые они посылают. Это упрощает процесс возвращения домой.

Заметим, что в соответствии с RFC 2461, по умолчанию значение AdvDefault-Lifetime базируется на значении MaxRtrAdvInterval. Значение AdvDefaultLifetime используется в поле Router Lifetime объявлений маршрутизатора. Поскольку значение этого поля выражается в секундах, малое значение MaxRtrAdvInterval может привести к нулевому значению этого поля. Чтобы этого избежать, маршрутизаторы должны (SHOULD) сохранять значение AdvDefaultLifetime равным по крайней мере одной секунде, даже если использование значения MaxRtrAdvInterval приведет к меньшему значению.

Эксплуатация IPv6 для MITM атак

В данной статье мы технически разберем подобный вектор атаки и, в ходе реализации, сделаем некоторые выводы об особенностях работы протокола IPv6 в различных ОС.

Введение

Разговоров о IPv6 и его использовании в корпоративных сетях вместо почти иссякшего IPv4 велось и ведется очень много. Согласно данным, представленным региональным регистратором RIPE Network Coordination Centre (RIPE NCC) в Восточной Европе и Средней Азии на ежегодной конференции ENOG 16 (ENOG – евразийская экспертная группа специалистов), доля IPv6 трафика в России – 3,45%, в то время как в прошлом году он составлял всего 1%.

На сегодняшний день мало кто считается с IPv6 протоколом и задумывается о реализации механизмов защиты на своём сетевом оборудовании. Но стоит отметить, что при наличии должного функционала, реализовать, скажем, одну из наиболее популярных MITM атак в существующей IPv4 сетевой инфраструктуре не представлятся такой уж и непреодолимой задачей.

В данной статье мы технически разберем подобный вектор атаки и, в ходе реализации, сделаем некоторые выводы об особенностях работы протокола IPv6 в различных ОС.

Немного теории

Перед тем, как описывать вектор атаки, разберем основные аспекты работы протокола IPv6.

Основным протоколом в IPv6 является Network Discovery Protocol (NDP), являющийся аналогом ARP в IPv4, который при помощи протокола ICMPv6 осуществляет свою работу. При помощи данного протокола узлы (хосты и маршрутизаторы) определяют linklayer (канального уровня) адреса соседних узлов. Также, хосты используют NDP для поиска соседствующих маршрутизаторов в пределах одного канала, которые готовы будут транслировать пакеты от их имени. В завершении отметим, что узлы используют данный протокол еще и для постоянного поддержания актуальности таблицы соседних, доступных на текущий момент времени, узлов и их канального адреса. Для реализации вышеописанных механизмов, узлы используют определенные многоадресные группы, некоторые из которых будут описаны в процессе реализации вектора атаки.

Протокол NDP определяет 5 типов ICMPv6 пакетов:

Router Solicitation. Когда интерфейс переходит в активное состояние, хосты могут посылать данный тип пакетов, в котором запрашивают у маршрутизаторов отсылку пакетов «Router Advertisement» со всей необходимой информацией о подсети.

Neighbor Solicitation. Отправляется хостом либо для определения соседних хостов, находящихся в одноранговой подсети, либо для проверки текущей доступности хоста, если ранее таковой был обнаружен.

Redirect. Используется маршрутизаторами для информирования хостов о лучшем маршруте для пересылки пакетов.

Существует 4 способа конфигурации адресации хоста в IPv6:
  • Статическая конфигурация. Подобно IPv4, в настройках сетевого интерфейса указывается адрес IPv6 и его перфикс, а также маршрут по умолчанию и прочие параметры;
  • Stateless Auto Address Configuration (SLAAC) – автоматическая настройка без сохранения состояния. Параметры подсети (префикс и маршрут поумолчанию) предоставляет соседний маршрутизатор при помощи пакетов «Router Advertisement»;
  • Stateful DHCPv6 – аналог DHCPv4;
  • Stateless DHCPv6 – смесь SLAAC и DHCPv6. В данном случае хосты конфигурируют адрес и маршрут по умолчанию при помощи SLAAC, а при помощи DHCPv6 получают дополнительную информацию (например, DNS).

Для начала, опишем среду, в которой будут проводиться тесты. Ниже представлена схема тестовой среды (Рис. 1).

_1.jpg


Рис. 1. Схема тестовой среды

Описание атаки

Для воспроизведения SLAAC-атаки нам потребуется следующий инструментарий:

«Evil FOCA» – ПО с открытым исходным кодом для пентестеров и аудиторов безопасности, целью которого является проверка безопасности в сетях передачи данных IPv4/IPv6. Приложение поддерживает только линейку ОС Windows, начиная с версии WindowsXP.

Конфигурация DNS64 + NAT64, позволяющая обрабатывать DNSv6 запросы и отправлять через IPv4 подсеть IPv6 пакеты. Для DNS64 была выбрана утилита Totd (DNS прокси), а для NAT64 – TAYGA.

Фиктивный DNS сервер. В данном случае выбор пал на Windows Server 2012 R2.

SLAAC-атаку будем тестировать на следующих ОС: Windows 7, Windows 10, CentOS 7, Ubuntu 18.04.

Для того, чтобы удобнее было разбираться в адресах хостов, существующих в рамках стенда, отразим их в таблице (Таблица 1).

Перед тестированием, необходимо исследовать подсеть на наличие в ней существующих хостов с помощью ПО Evil FOCA (Рис. 2).

_1 (1).jpg


Таблица 1. Адресация хостов

_2.jpg



Рис. 2. Интерфейс Evil FOCA

При запуске, приложение запускает ping по адресам FF02::1 и FF02::2. Согласно RFC4291, FF02::1 адрес принадлежит к группе многоадресной рассылки, адресаты которой являются все хосты в link-local подсети, а FF02::2 – адрес многоадресной рассылки, принадлежащей маршрутизаторам. Ниже представлен скриншот Wireshark, запущенного на одном из соседних хостов (Рис. 3).


_3.jpg

Рис. 3. Окно программы Evil FOCA

Далее, нам необходимо выбрать все те хосты, на которых мы собираемся сконфигурировать SLAAC + Stateless DHCPv6. Для этого, во вкладке «MITM IPv6» -> «SLAAC» в строке напротив надписи «Target Prefix (IPv6)» указываем желаемый префикс подсети. Для примера, укажем префикс «2000:bad:ffff:ffff::». Также, данный инструмент позволяет выбрать конкретные хосты, которым будут персонально рассылаться пакеты RA (Router Advertisement). Воспользуемся этой возможностью и укажем наши атакуемые хосты. Помимо этого, во вкладке DHCPv6 укажем необходимый нам сторонний DNS сервер, на который и будут отсылаться запросы пользователей (в нашем случае, этим адресом будет 2000:bad:ffff:ffff::2).

Стоит отметить, что инициировать процедуру запроса дополнительной информации по DHCPv6 (другими словами, Stateless DHCPv6) хост может по нескольким причинам, описанных в RFC3315:

_4.jpg



Рис. 4. Финальная конфигурация Evil FOCA. SLAAC

_5.jpg




Рис. 5. Финальная конфигурация Evil FOCA. DHCPv6

После запуска отправки RA + DHCPv6 Stateless на Evil FOCA, мы можем наблюдать следующую картину в настройках на тестируемых хостах (Рис. 6 – Рис. 9).

_6.jpg

Рис. 6. Конфигурация сетевого интерфейса на Windows 7

_7.jpg

Рис. 7. Конфигурация сетевого интерфейса на Windows 10

8.jpg

Рис. 8. Конфигурация сетевого интерфейса на Ubuntu


9.jpg

Рис. 9. Конфигурация сетевого интерфейса на CentOS

Теперь, для того, чтобы у нашего DNS сервера была возможность отвечать на запросы хостов и перенаправлять их на нужный нам DNS сервер, сконфигурируем сервер DNS64+NAT64. Конфигурация утилит TAYGA и Totd приведена в виде скриншотов (Рис. 10).

10.jpg


Рис. 10. Конфигурация утилит для DNS64 и NAT64

На примере одного из атакуемых хостов продемонстрируем весь цикл атаки:

Рис. 11. Результат разрешения доменного имени


_12.jpg

Рис. 12. Перенаправление пакета на хост DNS64 + NAT 64

13.jpg

Рис. 13. Пакет перенаправляется на 2000:bad:ffff:ffff::2

Заключение

Как было показано выше, использовать интерфейс IPv6 имеющийся сейчас в каждой ОС в качестве вектора для развития атаки не составляет особого труда, обеспечивая при этом желаемый результат. Учитывая, что все повсеместно продолжают использовать IPv4 и о IPv6 даже не задумываются, отбрасывая всякие намёки на него словами – «У нас его нет», данный протокол следует рассматривать как дополнительный не контролируемый канал в сети каждой организации и на рабочей станции каждого пользователя.

Как минимум стоит проверить действительно ли отключены возможности работы посредством IPv6 на рабочих станциях и применены настройки, обеспечивающие его безопасность на сетевом оборудовании и средствах защиты.

Читайте также: