Итак, обычная ситуация: есть некая корпоративная сеть, в ней пользователь (наша жертва) и сервер, на котором пользователь аутентифицируется.
И задача атакующего — внедриться в сетевое подсоединение между ними, то есть провести атаку man in the middle. В рамках нашего сайта мы уже разбирали пучок методов, которые позволили бы добиться внедрения. Это и атаки на DNS, NBNS, и ICMP redirect, и, конечно, классическая ARP poisoning. В следующих номерах мы еще коснемся более извращенных и более специфичных MITM-атак, но сейчас давайте вспомним, что XXI век на дворе. А что это нам несет? Конечно, IPv6. Вот сегодня мы и узнаем основные методы MITM в IPv6.
Для начала на всякий случай отмечу, что MITМ’ы более высоких уровней (над IP-уровнем) останутся неизменными по сути. Меняется ведь только протокол IP, то есть основная идея DNS-спуфинга будет той же (хотя имплементацию нужно менять). С другой стороны, мы лишаемся такой шикарной вещи, как ARP spoofing. В IPv6 такой протокол отсутствует. Что можно сделать
в новом протоколе? Давай вернемся к основополагающим задачам, лежащим на плечах IPv6, а также к тому, как они были решены.
Одной из главных задач, которая раньше решалась посредством ARP в IPv4, было «нахождение» хоста. То есть поступает задача подключиться к какому-то IP, но ведь для фактического подключения сетевой подсистеме надо знать MAC-адрес конечного хоста. Поэтому посылались широковещательные ARP-запросы, типа «кто IP такойто?».
А что же в IPv6? Так как от базовой концепции избавиться было нельзя (для подключения нужен MAC), решение оказалось, по сути, аналогичным. Был внедрен протокол NDP — Neighbor Discovery Protocol, часть обновленного протокола ICMPv6.
Для того чтобы получить MAC-адрес, хост посылает специальный ICMPv6-запрос (Neighbor Solicitation — тип 135) на специальный multicast-адрес. Стоит отметить, что в IPv6 избавились от broadcast-адресов. Вместо них выделили определенные multicast-адреса, которые выполняют ту же
функцию, — такие пакеты получают все хосты сегмента. Таким образом, хост, чей IP указан в пакете, отвечает обратно ICMPv6-пакетом — Neighbor Advertisement (тип 136), в котором и указывает свой MAC (см. рис. 1).
Как видишь, все выглядит очень пригодным для проведения MITM, а главное — таковым и является :). Можно спокойно флудить Neighbor Advertisement пакетами на хост жертвы, и он будет посылать данные нам (NDP cache poisoning?) (см. рис. 2).
Фактически атаку можно провести, используя, например, утилиту parasite6 из набора THC-IPv6 attack toolkit (goo.gl/Ryfe8). Она отвечает NA-пакетами на все NS-запросы в сети, так что злоумышленнику будут видны все данные в сегменте сети.
Второй вариант проведения MITM-атаки основывается на новой фиче IPv6 — SLAAC.
Эта аббревиатура расшифровывается как stateless address autoconfiguration и подразумевает под собой возможность получения сетевых настроек хостом в подсетях, где отсутствует DHCP-сервер. Фича эта очень даже удобная. Атакующий подключился в новую сеть, и — бац — у него есть все основные настройки: твой IP, IP шлюза и DNS-сервера — то есть то, что обычно приходится прописывать в IPv4 без DHCP.
А как работает эта технология? Очень просто. При подключении к сети сам хост генерит себе свой IP-адрес, основываясь на MAC-адресе сетевой карты. После чего отправляет в сеть на специальный multicast-адрес (all routers multicast) запрос ICMPv6 типа Router Solicitation (тип 133), чтобы получить основные настройки от самого роутера (роутеров). Последние же, получив данный запрос, отправляют ответ Router Advertisement (тип 134), и тоже на multicast-адрес (что интересно, ответ уже адресуется всем), в него и включают информацию для настроек. Все это чем-то смахивает на DHCP, но путать не следует, ведь в IPv6 есть и свой DHCPv6.
Думаю, ты догадываешься, что атака здесь по идее своей аналогична предыдущей. Все, что необходимо атакующему, — посылать ICMPv6 Router Advertisement пакеты в сеть. Это перезапишет имеющиеся настройки автоконфигурации, и трафик от хостов пойдет к нему. Злоумышленник же его, в свою очередь, будем передавать дальше на роутер. Итог — MITM получена. Фактически произвести эту атаку можно, опять-таки используя тулзу от THC — fake_router6.
Еще раз подчеркну, что какой-то встроенной защиты от перезаписи настроек здесь изначально нет. Один пакет — одна запись. Сколько-то номеров назад я как раз писал про отличный DoS против всех современных Windows-систем — флудинг такими RA-сообщениями (используя flood_router6 THC). Падение происходит буквально за секунды, а от атакующегопочти ничего не требуется.
Хорошо. И наконец, последний вид MITM-атаки это ICMP Redirect. Напомню, что роутер может послать на входящий пакет от хоста ICMP-сообщение о том, что есть более «правильный» маршрут для трафика, через такой-то другой роутер. Таким образом, если подделать такой пакет и послать его от имени роутера нашей жертвы, дальнейшие данные жертва будет пускать через нас.
Как ни странно, но этот функционал перекочевал и в IPv6. Когда роутер обнаруживает более корректный маршрут для трафика от какого-то хоста, он отправляет ему ICMPv6 запрос Redirect (тип 137). После чего хост меняет роутер, используемый для пересылки данных, на тот, что указан в запросе. По сути — все то же (см. рис. 4).
Но в IPv6 был внедрен некий метод защиты: роутер должен вернуть в ICMPv6 Redirect запросе весь пакет, для которого роутер нашел лучший путь. Да, кажется, тут возникает проблема? Но умные дяди из THC уже подумали за нас. Решение есть, и остроумное. Если роутер должен ответить ICMP с проблемным пакетом, то для подделки запроса от роутера мы должны сделать так, чтобы мы знали тело пакета. Как этого добиться? Для начала давай представим себе саму ситуацию перед атакой (см. рис. 5).
Здесь A — хост жертвы, X — хост атакующего, C — хост, куда жертва посылает данные (то есть то, что мы хотим перехватить). И роутер B — это тот, через который бежит трафик от A к С. Фактически же атака реализуется такой последовательностью:
1. Злоумышленник со своего хоста посылает ICMPv6 Echo Request запрос (он остался неизменным по сравнению с ICMPv4) на хост А, но в поле source IP (от кого) указывает хост C.
2. Хост А, получив такой пакет, ответит хосту С ICMPv6 Echo Reply пакетом.
3. Злоумышленник создает IPv6 ICMP Redirect-пакет и посылает его от имени роутера (опять-таки подделывая source IP) на хост A, с указанием использовать для доступа к хосту C роутер Х (то есть нашу машину).
Важнейший момент заключается в том, что при атаке можно добавить в Redirect-пакет Echo Reply пакет. После этого данные должны потечь через нас. Для реальной эксплуатации можно воспользоваться тулзой redir6 из того же набора THC.
Как видишь, протокол изменился, но атаки, которые можно провести, остались в основе своей прежними. Напоследок извинюсь за достаточно сильное упрощение терминологии IPv6 и множественные аналогии из IPv4. Это чтобы было проще понять и не объяснять все новые особенности и тонкости.