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

В статье детально описана техника атаки ARP-spoofing, рассмотрены такие методы обнаружения и предотвращения ARP-атак,использование VLAN и PPPoE.
Что такое и для чего нужен ARP

Протокол ARP предназначен для преобразования IP-адресов в MAC-адреса. Чаще всего речь идёт преобразовании в адреса Ethernet, но ARP используется и в сетях других технологий: Token Ring, FDDI и других.

Дополнительная информация:
Address Resolution Protocol — страница в WikipediA
RFC 826 — описание стандарта ARP
Алгоритм работы ARP

Протокол может использоваться в следующих случаях:
Хост A хочет передать IP-пакет узлу B, находящемуся с ним в одной сети;
Хост A хочет передать IP-пакет узлу B, находящемуся с ним в разных сетях, и пользуется для этого услугами маршрутизатора R.

В любом из этих случае узлом A будет использоваться протокол ARP, только в первом случае для определения MAC-адреса узла B, а во втором — для определения MAC-адреса маршрутизатора R. В последнем случае пакет будет передан маршрутизатору для дальнейшей ретрансляции.

Далее для простоты рассматривается первый случай, когда информацией обмениваются узлы, находящиеся непосредственном в одной сети. (Случай когда пакет адресован узлу находящемуся за маршрутизатором отличается только тем, что в пакетах передаваемых после того как ARP-преобразование завершено, используется IP-адрес получателя, но MAC-адрес маршрутизатора, а не получателя.)
Проблемы ARP

Протокол ARP является абсолютно незащищённым. Он не обладает никакими способами проверки подлинности пакетов: как запросов, так и ответов. Ситуация становится ещё более сложной, когда может использоваться самопроизвольный ARP (gratuitous ARP).

Самопроизвольный ARP — такое поведение ARP, когда ARP-ответ присылается, когда в этом (с точки зрения получателя) нет особой необходимости. Самопроизвольный ARP-ответ это пакет-ответ ARP, присланный без запроса.Он применяется для определения конфликтов IP-адресов в сети: как только станция получает адрес по DHCP или адрес присваивается вручную, рассылается ARP-ответ gratuitous ARP.

Самопроизвольный ARP может быть полезен в следующих случаях:
Обновление ARP-таблиц, в частности, в кластерных системах;
Информирование коммутаторов;
Извещение о включении сетевого интерфейса.

Несмотря на эффективность самопроизвольного ARP, он является особенно небезопасным, поскольку с его помощью можно уверить удалённый узел в том, что MAC-адрес какой-либо системы, находящейся с ней в одной сети, изменился и указать, какой адрес используется теперь.

Подробнее:
Gratuitous_ARP на wiki.wireshark.org
ARP-spoofing

До выполнения ARP-spoofing'а в ARP-таблице узлов A и B существуют записи с IP- и MAC-адресами друг друга. Обмен информацией производится непосредственно между узлами A и B.

В ходе выполнения ARP-spoofing'а компьютер C, выполняющий атаку, отправляет ARP-ответы (без получения запросов):
узлу A: с IP-адресом узла B и MAC-адресом узла C;
узлу B: с IP-адресом узла A и MAC-адресом узла C.

В силу того что компьютеры поддерживают самопроизвольный ARP (gratuitous ARP), они модифицируют собственные ARP-таблицы и помещают туда записи, где вместо настоящих MAC-адресов компьютеров A и B стоит MAC-адрес компьютера C. 

После того как атака выполнена, когда компьютер A хочет передать пакет компьютеру B, он находит в ARP-таблице запись (она соответствует компьютеру C) и определяет из неё MAC-адрес получателя. Отправленный по этому MAC-адресу пакет приходит компьютеру C вместо получателя. Компьютер C затем ретранслирует пакет тому, кому он действительно адресован — т.е. компьютеру B.
Методы обнаружения
Программа arpwatchотслеживает всю ARP-активность на указанных интерфейсах. Когда она замечает аномалии, например, изменение MAC-адреса при сохранении IP-адреса, или наоборот, она сообщает об этом в syslog.
XArp — аналог arpwatch для Windows
remarp — аналог arpwatch, работающий через SNMP
* ArpStar — система автоматического обнаружения и предотвращения ARP-spoofing'a; возможно восстановление ARP-таблицы заражённых узлов
Методы предотвращения

Борьба с ARP-spoofing'ом с помощью arpwatch и подобных инструментов оказывается хотя и очень простой, но далеко не эффективной.
Во-первых, для того чтобы зафиксировать атаку, на защищаемых узлах должна работать программа arpwatch (или аналогичная). В том случае если она запущена только на одном из двух узлов, подвергающихся ARP-spoofing'у, существует возможность незамеченной односторонней атаки.
Во-вторых, и это более важно, arpwatch позволяет только зафиксировать атаку, но он не в состоянии её предотвратить.

