Пользователь
46,5
рейтинг
19 декабря 2014 в 01:18

Разработка → IPv6 SLAAC Attack

image

Прочитал недавно статью «IPv6 под прицелом» и решил написать более подробно об атаке SLAAC (SLAAC Attack), т.к. эту атаку я уже давно в голове держу, развернутого материала на русском не нашел, да и самому интересно ее было повторить.

Суть атаки


В чем суть атаки? Во-первых, она очень простая и надежная, т.к. использует стандартные технологии и инструменты ОС. По сути, вы просто становитесь единственным IPv6-маршрутизатором в сети и раздаете клиентам IPv6-подсеть, из которой клиенты берут себе адреса либо автоматически генерируя их (SLAAC), либо спрашивая у вашего же DHCPv6-сервера. Напомню, что IPv6 включен по умолчанию во всех современных десктопных, мобильных и серверных ОС, имеет приоритет над IPv4 (кроме некоторых случаев), адрес IPv6, в отличие от IPv4, может быть получен в любой момент, а не только в момент совершения подключения, и крупные веб-сайты уже давно доступны через IPv6. Атака работает как в проводных сетях, так и в беспроводных. Не все свитчи, даже современные, поддерживают фильтрацию Router Advertisement, и, как я полагаю, не все включают эту функцию, даже если она поддерживается свитчем, полагая, что раз в сети нет IPv6, то и фильтровать ничего не нужно. К слову, на данный момент, фильтр Router Advertisement можно обойти на всех свитчах, использовав недостатки реализации.

Я смог придумать две реализации атаки:

Реализация №1


С помощью этого способа, вы сможете перехватывать только реальный IPv6-трафик к хостам, которые имеют AAAA-запись. Вам понадобится IPv6-подсеть длиной /64 и какой-либо софт для Router Advertisement, я использовал dnsmasq. IPv6-подсеть 6to4 не подойдет, т.к. все 6to4-адреса имеют приоритет ниже, чем IPv4, так что нужно использовать туннельный брокер. Клиентам будем раздавать только сам диапазон адресов, без DNS, и не используя DHCPv6.

Демон dnsmasq умеет брать подсеть прямо с интерфейса, для этого достаточно указать в конфигурационном файле следующую строку:
dhcp-range=::, constructor:wlp3s0, ra-only
Где wlp3s0 — сетевой интерфейс, в моем случае, беспроводной. Устанавливаем глобально маршрутизируемую подсеть 2001:470::/64 на интерфейс, запускаем dnsmasq, смотрим в wireshark:
image

Все компьютеры в сети сразу же назначили себе IPv6-адрес и установили маршрут по умолчанию:
 % ip -6 r
2001:470:abcd::/64 dev enp4s0  proto kernel  metric 256  expires 3542sec
fe80::/64 dev enp4s0  proto kernel  metric 256 
default via fe80::223:15ff:fe5b:240c dev enp4s0  proto ra  metric 1024  expires 1781sec

Не забудьте включить маршрутизацию!
# sysctl net.ipv6.conf.all.forwarding=1

Недостаток этой реализации в том, что через ваш маршрутизатор пойдет только IPv6-трафик. Опять же, вероятнее всего, IPv4-адрес вашего компьютера будет за NAT, а значит получить IPv6-подсеть может быть не так-то просто, т.к. самый популярный протокол туннелирования — SIT — не работает за NAT. Нужно использовать либо туннелирование по протоколу AYIYA, который поддерживается у меньшинства туннельных брокеров, либо придумывать свои схемы проброса. Атака может быть замечена, если атакуемый использует какой-либо сайт с привязкой по IP. Зато, эта атака технически очень простая и применить ее можно буквально за минуту.

Реализация №2


Что же делать, если у необходимого нам хоста нет IPv6-адреса, а нам так хочется совершить незаметную MITM-атаку? Есть замечательный выход из этой ситуации — NAT64+DNS64. NAT64 позволяет вам сделать отображение всего диапазона IPv4 в /96-диапазон адресов IPv6, а DNS64 сможет отдавать такие адреса клиентам.
Под Linux существует три NAT64-демона: TAYGA (userspace) и Ecdysis (kernelspace), Jool (kernelspace), а поддержка DNS64 есть в Bind9, Unbound и специальном демоне totd, который заброшен, но все еще компилируется и работает.
Первым делом, мы должны выбрать какие-то 2 подсети, которые будем раздавать нашим клиентам. Первая подсеть нужна для отображения адресов, а вторая для маршрутизации. Я решил использовать 2001:db8:1:ffff::/96 (из диапазона «для документации») в качестве первой подсети, а в качестве второй — fde4:8dba:82e1:ffff::/64 (IPv6 ULA, аналог внутрисетевых диапазонов в IPv4).

Перенастраиваем dnsmasq:
dhcp-range=fde4:8dba:82e1:ffff::1, fde4:8dba:82e1:ffff::ff, slaac
Указываем наши настройки в TAYGA:
prefix 2001:db8:1:ffff::/96
И в totd:
forwarder 74.82.42.42 port 53
prefix 2001:db8:1:ffff::
port 53

И запускаем все демоны. В итоге, получается как-то так:
% dig aaaa habrahabr.ru

; <<>> DiG 9.9.2-P2 <<>> aaaa habrahabr.ru
;; ANSWER SECTION:
habrahabr.ru.		2363	IN	AAAA	2001:db8:1:ffff::d418:2c8d
habrahabr.ru.		2363	IN	AAAA	2001:db8:1:ffff::d418:2c85

Весь трафик, отправленный на диапазон 2001:db8:1:ffff::/96, фактически пойдет через IPv4.

