В компьютерных сетях, подмена ARP, отравление кэша ARP или ARP
маршрутизация ядов - это техника, с помощью которой злоумышленник отправляет (подделывает)
Сообщения протокола разрешения адресов (ARP) в локальную сеть.
Обычно цель состоит в том, чтобы связать MAC-адрес злоумышленника с
IP-адрес другого хоста, такого как шлюз по умолчанию, вызывая любой
трафик, предназначенный для отправки этого IP-адреса злоумышленнику.
Wiki
Как указано в документации Scapy,
Атака отравления кэша ARP не позволяет клиенту присоединиться к шлюзу
отравив кеш ARP через атаку с перескоком VLAN.
Под этим они подразумевают, что бедный клиент не сможет отправлять свои пакеты на шлюз (в данном случае это точка доступа) и не сможет обмениваться данными с внешними ресурсами. Обратите внимание, однако, что тот же самый клиент все еще будет в состоянии общаться с другими узлами в VLAN. Даже с атакующим (при условии, что он также подключен к той же сети WiFi).
Давайте пройдем эту атаку шаг за шагом.
Прежде чем двигаться дальше, давайте проверим текущую таблицу ARP на стороне клиента (до того, как атака будет выполнена). В Linux для просмотра таблицы ARP необходимо выполнить следующую команду:
$ sudo arp -n
Address HWtype HWaddress Flags Mask Iface
192.168.1.1 ether 54:f6:15:f5:51:55 C wlan0
Как вы можете видеть, таблица ARP имеет только одну запись, в которой указан IP-адрес шлюза (192.168.1.1) и его MAC-адрес (54: f6: 15: f5: 51: 55).
Когда атакующий выполняет в Scapy следующую команду:
send(Ether(dst=clientMAC)/ARP(op="who-has", psrc=gateway, pdst=client))
создает и отправляет следующий пакет:
На уровне Ether MAC-адрес назначения dst
настроен так, чтобы указывать на MAC-адрес клиента (жертвы). В то же время Scapy автоматически заполняет другие поля уровня эфира, что наиболее важно, поле src
, в котором установлен MAC-адрес злоумышленника. Это означает, что на уровне Ether пакет кажется полученным от атакующего. Другие поля эфирного слоя остались без изменений и содержат значения по умолчанию. Вы можете увидеть это сами, если в Scapy выполните следующую команду:
a = Ether(dst="clientMAC")
a.show()
Теперь на IP-уровне злоумышленник создает пакет запроса ARP, в котором он устанавливает поле psrc
(исходный IP-адрес) для указания IP-адреса шлюзового узла (в данном случае AP). Теперь, помните, что ранее, на уровне эфира Scapy заполнил для нас поле src
и установил его так, чтобы он указывал на MAC-адрес атакующего. Это означает, что окончательный пакет, который отправляется клиенту (жертве), будет выглядеть так, как будто он получен с хоста, который имеет MAC-адрес атакующего и IP-адрес шлюза. Мы вернемся к этому позже. А пока давайте двигаться дальше. Наконец, IP-адрес клиента устанавливается в качестве пункта назначения для пакета в поле pdst
.
Пакет создан и отправлен Клиенту (жертве).
Клиент получает этот пакет и проверяет его содержимое. Он видит, что ARP-запрос поступил с IP-адреса шлюза (предположим, что это 192.168.1.1). Он проверяет поле MAC-адреса psrc
на уровне Ether пакета (предположим, что это a9: 2b: 24: 9c: fd: c7) и обновляет таблицу ARP, которая теперь выглядит следующим образом:
$ sudo arp -n
Address HWtype HWaddress Flags Mask Iface
192.168.1.1 ether a9:2b:24:9c:fd:c7 C wlan0
Как видите, IP-адрес остался прежним, но MAC-адрес изменился. Итак, теперь, когда клиент отправляет пакеты на узел шлюза, он фактически отправляет их на MAC атакующего. Если целью злоумышленника является предотвращение связи Клиента со Шлюзом, эти пакеты будут отброшены и никогда не будут доставлены в желаемое место назначения.
Пока Злоумышленник продолжает отправлять созданные пакеты ARP Клиенту, Клиент не сможет обмениваться данными со Шлюзом. Как только Злоумышленник останавливается, реальный запрос ARP от Шлюза с реальными IP и MAC-адресами в конечном итоге поступит к Клиенту, восстанавливающему нормальную связь. Вот почему вы, как злоумышленник, вероятно, захотите создать цикл для отправки вредоносных пакетов, например:
sendp(Ether(dst=”CLIENT-MAC”)/ARP(op="who-has", psrc=”GATEWAY-IP”, pdst=”CLIENT-IP”), inter=0.2, loop=1)
С этим бесконечным циклом вы фактически блокируете связь между клиентом и шлюзом.