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-инфраструктуры, но о ней как-нибудь в другой раз.
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 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?
          • НЛО прилетело и опубликовало эту надпись здесь
            • +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. Трагедия общин, ничего не попишешь.

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