Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Ты наверняка сталкивался с DHCP при настройке роутера. Но знаешь ли ты про опасности, которые может в себе скрывать его неправильная настройка на сервере компании? Воспользовавшись ею, злоумышленник может не только вывести DHCP-сервер из строя, но и реализовать атаку MitM, чтобы перехватить важные данные. В этой статье я покажу два вектора атак на DHCP и дам советы о том, как обеспечить безопасность.
warning
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
При защите сети от атак на DHCP нам очень важно понимать тонкости взаимодействия DHCP-сервера и клиента. Например, какая связь между значением MAC-адреса в Ethernet-заголовке и значением CHADDR в заголовке DHCP или какие сообщения отправляются только DHCP-сервером в адрес клиента, а не наоборот. Но обо всем по порядку. Сначала быстренько пробежимся по основным сообщениям DHCP и структуре самого DHCP-заголовка.
Для получения IP-адреса и других сетевых параметров клиенту и серверу DHCP достаточно обменяться четырьмя сообщениями. Клиент, настроенный на автоматическое получение IP-адреса, посылает в сеть сообщение DHCPDISCOVER
на бродкастовые адреса сетевого (255.255.255.255) и канального (FF:FF:FF:FF:FF:FF) уровней, чтобы обнаружить серверы DHCP. В IP-заголовке в поле адреса источника IP-пакета указывается 0.0.0.0, так как клиент еще не получил этот параметр. В поле источника сообщения на канальном уровне указывается MAC-адрес клиента.
Получив сообщение DHCPDISCOVER от потенциального клиента, DHCP-сервер предлагает свободный IP-адрес. Это сообщение, адресованное от сервера клиенту, называется DHCPOFFER. На время предложения адрес резервируется DHCP-сервером и не предлагается другим клиентам.
Предположим, клиент получил сообщение DHCPOFFER от DHCP-сервера. Тогда он отправляет широковещательное сообщение DHCPREQUEST, в котором содержится IP-адрес сервера, выдавшего предложение. Такое широковещательное сообщение информирует другие DHCP-серверы о том, что клиент уже принял предложение от одного из серверов. В таком случае остальные серверы DHCP освобождают зарезервированные IP-адреса, и в дальнейшем они могут быть предложены другим клиентам.
Когда сервер получает сообщение DHCPREQUEST, он указывает выбранный клиентом IP-адрес в сообщении DHCPACK и отсылает его в сторону клиента.
Клиент получил все необходимые сетевые параметры, и на этом процесс взаимодействия считается завершенным. Но кроме этих основных четырех сообщений, есть еще парочка немаловажных:
DHCPNACK
— сообщение, которое посылается от сервера к клиенту, чтобы известить об отказе в аренде IP-адреса;
DHCPRELEASE
— сообщение от клиента к серверу, которое уведомляет сервер о том, что клиент больше не желает использовать текущий IP-адрес и сервер может «вернуть» этот адрес в пул свободных IP-адресов.
С основными сообщениями разобрались. Теперь подведем небольшой итог: сообщения типа DHCPOFFER
, DHCPACK
и DHCPNAK
отправляются только сервером в адрес клиента. Запомним. Эта информация нам пригодится чуть позже.
Теперь максимально кратко рассмотрим заголовок DHCP, инкапсулируемый в UDP-дейтаграммы. Кстати, забыл сказать про транспортный уровень: если речь о DHCP, то сервер и клиент используют 67-й и 68-й порты UDP соответственно.
Давай пройдемся по наиболее интересным для нас полям заголовка:
Op Code
— поле, которое указывает на тип сообщения. Если происходит запрос от клиента к серверу, то в данном поле устанавливается значение 0х01, а обратно — 0х02;
htype
— тип адреса, работающего на канальном уровне. Для Ethernet в этом поле устанавливается значение 0х01;
hlen
— указывает длину адреса канального уровня в байтах (0х06 для Ethernet);
xid
— идентификатор транзакции для согласования запросов и ответов между ними;
sec
— отображает время в секундах, прошедшее с момента, когда клиент начал получать либо обновлять IP-адрес;
CIADDR
— IP-адрес клиента. Это поле заполняется в том случае, если клиенту уже назначен IP-адрес и нужно продлить его аренду;
YIADDR
— сервер заполняет это поле значением IP-адреса, который предлагает клиенту;
SIADDR
— IP-адрес DHCP-сервера, при отправке клиенту ответных сообщений DHCPOFFER и DHCPACK;
GIADDR
— IP-адрес агента‑ретранслятора (маршрутизатора), разделяющего сети, в которых находятся клиент и DHCP-сервер;
CHADDR
— поле, указывающее MAC-адрес клиента. На это поле обращаем особое внимание;
Option
— поле переменной длины, в котором задают дополнительные параметры (например, маска подсети, адреса DNS-серверов, адрес шлюза по умолчанию, время аренды адреса).
Думаю, тут все понятно. Теперь поговорим о поле CHADDR
, на котором я акцентировал особое внимание выше. Логично предположить, что значение в полях CHADDR
заголовка DHCP и MAC-адреса источника в Ethernet-заголовке (сообщений от клиента к серверу) будут идентичными.
При нормальном взаимодействии клиента с сервером так и есть. Взяли на заметочку и двигаемся к практической части.
Я собрал все необходимое, что было под рукой:
На маршрутизаторе запустил DHCP с выдачей адресов из пула 192.168.1.2–254. Коммутатор с пустой конфигурацией, как «из коробки».
Перед проведением атаки DHCP Starvation хочется сделать небольшое ревью. Мы знаем, что DHCP-сервер ведет таблицу соответствий выданных клиентам IP-адресов и их MAC-адресов и что уже выданный IP-адрес не может быть предложен другому клиенту повторно. Суть атаки DHCP Starvation — «истощить» сервер DHCP, отправляя ложные пакеты типа DHCPDISCOVER
с рандомными MAC-адресами источника. На эти пакет сервер будет реагировать и резервировать свободные IP-адреса из пула, в результате чего некоторое время (пока атака в активной фазе) не сможет выдавать IP-адреса обычным пользователям.
В качестве инструмента атаки будем юзать Yersinia (тулза названа в честь бактерии). Кроме DHCP, она умеет атаковать и несколько других протоколов канального уровня.
Источник: xakep.ru