На тему атак с использованием протокола DHCP написано достаточно много статей. Атаки DHCP Starvation и поддельный DHCP Сервер являются важными инструментами проведения пентеста. Однако я предлагаю посмотреть на проблему немного под другим углом. А именно, использовать в качестве аппаратной платформы, с которой будут реализовываться атаки, микрокомпьютер, например Raspberry Pi 3. Благодаря небольшим размерам и возможности работать от аккумулятора это устройство можно незаметно разместить рядом с сетевой розеткой и использовать для реализации атаки.
В этой статье я не буду разбирать процесс установки ОС на Raspberry, на эту тему написано достаточно статей и к тому же там все достаточно просто. Замечу лишь, что дистрибутив Kali Linux, который лучше всего использовать для описываемых атак, есть и для Raspberry Pi.
Чего хотим добиться
Далее мы будем последовательно реализовывать две атаки. Представим, что в тестируемой сети у нас имеется один или несколько DHCP серверов, которые выдают клиентам настройки для IPv4 (можно и IPv6, но в рамках данной статьи мы будем говорить только про четвертую версию протокола). Как мы рассмотрим далее, с помощью DHCP помимо самого IP адреса передаются также маска подсети, серверы DNS и шлюз по умолчанию. Также может передаваться множество других параметров, но опять таки, в рамках данной статьи мы их рассматривать не будем.
Соответственно, нам необходимо будет реализовать две атаки: сначала вывести из строя легальные DHCP серверы, исчерпав все доступные для выдачи адреса, а затем поднять свой DHCP сервер, который будет выдавать нужные настройки. В этих настройках мы можем указать свой шлюз по умолчанию и/или свои DNS серверы. В результате, пользовательский трафик пойдет через узлы, контролируемые злоумышленниками или же пользователи могут оказаться на фишинговых ресурсах. Но обо всем по порядку, начнем с теории работы DHCP.
Принципы работы DHCP
Протокол динамического присвоения IP-адресов функционирует по принципу DORA:
Discover
Offer
Request
Acknowledgment
На первом шаге клиент выполняет широковещательный запрос по всей физической сети с целью обнаружить доступные DHCP-серверы. Он отправляет сообщение типа DHCPDISCOVER (значение опции «Тип сообщения» — 1), при этом в качестве IP-адреса источника указывается 0.0.0.0 (если компьютер ещё не имеет собственного IP-адреса), а в качестве адреса назначения —широковещательный адрес 255.255.255.255. Сообщение DHCPDISCOVER может быть распространено за пределы локальной физической сети при помощи специально настроенных агентов ретрансляции DHCP, перенаправляющих поступающие от клиентов сообщения DHCP серверам в других подсетях. В DHCPDISCOVER обязательно присутствует МАС адрес клиента.
Серверы DHCP отправляет ему на его МАС ответ DHCPOFFER (значение опции «Тип сообщения» — 2), в котором предлагает конфигурацию. Предлагаемый клиенту IP-адрес указывается в поле yiaddr. Прочие параметры (такие, как адреса маршрутизаторов и DNS-серверов) указываются в виде опций в соответствующем поле.
Выбрав одну из конфигураций, предложенных DHCP-серверами, клиент отправляет запрос DHCPREQUEST (значение опции «Тип сообщения» — 3). Он рассылается широковещательно; при этом к опциям, указанным клиентом в сообщении DHCPDISCOVER, добавляется специальная опция — идентификатор сервера — указывающая адрес DHCP-сервера, выбранного клиентом.
Сервер подтверждает запрос и направляет подтверждение DHCPACK (значение опции «Тип сообщения» — 5) клиенту. После этого клиент должен настроить свой сетевой интерфейс, используя предоставленные опции.
В случае, если клиент ранее уже получал IP-адрес и срок его аренды ещё не прошёл — клиент может пропустить стадию DHCPDISCOVER, начав с запроса DHCPREQUEST, отправляемого с идентификатором сервера, который выдал адрес в прошлый раз.
В случае же отсутствия ответа от DHCP-сервера, выдавшего настройки в прошлый раз, клиент отправляет DHCPDISCOVER. Тем самым клиент начинает процесс получения с начала, обращаясь уже ко всем DHCP-серверам в сегменте сети. Это как раз то, что нам нужно.
На этом, полагаю, теории будет достаточно и можно переходить к практике.
Опустошаем DHCP
Узнать IP адрес DHCP сервера можно различными способами: посмотреть в настройках клиента, прослушать трафик, но лучше всего просканировать сеть с помощью сканера Nmap.
sudo nmap -n --script=broadcast-dhcp-discover
В результате работы этого скрипта мы получим список всех найденных DHCP серверов.
Теперь нам понятен масштаб бедствия и можно приступать к атаке DHCP Starvation. Так как мы договорились использовать микрокомпьютеры, то рассматриваться будут только консольные инструменты, потому что их работу можно максимально автоматизировать с помощью скриптов.
В связи с этим мы не будем рассматривать использование утилиты Yersinia для реализации атак DHCP Starvation и запуска поддельного DHCP. В качестве альтернативы мы рассмотрим утилиту dhcpstarv. Для установки выполним следующие команды:
sudo apt update
sudo apt install dhcpstarv
Для запуска утилиты необходимо только указать используемый интерфейс:
sudo dhcpstarv –i сетевой_интерфейс
После запуска утилита начнет планомерно изымать IP адреса у DHCP серверов.
Как видно, dhcpstarv запрашивает новые IP адреса, подменяя последние три октета в MAC адресе.
Успешным завершением работы утилиты является отсутствие ответов на Discover запросы.
Также, убедиться в исчерпании ресурсов DHCP серверов можно с помощью уже знакомого нам скрипта Nmap:
Rogue DHCP
Теперь мы можем приступить ко второй части – запуску поддельного DHCP сервера, который будет раздавать нужные нам настройки IPv4.
Если у нас используется Kali Linux, то мы можем поднять DHCP с помощью Metasploit.
Для этого запустим консоль:
msfconsole
Далее выполним команду:
use auxiliary/server/dhcp
Прежде чем начинать настройки, посмотрим какие опции нам вообще доступны с помощью:
show options
Нам потребуется указать диапазон адресов, из которого мы затем будем раздавать адреса, маску подсети, широковещательный домен, шлюз по умолчанию, адреса DNS серверов и, собственно, IP адрес самого DHCP сервера.
Для примера настроим раздачу адресов из подсети 192.168.1.0/24 с DNS 192.168.1.92 и шлюзом 192.168.1.92.
В Metasploit необходимо выполнить следующие команды:
set dhcpipstart 192.168.1.200
set dhcpipend 192.168.1.230
set netmask 255.255.255.0
set broadcast 192.168.1.255
set router 192.168.1.92
set dnsserver 192.168.1.92
set srvhost 192.168.1.92
run
В результате выполнения наш DHCP сервер начнет отвечать на DHCPDISCOVER пакеты и предлагать настройки IPv4. Запуск такого сервера в Metasploit можно автоматизировать, поместив все необходимые команды в текстовый файл с расширением *.rc.
Для запуска автоматического выполнения данных команд необходимо при запуске msfconsole указать этот файл. Например:
msfconsole dhcp.rc
Микрокомпьютеры против средств защиты
Я не буду подробно рассматривать работу средств защиты от данных атак. В целом, на портах коммутаторов можно запретить выдачу IP адресов через те порты, за которыми нет и не может быть коммутаторов. Также можно ограничить количество проходящих через порт пакетов. Однако, технология DHCP Snooping работает только для проводных сетей. Таким образом мы моем, во-первых, совмещать использование микрокомпьютеров с атаками на беспроводные сети там где это возможно. А во-вторых, мы можем подключать наши микрокомпьютеры к Ethernet портам в различных помещениях в надежде, что не на всех коммутаторах будет настроен DHCP Snooping. Незаметно разместить маленькое устройство значительно проще, чем сидеть с ноутбуком у всех на виду.
Заключение
В этой статье мы рассмотрели принципы работы DHCP, основные атаки, которые можно реализовать на данный протокол, а также возможности использования данных атак совместно с микрокомпьютерами.
Еще больше полезной и практической информации мои коллеги из OTUS рассказывают в рамках курсов по информационной безопасности. Заглядывайте в каталог и выбирайте подходящий курс. На страницах курсов вы также можете зарегистрироваться на бесплатные вебинары, которые проходят каждую неделю.
Комментарии (3)
Rend
02.09.2023 16:55Другой частью защиты от подобной атаки будет настройка “port security” для портов конечных станций, когда на один порт будет разрешено не более одного MAC-адреса. Соответственно, получить более одного IP-адреса не получится.
Конечно, в этом случае предполагается, что доступ к trunk-портам у злоумышленника отсутствует.
NutsUnderline
02.09.2023 16:55Вроде бы заявленное описано, но ка кто кусочками все выходит
Ну завалили мы основной DHCP (это само по себе примечательно, ОК)
Ну подняли мы свой DHCP (почему надо именно на метасплоите?)
Дальше что, ждем у моря погоды пока (нужный) клиент возжелает обновить DHCP? А что если там прописан период 10000 часов? Основной DHCP при этом что? (так и будет заваленный?)
Общий результат данных.. мероприятий .. тоже стоит в двух словах - мы подсунули нужный IP (малинкин) и что? Просто нарушилась работа некоторого клиента? Ладно если он в интернет ходил, а если ему нужны какие либо внутренние сервисы, к которым он стучится по (неизвестному) IP, без имени.
homeles
Насколько я правильно помню - на коммутаторах l2-l3 есть возможность ставить защиту от поддельных dhcp-серверов путем жесткой прописки порта, на котором реальный dhcp сидит. Так что в правильно настроенной коммутационной части вы сможете только опустошить пул выдаваемых адресов