Защита WiFi-сети от ARP-спуффинга

ARP-spoofing (ARP-poisoning) — техника сетевой атаки, применяемая преимущественно в Ethernet, но возможная и в других, использующих протокол ARP-сетях, основанная на использовании недостатков протокола ARP и позволяющая перехватывать трафик между узлами, которые расположены в пределах одного широковещательного домена. Суть её состоит в том, что любой желающий может посылать ARP-запросы, подменять таким образом ARP-таблицы на других компьютерах и сопоставлять свой mac-адрес c чужим ip-адресом

Одним из методов защиты является использование статических ARP-таблиц, т.е. запрет на изменение ARP-таблицы. Именно это решение мы предлагаем для использования в нашем WiFi-агенте. Для этого внутри WiFi-агента реализуется ещё одно приложение: DHCP relay-агент. По описанию протокола DHCP (RFC 2131) сервер DHCP может отвечать не только на запросы клиентов на получение ip-адреса, но и на запрос relay-агентов, которые пробрасывают запросы клиентов на сервер (проставляя свой адрес, чтобы сервер мог им ответить), а ответ отправляют клиенту. Таким образом обычно реализуется возможность получения ip-адресов, если DHCP сервер находится в другой сети и часто роль relay -агентов выполняют аппаратные шлюзы. Мы используем программный Relay агент для того, чтобы при получении IP-адреса от DHCP-сервера редактировать arp-таблицу на шлюзе (где установлен WiFi-агент) и для удаления записи из arp-таблицы по истечению срока аренды IP-адреса (который задаётся DHCP-сервером и проставляется клиенту, а клиент, в свою очередь, обязан до истечения срока аренды послать запрос на продление IP-адреса). Динамическое обновление arp-таблицы отключается и никто другой не может править arp-таблицу кроме DHCP relay агента.

Для запуска DHCP-агента нужно в файл inet_wifi_agent.properties добавить следующие настройки:

#dhcp options
dhcp=1
 
dhcp.servers.1.host=192.168.184.254
dhcp.servers.1.port=67
 
dhcp.servers.2.host=192.168.184.253
dhcp.servers.2.port=67
 
dhcp.agent.host=192.168.154.39
dhcp.minThreadCount=10
dhcp.maxThreadCount=10
 
dhcp.servers.1.host=192.168.184.254
dhcp.servers.1.port=67

Здесь

dhcp=1 - это флаг, говорящий о том, что нужно запускать DHCP-агент.

Далее идут настройки DHCP-серверов. Поддерживается несколько серверов (<id> - 1,2,3 и т.п. ):

dhcp.server.<id>.host - IP-адрес сервера DHCP. Он нужен Relay-агенту;

dhcp.server.<id>.port - порт, на котором запускается сервер DHCP. Вообще, стандартным портом для сервера DHCP является 67-ой. Но в данном случае, возможно, вам понадобиться изменить этот порт. Например, если DHCP-агент и DHCP-сервер находится в одной локальной сети . В этом случае они оба будут получать широковещательные DNCP-запросы клиентов на получение IP-адреса и сервер будет отправлять ответы клиентам напрямую. Нам же нужно, чтобы запрос приходил только к DHCP-aгенту, а агент его уже пробрасывал на сервер. Этого можно добиться с помощью организации сети или ещё какими-либо другими способами, но один из вариантов - это поднять сервер на другом порту, чтобы он не получал запросы клиентов на 67-ом. Стандартный сервер DHCPd позволяет это сделать . В этом случае вам понадобиться изменить этот параметр.

hcp.agent.host - IP-адрес DHCP-агента, на который потом будет отвечать DHCP-сервер. Этот адрес проставляется в DHCP-запрос, который проходит через relay-агент;

dhcp.minThreadCount, dhcp.maxThreadCount - это минимальное и максимальное количество потоков в пуле при обработке запросов от клиентов и серверов DHCP. Эти параметры можно оставить по умолчанию;

dhcp.arp.command - путь к команде arp в ОС Linux. Она нужна для манипулирования arp-таблицами. По умолчанию обычно /sbin/arp.

Для отключения динамического обновления arp-таблицы нужно выполнить команду

ifconfig eth0 -arp

При этом нужно посмотреть какие адреса уже попали в эту таблицу и, при необходимости, её отредактировать (например, добавить адреса каких-либо серверов в локальной сети, которые имеют статический ip).