Для предотвращения последствий атаки необходимо вмешательство администратора или внешней системы. В первом случае между обнаружением и реакцией администратора может пройти слишком много времени. Во втором вмешательство не требуется, реакция выполняется автоматически: как только ARP-аномалия зафиксирована, определяется порт коммутатора, к которому подключён источник аномалии, и порт блокируется до выяcнения. Однако, такой подход имеет большой недостаток -- он может быть использован для выполнения DOS атаки: достаточно только узнать MAC адрес компьютера, который надо отключит от сети, и сымитировать атаку с этого компьютера. Дальше наша система обнаружения и предотвращения ARP-spoofing'а все сделает сама.

В основе рассматриваемых способов противодействия ARP-атакам лежат два совершенно раличных принципа, каждый из которых обладает как достоинствами, так и недостатками.

Оба способа, помимо того что они надёжно защищают от ARP-spoofing'а имеют ещё то преимущество, что позволяют полностью контролировать трафик -- не только тот, что проходит через шлюз, но и тот, который циркулирует между машинами (В случае использования PPPoE машины могут по взаимному согласию обмениваться данными между собой напрямую. В случае использования VLAN такой возможности они лишены напрочь.)
Статический ARP

Можно бороться со слабостями протокола ARP кардинально -- просто не использовать его. ARP-таблицу можно сформировать вручную, при этом она становится неуязвимой к ARP-атакам. Для этого нужно добавить необходимые MAC-адреса в таблицу.

Если при этом отключить использование ARP на сетевых интерфейсах, то доступны будут только те системы, (1) MAC-адреса которых добавлены в ARP-таблицу нашего узла и (2) наш MAC-адрес добавлен в ARP-таблицы узлов, с которыми производится обмен трафиком.

Если не отключать использование ARP на сетевых интерфейсах, MAC-адрес заданный статически имеет приоритет. Если MAC-адрес для какого-то IP-адреса не задан, используется ARP-запрос.
Преимущества и недостатки

Метод ручного формирования ARP-таблиц имеет следующие недостатки:
добавляется много рутинной работы, связанной с добавлением и модификацией MAC-адресов. Каждое изменение в сети, связанное с заменой или перестановкой сетевых карт, должно сопровождаться редактирование ARP-таблиц в файлах.
клиентские узлы остаются по-прежнему уязвимыми к ARP-spoofing'у.
Другие методы борьбы с ARP-spoofing'ом

К сожалению, этот метод не применим к Windows-системам, и другим системам, работающим под управлением ОС, исходный код которых недоступен.

Необходимо решить проблему кардинально: нужно так построить сеть, чтобы выполнение ARP-spoofing'а в ней было принципиально невозможно. А если возможным, то бесполезным.

Это можно сделать двумя способами:
Ограничить для каждого узла широковещательный домен до уровня двух узлов: самого узла и ближайшего шлюза. подробнее. Почему атаку невозможно выполнить в этом случае. Тогда атаку просто некому выполнять -- нужен третий. А его нет.
Сделать так чтобы все, абсолютно все, передаваемые в сети данные были зашифрованы и прослушивание этих данных, ни к чему бы не привело. Любое же изменение данных, в случае возникновения, сразу же обнаружено. То есть, фактически сеть должна быть такой же и безопасной при использовании вместо коммутатора концентратора.

Первый способ делается с помощью VLAN'ов. Второй -- с помощью PPPoE.
Использование VLAN
Основная статья: VLAN

Компьютер C может использовать ARP-spoofing против компьютера Aтолько в том случае, если они находятся в одной сети канального уровня. В том случае, если они разделены маршрутизатором, атака невозможна (возможна атака на маршрутизатор, но это совсем другое дело).

VLAN'ы помогают сегментировать сеть -- превратить одну сеть в множество изолированных на канальном уровне фрагментов, которые соединены между собой маршрутизатором. Атака ARP-spoofing возможна только между компьютерами находящимися в одном VLAN'е. В наиболее крайнем случае, когда в каждом VLAN'е находится только два компьютера: собственно компьютер и маршрутизатор, атака ARP-spoofing становится невозможной в принципе. К сожалению, такая организация сети являются очень требовательной к ресурсам маршрутизатора и используется редко.
Преимущества
От клиента ничего не требуется. Он работает, как и работал. Если IP-адрес задан статически, необходима смена IP-адреса и сетевой маски.
Данные не шифруются, и производительность не теряется. Малые потери на дополнительные поля в заголовке.
Нельзя организовать обмен данными в обход шлюза между узлами в разных VLAN'ах. Если каждый узел находится в собственном VLAN'е такой обмен невозможен вообще.
Недостатки
Необходима поддержка VLAN'ов коммутатором.
Необходимо потратить время на настройку VLAN'ов, дополнительную настройку DHCP'сервера.
Данные не шифруются. Если их прослушивание каким-то образом удастся, то они могут быть прочтены и/или модифицированы.
Использование PPPoE
Основная статья: PPPoE
Преимущества
Данные шифруются
Нет никаких требований к железу. Даже не обязательно чтобы сеть была коммутируемой
Недостатки
На клиенте требуется настройка доступа по PPPoE. На некоторых системах требуется инсталляция специального клиентского программного обеспечения.
За счёт потерь на инкапсуляцию, снижается производительность сети. Если выполняется шифрование данных, то временные потери увеличиваются.
При взаимном согласии сторон можно организовать обмен данными между узлами в обход шлюза.
При большом количестве соединений PPPoE (>200) возрастает нагрузка на центральный процессор сервера. Иногда, приходится жертвовать шифрованием данных.
Если будет большая нагрузка на сервер легче использовать PPTPd или IPsec
Мифы и заблуждения, касающиеся ARP-spoofing
ARP-spoofing можно предотвратить с помощью функции port-security коммутаторов

