Apple vs. DHCP

Краткая версия доклада

DHCP (Dynamic Host Configuration Protocol) - протокол, позволяющий компьютерам автоматически получать IP-адреса и другие параметры, необходимые для работы в сетях TCP/IP. При первом подключении к сети Apple-устройство отправляет запрос. DHCP сервер, увидев этот запрос, предлагает клиенту IP-адрес и сетевые настройки, необходимые для работы (роутер, DNS-сервер, домены поиска и т.д.). Клиент, получив офер, отправляет широковещательный DHCP Request, в котором выставляет request от полученного IP. Далее сервер, получив DHCP Request, проверяет правильность установок клиента и отправляет DHCP Ack - подтверждение для начала авторизации клиента и принятия параметров конфигурации. Второе и все последующие подключения реализуются по схеме DHCP Request - DHCP Ack.

Если в сети находится злоумышленник, который может прослушивать широковещательный трафик, он тоже может послать DHCP Ack, выставив в качестве роутера и DNS-сервера свой IP-адрес. В итоге клиент получает два DHCP Ack с разными сетевыми параметрами - от реального сервера и от злоумышленника. Система в качестве шлюза по умолчанию в IPv4 сети выставляет IP-адрес злоумышленника, то есть из второго DHCP Ack, так же, как и DNS-сервер.

Для того, чтобы инициировать получение IP-адреса на операционных системах MacOS и iOS, достаточно отправить пару таких ARP-ответов. А во время получения IP-адреса становится возможным вмешаться в этот процесс и заменить IP-адреса шлюза и DNS-сервера на свой IP.

Эта особенность характерна только для MacOS и iOS, ей не подвержены Windows и Linux. В компании Apple в ответ на запрос пояснили, что такова особенность работы системы - принимать сетевые параметры из последнего по времени получения DHCP Ack.

Данная схема работает на всех устройствах Apple, злоумышленник может контролировать трафик, выходящий за пределы подсети, а также контролировать DNS-трафик. Ограничением для такой схемы является работа только в беспроводной сети, она не работает в режиме изоляции клиентов, здесь отсутствует контроль за трафиком внутри подсети, также необходима вторая сетевая карта для отправки deauth-пакетов.

Чтобы проверить, занят ли выданный IPv4-адрес, применяется технология IPv4 Address Conflict Detection. Применив протокол ARP клиент отправляет широковещательный Ack-запрос, где спрашивает, есть ли в сети устройства с определенным IP-адресом. После перехвата запроса указывается, что IP-адрес уже занят. Выявив конфликт адресов, операционная система начинает процедуру получения IPv4-адреса с самого начала. При отправке ответов без запросов клиент MacOS или iOS заявляют пользователю о том, что адрес занят. То есть, чтобы заставить устройство Apple заново пройти процедуру получения IPv4-адреса и провести атаку посредника (MiTM), достаточно отправить несколько ARP-ответов.

Данная схема работает на всех устройствах Apple в проводной и беспроводной сети, пользователь может контролировать трафик, выходящий за пределы подсети, а также контролировать DNS-трафик. Ограничением здесь является то, что схема не работает в режиме изоляции клиентов, тут отсутствует контроль за трафиком внутри подсети.

Лучшей защитой от атак по этой схеме будет использование IDS, IPS, SIEM, методов DHCP Snooping и ARP Inspection, применение DHCP-ретрансляторов и DHCP-серверов, поддерживающих DHCP опцию с кодом 82, настройка Port Security, изоляция клиентов в WiFi сети.

Что касается IPv6, то, в отличие от IPv4, получить в нем адрес можно двумя путями: через механизм автоконфигурации узла Stateless Address Autoconfiguration (SLAAC), или через протокол DHCPv6. При использовании SLAAC роутер отправляет мультикастовый ICMPv6 Router Solicitation запрос, ему в ответ приходит ICMPv6 Router Advertisement. Путем отправки своего ICMPv6 Router Advertisement со своим ICMPv6 адресом и доменом поиска, с выставленным префикосм, можно перехватить контроль за Mac-адресом. К сожалению, в iOS нельзя отключить IPv6, поэтому злоумышленники пользуются им для установления контроля за трафиком.

В схеме с DHCPv6 после запроса Router Solicitation и ответа Router Advertisement, происходит обмен запросами Solicit - Advertise - Request - Reply. В конце сервер выдает IPv6 адрес. Итого, клиент выставляет три IP-адреса - первые два он взял из информации префикса из Router Advertisement, последний IPv6 адрес он берет из Router Reply. В качестве маршрутизатора используется локальный адрес того, кто ответил на Router Advertisement, а не того, кто ответил на DHCPv6. В ICMPv6 Router Solicitation нет ничего похожего на "transaction ID", и злоумышленнику ничего не помешает ответить на запрос, не дожидаясь самого запроса, позже реального сервера. Таким образом, тот, кто первым послал Router Advertisement, тот становится шлюзом и первым с конца DNS-сервером.

Для защиты от этой мошеннической схемы используются такие решения, как DHCPv6 Guard, IPv6 Snooping, проводится изоляция клиентов в WiFi сети, используются защитные устройства IDS, IPS, SIEM.