Как найти и отключить несанкционированный (левый) DHCP-сервер в локальной сети?

Системный администратор IT и автоматизация бизнеса
← На главную

Многие системные администраторы периодически сталкиваются с неприятной ситуацией: один или несколько клиентов в локальной сети внезапно получают неправильные настройки сети (IP-адрес из другой подсети, левые шлюзы и DNS). Это приводит к потере доступа к интернету и внутренним ресурсам. Причиной такого сбоя является появление в сети несанкционированного, так называемого Rogue DHCP-сервера. Чаще всего им оказывается принесенный кем-то из сотрудников домашний роутер, случайно воткнутый LAN-портом в рабочую розетку. Разберем по шагам, почему это происходит и как мы можем вычислить и обезвредить нарушителя.

Проанализируем механику работы протокола DHCP

Для начала выясним причину, почему компьютеры вообще принимают настройки от чужого устройства. На моменте получения адреса операционная система ничего не знает о том, где она находится и в какой сети работает. Процесс выглядит следующим образом:

  1. Клиент отправляет широковещательный запрос DHCPDISCOVER на UDP-порт 67 с посылом: «Есть тут кто-нибудь, кто выдаст мне IP-адрес?».
  2. В ответ на него все доступные в сети DHCP-серверы отправляют пакет DHCPOFFER: «Да, есть, предлагаю такие-то настройки».
  3. Проблема кроется в примитивности протокола: клиент принимает предложение от того сервера, который ответит первым. Никакой встроенной защиты или проверки подлинности сервера на уровне базового DHCP нет.

В результате, если «левый» роутер оказался физически ближе к клиенту или ответил быстрее корпоративного сервера, компьютер получит неправильные настройки. Более того, наличие такого устройства открывает дыру в безопасности: злоумышленник может реализовать атаки типа Man-in-the-Middle (MitM) или устроить DHCP starvation (истощение пула адресов).

Рассмотрим поиск злоумышленника с помощью анализаторов трафика

Если проблема возникает нерегулярно, лучшим способом будет поймать нарушителя с поличным в момент выдачи адреса. Для этого нам понадобятся анализаторы трафика, такие как Wireshark или TcpDump.

Настроим прослушивание сети на проблемном компьютере или на отзеркаленном порту коммутатора. В Wireshark необходимо установить фильтр на udp.port == 67 || udp.port == 68. Когда компьютер отправит запрос на получение адреса, мы увидим все ответы DHCPOFFER. В пакете от ложного сервера мы сможем посмотреть MAC-адрес устройства, выдавшего неверный IP. По первым октетам MAC-адреса легко определить вендора (производителя) устройства — это сузит круг поисков (например, мы узнаем, что ищем роутер D-Link или TP-Link).

Посмотрим на решение с использованием утилиты dhcdrop

Если нет времени ждать или разворачивать Wireshark, воспользуемся специализированной кроссплатформенной утилитой dhcdrop. Она позволяет не только найти, но и подавить работу мешающего DHCP-сервера.

Рассмотрим процесс работы с утилитой. Сначала определим доступные сетевые интерфейсы, выполнив команду:

dhcdrop -D

Система выведет список интерфейсов. Выберем тот, который смотрит в проблемную сеть. Затем запустим поиск DHCP-серверов. Если мы работаем в Linux, команда будет выглядеть так:

sudo dhcdrop -i eth1

Проанализируем вывод утилиты. Программа отправляет тестовые запросы и собирает ответы от всех DHCP-серверов в сегменте:


Using interface: 'eth1'
Got response from server 10.7.7.1 (IP-header 10.7.7.1), server ethernet address: 00:02:44:75:77:E4, lease time: 1.1h (3960s)
Got BOOTREPLY (DHCPOFFER) for client ether: 00:16:09:D8:CF:60 You IP: 10.7.7.201/24
Drop him? [y/n] n

Программа нашла наш легитимный сервер и спрашивает, нужно ли его подавить. Нажимаем n (нет) и продолжаем поиск. Вскоре утилита находит второго респондента:


Searching next server...
Got response from server 192.168.1.1 (IP-header 192.168.1.1), server ethernet address: 00:1E:2A:52:C8:CA, lease time: 24h (86400s)
Got BOOTREPLY (DHCPOFFER) for client ether: 00:16:09:D8:CF:60 You IP: 192.168.1.2/24
Drop him? [y/n] y

Мы нашли зловредный DHCP-сервер (он предлагает адрес 192.168.1.2). Если у нас нет времени физически искать порт, нажимаем y. Утилита перейдет к грубой силе: она начнет бомбардировать нелегальный роутер фейковыми запросами от разных MAC-адресов, тем самым «съедая» весь его пул выдаваемых адресов (DHCP Starvation). Как только его пул иссякнет, он перестанет отвечать клиентам, и сеть снова заработает нормально.

Выясним физическое расположение левого сервера

После того как мы узнали MAC-адрес вредителя (через Wireshark, dhcdrop или просто посмотрев ARP-таблицу командой arp -a на ПК с левым IP), нам нужно найти, куда именно он подключен. Разберем действия в зависимости от оборудования:

Настроим превентивную защиту сети

Чтобы подобные проблемы больше не возникали, мы должны внедрить технологии защиты на уровне коммутаторов доступа (при наличии умного оборудования).

  1. DHCP Snooping: Это базовая защита. На коммутаторах мы явно указываем «доверенные» (trusted) порты, за которыми находятся легитимные DHCP-серверы. Все пакеты DHCPOFFER, приходящие с других (untrusted) портов, коммутатор будет просто отбрасывать.
  2. Dynamic ARP Inspection (DAI) и IP Source Guard: Работают в связке с DHCP Snooping. Коммутатор запоминает, какому MAC-адресу какой IP-адрес был выдан официально, и блокирует любой трафик от устройств, которые попытаются подменить свой адрес.
  3. Port Security: Если DHCP Snooping недоступен, можно ограничить количество изучаемых MAC-адресов на пользовательском порту. Если кто-то принесет роутер и включит его в розетку, порт перейдет в состояние блокировки (err-disable) при превышении лимита MAC-адресов.
  4. Авторизация 802.1X: Самый надежный способ корпоративного уровня. Сетевой порт остается неактивным до тех пор, пока устройство не пройдет авторизацию на RADIUS-сервере по сертификату или логину/паролю. Домашний роутер просто не сможет авторизоваться в сети.

Используя комплексный подход — от быстрого поиска скриптами Nmap или PowerShell, до аппаратных ограничений на портах коммутаторов — мы сможем полностью исключить влияние пользовательского оборудования на работоспособность корпоративной сети.

← На главную