Статья подготовлена Александром Колесниковым в рамках набора на новый поток курса "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". На этой встрече будет возможность познакомиться с преподавателем, узнать подробнее о программе и формате обучения, задать все интересующие вопросы. Регистрация на мероприятие здесь.