К сожалению, DNS устанавливается только при подключении, т.к. Router Advertisement принимает ядро, а для получения DNS нужен DHCPv6, чем ядро уже не занимается. Аналогичное поведение наблюдается в Windows 7 (другие версии не пробовал).

Заключение


Мне очень нравится эта атака. Она очень простая, надежная и работает там, где есть защиты от ARP Spoofing и IPv4 ACL. Существует и другая, но очень похожая по сути атака — Rogue RA, которая позволит выполнить MITM даже при наличии существующей IPv6-инфраструктуры, но о ней как-нибудь в другой раз.
Влад @ValdikSS
карма
622,0
рейтинг 46,5
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (27)

  • 0
    У меня на Debian'не 6to4 адрес и Firefox предпочитает его.
    • 0
      Возможно, у вас изменены приоритеты в /etc/gai.conf. По умолчанию, у 6to4 адресов один из самых низких приоритетов.
      Либо вы путаете с 6in4.
      • 0
        Возможно про gai я уже и забыл…
  • +2
    А почему nat64 только два? Как минимум есть ещё Jool.
    • 0
      О, спасибо, не знал о нем.
  • +4
    Вообще, в стандартных правилах антиспуфинга есть запрет на RA'шки. Другое дело, что в десктопной сети их не юзают.

    Но в свете глобального ssl, любые атаки на перехват трафика становятся всё слабее и слабее.
    • +1
      Но в свете глобального ssl
      Зайдите в пост про обозначение HTTP-сайтов небезопасными в Google Chrome, и, к сожалению, узнаете, что нашу с вами позицию многие неодобряют.
      • 0
        Конечно не одобряют. Это же дойная корова для SSL-сертификатчиков.
        Если бы это было реализовано через Bitcoin (тот же Namecoin), тогда было бы доверительнее.
        • +1
          Возможно этот проект поможет.
          letsencrypt.org/
          • 0
            Akamai project, US. Стоит ли доверять пиндосской компании, которая работает в параноидальной стране?
  • 0
    А что вы будите делать там где включена сегментация или private vlan?
    • 0
      Ничего :(
  • НЛО прилетело и опубликовало эту надпись здесь
    • +1
      У IPv4 тоже (было) много проблем, которые так или иначе были «исправлены» производителями оборудования всеми возможными защитами и фильтрами, но я считаю, что все же архитектура IPv6 более удачна и понятна, а проблемы безопасности возникают, по большому счету, из-за неосведомленности системных и сетевых администраторов об IPv6.
  • +1
    А можно просьбу? Вот если Вы напишете отдельную статью про nat64, про nat'ирование ipv6 локальной сети в ipv4 интернет, будет замечательно.
    • 0
      Написать статью-то можно, но мне NAT64 вообще не нравится, и я слабо представляю, зачем он кому-то может быть нужен в повседневной жизни. Как по мне, от него сплошные неудобства, уж Dual Stack куда лучше.
      Вы его зачем хотите использовать?
      • 0
        Виртуалки… Сидят в IPv6-only сети. И нужно иногда выходить в мир именно по v6, ну или чтоб они думали что это v6. Тестирование, опять же. Виртуальной инфраструктуры не хватает для полноценного тестирования некоторых программ на поддержку ipv6.
        • 0
          Возьмите туннель в6 от какого нить хурикан електрик и получите /48 а то и /64 бесплатно, без смс. И будет вашим виртуалкам счастье. Кстати, у меня на хурикане лежит обратная зона днс для в6, но у меня туннель от местного украинского оператора
          • 0
            Я предполагаю, что у человека рабочая IPv6-сеть, а ему нужно в IPv4-интернет ходить.
            • 0
              Именно. А всякие тоннели несекурны и потому зарезаны.
              Но, голь на выдумки хитра)
  • 0
    Почему же нет повсеместного перехода на ipv6? Все так долго кричали о том, что заканчиваются ipv4 адреса…
    • +1
      Потому что администраторы(в данном случае сетевые), в общей массе, люди предусмотрительные, и кричать о том, что ipv4 адреса заканчиваются начали сильно заранее, а еще они ленивые и не хотят переделывать то, что и так пока работает.
    • 0
      Гугл (и все его сервисы), ютуб, вк, фейсбук, аппле через ипв6 у меня постоянно работают. Может и еще какие-то сайты, не обращаю особо внимания.
    • 0
      Потому что заменить вагоны свичей, коммутаторов и прочего end-user оборудования — в рамках какого-нить РосТелекома — это космические суммы. а большая часть SOHO роутеров даже вышедших в прошлом году до сих пор на 2.4 ядре линукса в прошивке и про v6 вообще не в курсе
    • 0
      Как это нет? Есть, конечно. Уже 5% пользователей ходят через IPv6 на Google.

      И началось это, в общем, тогда, когда и должно было начаться: когда IPv6 адреса начали реально кончаться.

      Это — в общем стандартная ситуация: пока есть хоть какая-то возможность избегать upgrade им никто и не занимается. Когда какой-нибудь 5G не придёт и не скажет: «без IPv6 — не входжить» никто особо и париться не будет.
      • 0
        когда IPv6 адреса начали реально кончаться.

        Страшно!
        • +2
          LOL. Опечатка, извините. Начали кончаться, конечно, IPv4 адреса. Сначала у IANA, потом у NICов, сейчас уже, по слухам, компании начали покупать, чтобы блоки IPv4 адресов добыть… в общем уже видно, что это не просто слова, а реальная проблема. Не в смысле «сегодня я получу блок адресов, но завтра его могут мне и не дать», а в смысле «мне уже не дают IPv4 адресов, но если заплатить кругленькую сумму, то их ещё можно получить». А до этого можно было всегда поохать на форумах, а потом таки ничего не делать по поводу IPv6. Трагедия общин, ничего не попишешь.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.