Защита WiFi-сети от ARP-спуффинга (DialUp)
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-агента нужно в файл dialup_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-сервер находятся в одной локальной сети . В этом случае они оба будут получать широковещательные dhcp-запросы клиентов на получение ip-адреса и сервер будет отправлять ответы клиентам напрямую . Нам же нужно, чтобы запрос приходил только к DHCP-агенту, а агент его уже пробрасывал на сервер. Этого можно добиться с помощью организации сети или ещё какими-либо другими способами, но один из вариантов - это поднять сервер на другом порту, чтобы он не получал запросы клиентов на 67-ом. Стандартный сервер dhcpd позволяет это сделать . В этом случае вам понадобится изменить этот параметр.
dhcp.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).