ARPspoofing (ARPpoisoning) — разновидность сетевой атаки типа MITM (англ. Man in the middle), применяемая в сетях с использованием протокола ARP.

ARP или Address Resolution Protocol — протокол канального уровня, используемый для определения MAC-адреса по заданному IP-адресу в семействе протоколов IPv4. В семействе протоколов IPv6 ARP не существует, его функции возложены на ICMPv6. Однако мы все еще имеем огромное количество сетей, работающих с IPv4. И сегодня мы поговорим об известной атаке arp-spoofing и утилитах Kali Linux , позволяющих ее реализовать.

Коротко о работе протокола

Рассмотрим ситуацию, когда компьютеры A и B находятся в разных локальных сетях и связаны друг с другом через Интернет. Для передачи данных, компьютер A использует IP-адрес компьютера B в качестве адреса назначения и отправляет пакет в Интернет. Пройдя через серию маршрутизаторов, он попадает на шлюз сети, которой принадлежит компьютер B.
В локальной сети компьютера B для адресации используются 6-ти байтные MAC-адреса и, когда пакет достигает шлюза, дальнейшая доставка данных по локальной сети возможна, только если известен MAC-адрес компьютера B. Если шлюзу MAC-адрес не известен, он отправляет в сети широковещательный ARP-запрос, суть которого состоит в следующем «Компьютер с IP-адресом компьютера B, сообщите мне (шлюзу) свой MAC-адрес». Т.к. запрос широковещательный, он достигает компьютера B и в ответ он посылает ARP-ответ со своим MAC-адресом. Остальные компьютеры сети не посылают никаких пакетов на ARP-запрос шлюза, т.к. имеют IP-адреса, отличные от IP-адреса компьютера B. Шлюз, получив MAC-адрес компьютера B, заносит в свою ARP-таблицу (кэш) соответствие IP-адрес и MAC-адрес компьютера B и, затем, отправляет на него данные, полученные через Интернет от компьютера A. В то же время компьютер B заносит в свою ARP-таблицу соответствие IP и MAC адресов шлюза, чтобы иметь возможность посылать данные компьютеру A.
На первый взгляд все должно работать просто и надежно, если бы не одна особенность — ARP не проверяет подлинность ARP-запросов и ARP-ответов и позволяет отправлять ARP-ответы узлам сети произвольно, т.е. даже если узел не отправлял в сети никаких ARP-запросов. Самопроизвольные ответы нужны, например для выявления конфликтов IP-адресов в локальной сети. Подробнее можно прочитать здесь Gratuitous_ARP

ARP-poison

Предположим, что нам нужно прослушивать данные, передаваемые между компьютерами A и B. Наш компьютер находится в одной локальной сети с компьютером B. У нас есть свой MAC-адрес, мы знаем MAC-адрес компьютера B и MAC-адрес шлюза нашей локальной сети.
Компьютеры в современных локальных сетях соединены друг с другом через коммутаторы. Коммутатор «помнит» к какому порту подключен хост с каким MAC-адресом. Т.е. получив пакет от компьютера B шлюзу, мы этот пакет не получим, т.к. он не будет отправлен на все порты коммутатора, а лишь на тот, к которому, по мнению коммутатора, сейчас подключен шлюз. Во времена, когда использовались хабы вместо коммутаторов, мы могли бы слушать трафик без каких-либо проблем.
Атаку ARP-spoofing часто называют так же ARP-cache poisoning и это название весьма говорящее.
Т.к. нам позволено отправлять ARP-ответы любому узлу сети когда нам захочется, мы отправим ARP-ответ шлюзу такого содержания «Я узел сети с IP-адресом компьютера B, и вот мой MAC-адрес [MAC-адрес нашего хоста]» а компьютеру B отправим ARP-ответ такого содержания «Я шлюз и мой MAC-адрес [снова MAC-адрес нашего хоста]». Получив такие пакеты, шлюз и компьютер B обновят свой ARP-кэш.
Теперь, если компьютер B захочет отправить данные через Интернет компьютеру A, он пошлет свои данные, как он считает в соответствии со своей ARP-таблицей, на MAC-адрес шлюза, тогда как в действительности данные будут отправлены на наш MAC-адрес, а мы, в свою очередь, отправим их дальше на настоящий MAC-адрес шлюза. Ответ от компьютера А снова пройдет через нашу машину.

Реализация атаки в Kali Linux

Увидеть содержание ARP-таблицы хоста можно следующим образом.

В системах Windows:
arp -a

В системах Linux:
arp

Для проведения атаки arp-spoofing в Kali Linux должны быть разрешены транзитные пакеты.
Разрешить IPv4 форвардинг можно отредактировав файл /etc/sysctl.conf
Нужно раскомментировать строку
net.ipv4.ip_forward = 1
После чего выполнить команду
sysctl -p /etc/sysctl.conf
Если же вы не хотите разрешать это на постоянно основе, можно разрешить форвардинг так
echo 1 > /proc/sys/net/ipv4/ip_forward

Так же стоит убедиться, что транзитный трафик не блокируется правилами iptables.

В Kali Linux Rolling 2016.2 предустановлены следующие инструменты для проведения атаки ARP-spoofing:

arpspoof

Пример использования:
arpspoof -i eth0 -t [ip жертвы] [ip шлюза жертвы]
arpspoof -i eth0 -t [ip шлюза жертвы] [ip жертвы]
-i — указывает интерфейс, подключенный к локальной сети жертвы
-t — указывает IP-адрес хоста, arp-кэш которого требуется «отравить». Если ключ не указан, атака будет проведена по всех хостам в сети, т.е. все участники сети, при попытке отправить пакет шлюзу, будут отправлять его нам.

или одной командой
arpspoof -i eth0 -t [ip шлюза жертвы] -r [ip жертвы]
ключ -r указывает arpspoof «отравлять» arp-кэш обеих хостов.

ettercap

ettercap -G

Выбрать Unified sniffing и интерфейс

1

Просканировать сеть

0

Добавить жертву и шлюз в разные группы целей

0-1

Выбрать Mitm -> ARP poisoning

3

Отметить sniff remote connections и запустить

4

Фреймворк метасплойт

Можно ипользовать акзилари модуль метасплойта auxiliary/spoof/arp/arp_poisoning

msfconsole
use auxiliary/spoof/arp/arp_poisoning
set BIDIRECTIONAL true
set INTERFACE eth0
set DHOST [ip-адрес шлюза]
set SHOST [ip-адрес жертвы]
set LOCALSIP [ip-адрес нашего хоста]
exploit

Помимо предустановленных инструментов, можно установить и использовать следующие:

arpoison
Фреймворк mitmf
Консольная версия Intercepter-NG

Также стоит добавить, что после проведения атаки следует корректно ее завершать, восстановив валидные записи в arp-таблицах атакованных хостов.

Что потом?

После проведения атаки ARP-spoofing мы можем запускать сниффер и слушать трафик участников сети.
В сети могут присутствовать средства обнаружения данной атаки и при проведении пентеста нужно это учитывать. В конце концов arp-poisoning — лишь один из способов оказаться на пути трафика между двумя хостами и целесообразность его применения зависит от условий, в которых проводится тестирование.