IPv6: некоторые нюансы безопасности

Статья подготовлена Александром Колесниковым в рамках набора на новый поток курса «Network engineer».


IPv6 — протокол, который используют для адресации в современных сетях. В статье рассмотрим несколько сценариев использования его функций, приводящих к эсплуатации уязвимостей.

IPv6

Протокол имеет достаточно сложную структуру и гибкие возможности. Его полное описание можно найти в соответствующем RFC 8200. Среди особенностей, которые нас будут интересовать:

  • типы адресов: одноадресные (Unicast), групповые (Anycast) и многоадресные (Multicast).

  • протокол интегрирован в операционные системы

  • использует специальные пакеты (джамбограммы), которые могут передавать 4 Гб

Обработка джамбограмм

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

  • CVE-2021-24086

  • CVE-2020-16898

  • CVE-2021-31379

  • CVE-2021-1387

И это далеко не полный список, так как были взяты самые популярные програмные и аппаратные решения. К чему эти уязвимости могут привести? Во всех приведенных выше примерах это DDoS. Операционные системы уходят в исключительные состояния — bsod, kernel panic, а устройства перезапускаются или частично выходят из строя.

В чем же основные проблемы? Практически всегда уязвимости заключаются в том, что алгоритмы ПО для обработки сетевого трафика не ожидают использования механизмов фрагментации и передачи большого количества данных.

Небольшой пример из списка выше — CVE-2021-24086. Согласно вот этому репозиторию, проблема заключается в обработке джамбограмм.

Если обратиться к RFC 8200, можно найти описание специальных полей протокола IPv6 — Extension Headers:

Из картинки видно, что все заголовки идут друг за другом в виде ленты. Каждый заголовок может описывать, какой заголовок будет следующим. И вроде бы это все особенности, которые есть в протоколе, но если прочесть далее, то можно обнаружить, что существуют особенные данные, которые можно добалять вместе с Extension Headers. Речь идет о Padding, которые будут использоваться совместно. Обращаясь к тому же репозиторию с описанием уязвимости, можно найти скрипт, который используется для подтверждения наличия уязвимости:

... reassembled_pkt = IPv6ExtHdrDestOpt(options = [ PadN(optdata=('a'*0xff)), PadN(optdata=('b'*0xff)), PadN(optdata=('c'*0xff)), PadN(optdata=('d'*0xff)), PadN(optdata=('e'*0xff)), PadN(optdata=('f'*0xff)), PadN(optdata=('0'*0xff)), ]) \ / IPv6ExtHdrDestOpt(options = [ PadN(optdata=('a'*0xff)), PadN(optdata=('b'*0xff)), PadN(optdata=('c'*0xff)), PadN(optdata=('d'*0xff)), PadN(optdata=('e'*0xff)), PadN(optdata=('f'*0xff)), PadN(optdata=('0'*0xff)), ]) \ / IPv6ExtHdrDestOpt(options = [ PadN(optdata=('a'*0xff)), PadN(optdata=('b'*0xff)), PadN(optdata=('c'*0xff)), PadN(optdata=('d'*0xff)), PadN(optdata=('e'*0xff)), PadN(optdata=('f'*0xff)), PadN(optdata=('0'*0xff)),
...

Приведенный выше фрагмент пакета как раз содержит данные, которые перемежаются Ext Headers и данными для выравнивания. Данный вид структуры вряд ли будет использоваться для работы с данными, но он все еще возможен согласно правилам протокола.

IPv6 scanning

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

Address

Description

ff02::1

All nodes on the local network segment

ff02::2

All routers on the local network segment

ff02::5

OSPFv3 All SPF routers

ff02::6

OSPFv3 All DR routers

ff02::8

IS-IS for IPv6 routers

ff02::9

RIP routers

ff02::a

EIGRP routers

ff02::d

PIM routers

ff02::16

MLDv2 reports

ff02::1:2

All DHCP servers and relay agents on the local network segment

ff02::1:3

All LLMNR hosts on the local network segment

ff05::1:3

All DHCP servers on the local network site

ff0x::c

Simple Service Discovery Protocol

ff0x::fb

Multicast DNS

ff0x::101

Network Time Protocol

ff0x::108

Network Information Service

ff0x::181

Precision Time Protocol (PTP) version 2 messages except peer delay measurement

ff02::6b

Precision Time Protocol (PTP) version 2 peer delay measurement messages

ff0x::114

Experimental

mitm6

В любой операционной системе существует 2 вида интерфейсов с IPv4 и IPv6, если не устанавливается настройка отдельно, то приоритезация выставлена таким образом, что IPv6 будет использоваться в первую очередь.

Самый популярный инструмент для компрометации конфигурации по умолчанию — mitm6. Инструмент, используя функции IPv6 протокола, меняет данные, которые относятся к конфигурации DNS серверов в операционных системах. Поэтому mitm6 может быть использован для создания условий для Man in The Middle атак в сетях с наличием IPv6.

Вывод

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


Приглашаем всех желающих на Demo day курса «Network engineer». На этой встрече будет возможность познакомиться с преподавателем, узнать подробнее о программе и формате обучения, задать все интересующие вопросы. Регистрация на мероприятие здесь.

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