Содержание статьи
warning
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
Теория
При защите сети от атак на DHCP нам очень важно понимать тонкости взаимодействия DHCP-сервера и клиента. Например, какая связь между значением MAC-адреса в Ethernet-заголовке и значением CHADDR в заголовке DHCP или какие сообщения отправляются только 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
Теперь максимально кратко рассмотрим заголовок DHCP, инкапсулируемый в UDP-дейтаграммы. Кстати, забыл сказать про транспортный уровень: если речь о DHCP, то сервер и клиент используют 67-й и 68-й порты UDP соответственно.
Давай пройдемся по наиболее интересным для нас полям заголовка:
-
Op
— поле, которое указывает на тип сообщения. Если происходит запрос от клиента к серверу, то в данном поле устанавливается значение 0х01, а обратно — 0х02;Code -
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 на стойкость
Лабораторный стенд
Я собрал все необходимое, что было под рукой:
- маршрутизатор Cisco 2821;
- коммутатор Cisco Catalyst 2960;
- клиентский ПК с Kali Linux.
На маршрутизаторе запустил DHCP с выдачей адресов из пула 192.168.1.2–254. Коммутатор с пустой конфигурацией, как «из коробки».
DHCP Starvation
Перед проведением атаки DHCP Starvation хочется сделать небольшое ревью. Мы знаем, что DHCP-сервер ведет таблицу соответствий выданных клиентам IP-адресов и их MAC-адресов и что уже выданный IP-адрес не может быть предложен другому клиенту повторно. Суть атаки DHCP Starvation — «истощить» сервер DHCP, отправляя ложные пакеты типа DHCPDISCOVER
с рандомными MAC-адресами источника. На эти пакет сервер будет реагировать и резервировать свободные IP-адреса из пула, в результате чего некоторое время (пока атака в активной фазе) не сможет выдавать IP-адреса обычным пользователям.
В качестве инструмента атаки будем юзать Yersinia (тулза названа в честь бактерии). Кроме DHCP, она умеет атаковать и несколько других протоколов канального уровня.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»