![]() |
Об ARP-спуфинге говорят немало. Это один из простейших видов атаки Man-in-the-Middle. Решил и я внести посильный вклад в копилку информации, ибо не обошло это и меня, как начинающего писать код. Далее я опишу код на Python, который делает рассылку ARP-ответов атакуемой машине и роутеру. О целесообразности данного вида атак я напишу немного ниже.
Целесообразность данного вида атаки Самая большая сложность будет заключаться в том, чтобы подсоединиться к атакуемой сети. И если, в случае с общественными Wi-Fi сетями проблем особых не возникнет, то вот подключение к сетям в каких-либо организациях может вызвать некоторые сложности. Но, предположим, что вы подключились. И тут начинается интересное. Многие сейчас начнут говорить о том, что современные маршрутизаторы защищены от данного вида атак. И да, так оно и есть. Вполне себе дорогущие Cisco. Но много ли таких маршрутизаторов стоит в организациях? Это уже вопрос. Не все могут себе позволить такую роскошь, если вы конечно не пенсионный фонд. Но это так, к слову. А на деле, не буду говорить про города, ситуация довольно печальная. Ведь помимо городов есть и поселки городского типа. А уж в этих поселках я поработал в разного рода бюджетных организациях и могу сказать, что да, на выходе в интернет у некоторых стоят VipNet координаторы. Но, это только у некоторых. И только в интернет. А вот внутренние сети объединяются между собой с помощью дешевого оборудования. Разговоров о безопасности КИИ, то есть объектов критической информационной инфраструктуры много. Но, на деле все несколько печальнее. К примеру, в некоторых организациях, не буду говорить каких, для передачи данных содержащих персональную информацию в другие организации стоит VipNet Client. Но и только. Все остальное передается просто так. Посредством обычной почты. А это львиная доля информации. Более того, даже серваки которые коннектятся к базам данных, не подключены к частной випнетовской сети. То есть, все передается напрямую. В общем и целом, если подытожить. Если вы попали внутрь такой сети, то у вас откроется большой простор для действий. А значит и целесообразность атак вполне себе оправдана. Да, забыл упомянуть, что некоторые организации вообще уникумы. Помимо защищенной сети координатором проводят себе дополнительную точку доступа, к примеру, от Ростелекома и пользуются ей. А она зачастую имеет в своем составе Wi-Fi роутер. Знал я такую организацию, офис которой располагался на 4 этаже. А вот сигнал роутера можно было ловить во дворе здания. То есть, немного желания и прямые руки, и дорожка во внутреннюю сеть будет проложена. Другое дело, что это пгт, и там особо никто не задумывается о данной проблеме. Что потребуется? Установить библиотеку getmac, она будет нужна для определения локального mac-адреса машины. netifaces, для получения локального ip. Установить библиотеку scapy, которая и будет использоваться для отправки ARP-ответов. Ну и импортировать несколько стандартных модулей. Код: Код:
pip install getmac netifacesPython: Код:
importВспомогательные функции Для начала давайте создадим несколько вспомогательных функций. Они облегчат проведение ARP-spoofing. В принципе, все сведется даже к тому, что нужно будет ввести только адрес атакуемой машины. И да, если сеть не раздает адреса по DHCP, то тут нужно будет постараться. И ручками менять код. Но, это другая история. У нас ведь идеальный тестовый стенд. Тем более, что перед данного вида атаками нужно провести хотя бы минимальную предварительную подготовку и исследовать ту сеть, которую будете атаковать. Получаем локальный IP-адрес сетевого интерфейса, который используется в данный момент по умолчанию. Python: Код:
defТеперь нужно получить адрес шлюза по умолчанию. Ведь именно на него будет направлена атака. Для этого сделаем функцию get_gateway_linx(). Данная функция будет работать только в Linux. Для Windows машин это делается похоже, но команды используются несколько иные. Python: Код:
defТеперь просканируем сеть на наличие в ней машин, их ip и mac адресов. Ведь нам нужно понимать и видеть, что мы будем атаковать, а не вводить наугад значения. Подробно останавливаться на данной функции не буду. Если вкратце, то она отправляет широковещательный ARP-запрос по всем ip адресам данной подсети, а именно той, в которой находится машина атакующего. И результат сканирования сохраняется в список из словарей. Функцию сканирования сети я уже описывал в этой статье. Python: Код:
defPython: Код:
defА теперь функции отправки ответов. Оригинальничать я не стал и назвал ее arp_spoof(target_ip, spoof_ip). На входе она получает адрес атакуемой машины и адрес цели, которой нужно передать данные об атакуемой машине, то есть адрес роутера. Или наоборот. Ведь нам нужно передавать пакеты в обе стороны. Чтобы и машина и роутер принимали машину атакующего за что-то другое. Со стороны роутера — за целевую машину. Со стороны машины — за роутер. Python: Код:
defЧто здесь происходит? Создается пакет типа ответ, в котором передается информация о том, что я машина с таким-то IP и MAC адресом являюсь роутером. Так как передача данных идет в доверенной сети, то атакуемая машина автоматически записывает полученное значение в свою ARP-таблицу. Ну, а далее, данный пакет передается в сеть. И параметр verbose, который подавляет вывод значений в терминал. Все довольно просто. Восстановление ARP-таблицы И да, давайте сразу создадим функцию которая будет принудительно восстанавливать значение атакуемой машины и роутера в ARP-таблицах для скрытия следов атаки. А то, мало ли чего. Хотя, так то, примерно через 2 минуты записи обновятся автоматически. Но, все же желательно замести следы. Создадим функцию restore_arp(target_ip, spoof_ip), которая также принимает адрес целевой машины и роутера. И так же как и в предыдущей функции формируем ARP-пакет. Но здесь мы явно указываем параметр hwsrc, которого не было в предыдущем пакете. По умолчанию, если данного параметра нет, то отправляется mac-адрес машины, с которой и уходит ARP-ответ. Но, нам то надо восстановить таблицы. Потому указываем, что mac-адрес машины отправившей данный ответ такой-то. То есть, для атакованной машины это будет реальный mac-адрес роутера, а для роутера машины. Ну и все это дело отправляем четыре раза, для большей уверенности, что ничего не потеряется, будет доставлено и принято. И также отключаем в машине атакующего ip форвардинг, то есть автоматическую пересылку всех пакетов. Python: Код:
defНу и последняя функция main(). Делаем для начала проверку, запущен ли скрипт с правами суперпользователя: Python: Код:
ifPython: Код:
local_ipPython: Код:
packet_countЗапускаем скрипт. Видим информацию о машинах в сети. После чего вводим ip-жертвы и наблюдаем за работой. Тут понятное дело, нужно теперь запустить что-то, что будет пакеты проходящие через нашу машину прослушивать и отлавливать нужную информацию. Можно воспользоваться Wireshark, а можно создать свой скрипт для прослушивания трафика. Но, об этом, возможно, в следующий раз. Спасибо за внимание. Надеюсь, что данная информация кому-нибудь будет полезна |
велосипед...
но чую что тебе нужно замутить captive-portal на этом замечательном языке) да бы в историю! попасть) т.к. он имеется на Interceper-NG но там виндовс - это есть не практично , а вот на питоне зашло бы ) т.к. его + можно накатить на ту же raspbery как вариант.. + уверен много бы людей с экономили на данной услуге, те же бюджетные отели бары и т.д. в общем везде бы это пригодилось) как думаешь? |
Цитата:
|
| Время: 01:04 |