Функция port-security коммутатора позволяет защититься от смены MAC-адреса на порту коммутатора. В том случае если компьютер, подключенный к порту коммутатора меняет MAC-адрес или если меняется компьютер, коммутатор замечает подмену и перестаёт передавать пакеты отправленные с новым обратным адресом. Кроме этого, могут выполняться другие действия: отсылка SNMP-трапа, запись в syslog и тому подобное.

При ARP-spoofing'е MAC-адрес отправителя (атакующего) не меняется и поэтому с точки зрения port-security никаких аномалий нет. Функция port-security никак не отвечает за соответствие IP-адресов и MAC-адресов, а атака ARP-spoofing построена именно на этом.
ARP cache poisoning

Компьютер, связанный с IP/Ethernet  сетью имеет два адреса. Глобально-уникальный  MAC адрес  для каждого сетевого интерфейса и логический IP адрес, назначенный программой. Протокол определения адресов (ARP protocol) формирует ассоциацию между этими двумя адресами. Когда компьютер должен послать пакет IP адресу, расположенному в той же самой сети, он пошлет широковещательное сообщение "ARP who has ?". Как показано на рисунке, владелец IP адреса отвечает со своим Ethernet адресом.

Чтобы минимизировать широковещательные ARP запросы, операционные системы кэшируют ARP ответы. 

К сожалению, протокол определения адресов не поддерживает состояние подключения (stateless), и большинство операционных систем обновляет кэш при получении ARP ответа, независимо от того, отослали ли они фактический запрос. Посылая поддельные ARP ответы, атакующий может заставить операционную систему посылать фреймы, предназначенные одному компьютеру на другой компьютер. Этот процесс известен как "ARP Cache poisoning".

В зависимости от операционной системы, отравление кэша может быть достигнуто восемью типами ARP сообщений со следующими свойствами:
ARP сообщение послано в MAC broadcast или MAC unicast.
Код операции может быть "ARP Who is" или "ARP Reply".
ARP сообщение - допустимое сообщение или недопустимое (внедрение тех же самых IP адресов для источника и адресата)

Согласно проведенным испытаниям на операционных системах Windows 9x, NT, 2000, XP, Solaris 8, Linux kernel 2.2 и 2.4, Cisco IOS 12, Nokia IPSO 3.5, существует не менее одного типа ARP сообщения, способного отравить кэш. Кроме того, на системах Windows (9x/NT/2K), статическая ARP запись может всегда быть перезаписана, используя фальшивое ARP сообщение.

Обратите внимание, что из-за способа обработки  MAC адреса на концентраторе, имитация источника MAC адреса приведет к тому, что злонамеренный пользователь некоторое время будет получать весь трафик, предназначенный подмененной системе, вызывая тем самым отказ в обслуживании на короткое время.
IP Smart Spoofing

Используя отравления ARP кэша, злонамеренный пользователь вставляет свой компьютер по пути связи от сервера к клиенту. Используя IP переадресацию, существующий трафик все еще направляется к клиенту. Конечно, ICMP Redirect должен быть заблокирован на компьютере злонамеренного пользователя. Наконец,  SNAT (Source Network Address Translation) используется злонамеренным пользователем для обмана IP адреса клиента и установления нового подключение к серверу.

После этого, злонамеренный пользователь может запустить любые стандартные сетевые приложения, чтобы подключиться к серверу, используя IP адрес клиента. Любое управление доступом, основанное на IP адресе клиента,  будет успешно обойдено. Кроме того, существующий трафик не будет нарушен со стороны сервера, т.е. smart spoofing атака не может быть обнаружена.
Воздействие Smart Spoofing

Сетевые устройства, типа маршрутизаторов или межсетевых защит часто используют фильтрацию по IP адресу источника. Эти правила могут быть обойдены с любого компьютера, расположенного на сетевом пути между авторизованным клиентом и межсетевой защитой. Например, в большинстве корпоративных сетей, подключенных к Internet через межсетевую защиту, только немногие из идентифицированных компьютеров могут непосредственно обращаться к интернету (внутренний прокси сервер, получение/отправка SMTP сообщений на прямую, и т.п). Используя smart spoofing, любой внутренний пользователь может обойти правила фильтрации.

Тем же самым способом, приложение, доступ которого ограничен определенным IP адресам, может неправильно эксплуатироваться любым компьютером, расположенным на сетевом пути между авторизованным клиентом и сервером. Уязвимость может воздействовать на многие приложения, типа Apache ACL, r-commands, NFS, TCP Wrapper, ограниченные административные средства, и т.д