В этой статье напишем программу на Python для эвристического обнаружения признаков ARP-спуфинга.
Еще по теме: Python скрипт для сканирования портов
Python для обнаружения признаков ARP-спуфинга
Для обнаружения признаков ARP-спуфинга, мы создадим собственную ARP-таблицу, используя словарь, а потом проверим, изменил ли полученный пакет запись в ней. При этом мы будем предполагать, что любой пакет, изменяющий состояние нашей таблицы, является вредоносным.
Сначала выберем библиотеку, которая может как перехватывать, так и анализировать пакеты, проходящие через нашу сетевую карту. Scapy — это популярная библиотека Python, которая позволяет читать и отправлять пакеты.
Прежде чем использовать инструмент Scapy, необходимо установить его с помощью команды pip3.
Для начала установим pip3:
1 |
sudo apt-get install python3-pip |
Теперь установим Scapy:
1 |
pip3 install --pre scapy[basic] |
После установки Scapy можно импортировать библиотеку sniff, которая позволит перехватывать и проверять пакеты, проходящие через сетевую карту.
Скопируйте и вставьте следующий код программы на языке Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
from scapy.all import sniff IP_MAC_Map = {} def processPacket(packet): src_IP = packet['ARP'].psrc src_MAC = packet['Ether'].src if src_MAC in IP_MAC_Map.keys(): if IP_MAC_Map[src_MAC] != src_IP : try: old_IP = IP_MAC_Map[src_MAC] except: old_IP = "unknown" message = ("\n Possible ARP attack detected \n " + "It is possible that the machine with IP address \n " + str(old_IP) + " is pretending to be " + str(src_IP) +"\n ") return message else: IP_MAC_Map[src_MAC] = src_IP sniff(count=0, filter="arp", store = 0, prn = processPacket)) |
Функция sniff() в библиотеке Scapy принимает несколько необязательных параметров. В данной реализации мы используем параметр count, позволяющий указать количество пакетов, подлежащих анализу. Значение 0 говорит о том, что библиотека должна анализировать пакеты непрерывно.
Мы также используем параметр filter для указания типа пакета, который требуется перехватить. Поскольку нас интересуют только ARP-пакеты, в качестве значения фильтра мы указываем arp.
Параметр store указывает количество сохраняемых пакетов. Мы задаем для него значение 0, так как не хотим тратить память на хранение пакетов.
Наконец, параметр prn представляет собой указатель на функцию, вызываемую при получении пакета. В качестве входных данных он принимает единственный параметр, представляющий полученный пакет.
1 |
sudo python3 arpDetector.py |
Во время работы программы откройте другой терминал Kali и выполните ARP спуфинг.
Затем завершите эту атаку, нажав сочетание клавиш «Ctrl + C». Это заставит инструмент arpspoof отправить пакеты, восстанавливающие содержимое ARP-таблицы.
Когда программа Python обнаружит эти пакеты, вы увидите следующее сообщение:
1 2 3 |
Possible ARP attack detected It is possible that the machine with IP address 192.168.0.67 is pretending to be 192.168.48.67 |
Таким образом можно обнаружить любую попытку ARP-спуффинга.
Еще по теме: