Mac spoofer не работает

Войны в песочнице – Часть 3. ARP-Spoofing, бесполезность фильтрации по MAC-адресу и опасность установки неподписанного ПО

Прошло чуть более года с момента публикации предыдущих статей (1, 2), и только недавно обстоятельства сложились так, что у меня появился повод для проведения новой атаки.

В этот раз физического доступа к сетевой инфраструктуре нет. Есть лишь ноутбук с доступом в интернет по Wi-Fi. Жертва – сосед по общежитию — подключена к другой точке доступа (DIR-320) по Ethernet, но пароль для подключения к точке известен почти всем, т.к. её хозяин предпочитает использовать в качестве средства разграничения доступа фильтрацию по MAC-адресам, добавляя и удаляя адреса из базы по мере необходимости. Моего MAC-адреса в списке разрешенных нет.

Ок, подключаемся, делаем несколько тестов, и видим, что фильтрация MAC-адресов происходит только на сетевом уровне, то есть точка доступа не отказывается:

  • пересылать мои фреймы в Ethernet сегмент, и доставлять ответы
  • отвечать на ARP-запросы и принимать ARP-ответы

Единственное что точка доступа отказывается делать, так это взаимодействовать с чужаком на сетевом уровне, то есть IP-адрес она мне через DHCP не выдаёт, пропинговать её нельзя и в интернет через неё тоже не выйти.

ARP-Spoofing

Для тех кто не знает что такое ARP и ARP-Spoofing – небольшой ликбез. Сетевой уровень, на котором используются IP-адреса, используется поверх канального уровня (на нём используются MAC-адреса, задающиеся производителями сетевой карты). Отправляя IP-пакет, компьютер должен обернуть его в Ethernet-фрейм, указав MAC-адрес получателя (или шлюза). Чтобы узнать MAC-адрес получателя, компьютер делает широковещательный ARP-запрос вида «Компьютер с ip a.b.c.d, отзовись!». Компьютер a.b.c.d отвечает ARP-ответом вида «a.b.c.d – это я, мой MAC-адрес следующий: 00:11:22:33:44:55». Причем ответ можно посылать даже если не было запроса и он будет обработан. Все компьютеры поддерживают кэш соответствий IP → MAC и при каждом удобном случае (получен ARP-запрос/ответ) его обновляют.

Читайте также:  Не работает пульт от ростелекома не переключает каналы

Никакой аутентификации на уровне ARP нет, на чем и основана атака ARP-spoofing. Достаточно представиться (отправить ARP-ответ) роутеру жертвой, а жертве роутером, чтобы проксировать через себя их трафик.

Но, раз в интернет точка доступа меня не пускает, то классический вариант ARP-спуфинга – встать между жертвой и роутером – не пройдёт. Раз так, можно встать не между жертвой и роутером, а вместо роутера. Идём на рынок, покупаем USB-WiFi адаптер, подключаемся встроенным адаптером (отключив на нём IP-протокол) к целевой сети, а вторым – к своей, чтобы иметь канал в интернет. Создаём в VirtualBox виртуальную машину с двумя адаптерами, первый соединяем мостом с целевой сетью, на втором делаем NAT. Настраиваем NAT внутри виртуальной машины-роутера, запускаем на ней же arpspoof с целью убедить компьютер жертвы, что MAC-адрес роутера сменился на наш.

В результате жертва будет отправлять пакеты не настоящему роутеру, а нашему, который сможет маршрутизировать их в интернет, просматривая и модифицируя. Практически стандартная схема ARP-спуфинга. Лишь с одним небольшим недостатком – она не работает. Точнее работает, но с такими перебоями, что жертва не может не заметить проблем с сетью.

Посмотрев на трафик в сети, можно понять почему. Да, мы уведомляем раз в секунду роутер жертвы о том что адрес 192.168.0.105 принадлежит нам, и жертву о том, что ip адрес 192.168.0.1 принадлежит нам. Однако в сети есть и другая ARP-активность. Например роутер периодически вещает в сеть «192.168.0.109, где ты?», причем такого адреса в сети нет. Причины этой активности не очень ясны – возможно на роутере прокинут порт с внешнего ip на этот адрес. Но ни к чему хорошему такая общительность со стороны роутера не приводит. Компьютер жертвы видит этот широковещательный запрос, и, хоть запрос и не относится к нему, обновляет у себя в кэше информацию о MAC-адресе роутера. В итоге получается race condition, и жертва отправляет исходящие пакеты то на наш адрес, то на адрес настоящего роутера.

Что же делать? Раз роутер так волнуется из-за несуществующих ip-адресов, нужно его утихомирить, например, сказав ему что эти адреса принадлежат нам. Итак:

  • Раз в пару секунд посылать широковещательный запрос ARP request всем адресам сегмента, чтобы выяснить, кто же есть в сети
  • Раз в десять секунд для каждого IP-адреса, который мы давно не видели в сети, отправлять ARP reply роутеру, сообщая, что этот адрес принадлежит нам

После добавления такой функциональности в виде скрипта на python, парсящего вывод tcpdump arp и рассылающего ARP-запросы и ответы, сбоев связи стало гораздо меньше. Когда какой-либо компьютер подключается к сети, он обычно начинает свою деятельность с ARP запроса своего IP и IP роутера, вследствие чего мы видим что он появился и перестаем выдавать себя за него. Когда компьютер отключается, мы видим что он отключился и занимаем его место. В итоге у роутера теперь нет поводов посылать широковещательные ARP-запросы и сбивать компьютер жертвы с толку.

Получение контроля над машиной

Прослушивание http-трафика, или использование sslstrip, с целью прослушать трафик ssl-enabled сайтов нас сейчас не интересует – во-первых это старо, во-вторых в трафике ничего интересного мы не найдём. Хочется получить полный контроль над целевой машиной.

Бэкдор

Для максимальных привилегий наша программа-бэкдор должна запускаться от имени LocalSystem. Для этого пишем Windows Service (на C# это пара десятков строк, которые к тому же генерирует IDE). Для управления будем использовать протокол Jabber (agsXMPP). Сервис будет при запуске коннектиться к Jabber-серверу, и ожидать команд. Управлять им можно будет с помощью любого Jabber-клиента, посылая команды через чат. Что касается команд – cmd.exe почему-то с точки зрения Windows считается программой с UI, а системным службам взаимодействовать с пользователем нельзя. Запустить cmd.exe из службы так и не удалось. В итоге было решено вместо команд оболочки cmd передавать боту код на C#, который он будет интепретировать и возвращать результат, получается достаточно универсальный «шелл».

Инсталлятор

Инсталлятор хранит в себе исполняемый файл и библиотеки сервиса и при запуске делает следующее:

  1. Сохранить файлы сервиса в какое-нибудь укромное место в директории %WINDOWS%
  2. Инсталлировать сервис
  3. Сделать HTTP GET на http://google.com/success (зачем это нужно – станет понятно позже)

Установка

Теперь нужно как-то заставить клиента запустить наш инсталлятор.

Посмотрим на автоматические обновления, может быть удастся подменить их. По HTTP-заголовкам выясняем, что на машине в качестве браузера стоит Opera, но, как оказалось, её обновления идут по https, так что нам они не по зубам. Обновления от Microsoft идут по plain-http, но там, наверняка, каждый файл обновления имеет цифровую подпись, которая проверяется перед запуском, всё-таки в MS не школьники работают.

Ок, с автоматическими обновлениями ничего поделать не удается, остаётся надеяться на невнимательность пользователя. Попробуем внедрить инсталлятор в первый попавшийся скачиваемый исполняемый файл.

Для этого пишем прозрачный прокси (на Twisted это чуть более сотни строк), который помимо своих обычных обязанностей выполняет следующие действия:

  • Если URL запроса равен google.com/serviceinstaller, то в качестве ответа отдаём созданный ранее бинарник инсталлятора
  • Если URL запроса равен google.com/success, то доложить мне об успехе и перейти в режим обычного честного прокси
  • Если код ответа сервера равен 200, Content-Type принадлежит списку [‘application/octet-stream’, ‘application/x-msdownload’, ‘application/exe’, ‘application/x-exe’, ‘application/dos-exe’, ‘vms/exe’, ‘application/x-winexe’, ‘application/msdos-windows’, ‘application/x-msdos-program’, ‘application/binary’], и Content-Length не превышает 20 мегабайт, то:
    1. Скачать файл
    2. Отправить файл POST-запросом на основную машину (т.к. там Windows) для дальнейшего анализа
    3. Ответ на POST-запрос отправить клиенту (соответственно подправив заголовки Content-Length и Content-MD5)

Запускаем этот прокси-сервер на роутере-виртуалке и перенаправляем с помощью iptables весь HTTP трафик на него.

Теперь пишем на C# проект-обертку, главная программа которого в качестве ресурса включает в себя в качестве ресурса исполняемый файл original.exe (пока что создадим просто пустой файл с таким именем). Прописываем в манифесте обертки, что она должна запускаться с правами администратора. Код обертки крайне прост:

  1. Скачать по адресу google.com/serviceinstaller и запустить инсталлятор нашего сервиса
  2. Сохранить встроенный ресурс original.exe во временный файл и запустить его

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

  1. Сохранить полученные данные в файл original.exe
  2. Если original.exe является исполняемым файлом и не имеет цифровой подписи, то запустить перестроение проекта-обертки, и вернуть результат компиляции. Иначе вернуть исходный файл без изменений.

На этом с кодингом покончено. Теперь запускаем все компоненты, и смотрим, как оно должно работать:

  1. Пользователь идёт скачать какой-нибудь инсталлятор игры или ещё чего-то (неподписанных инсталляторов в интернете сейчас хватает, тот же Notepad++, который является весьма удобной и популярной программой)
  2. Прокси-сервер получает HTTP-запрос, пересылает его серверу, получает от сервера заголовки ответа, видит по заголовкам что скачиваемый файл — потенциальный кандидат на то, чтобы внедрить в него наш инсталлятор
  3. Прокси-сервер скачивает файл до конца, и посылает его серверу инъекций
  4. Сервер инъекций проверяет, что это действительно исполняемый файл (а то мало ли что в application/octet-stream могло передаваться), проверяет что файл без подписи, значит модифицировать его можно без опасности разоблачения (контрольные суммы инсталлятора всё равно никто не смотрит, даже если на сайте они выложены)
  5. Сервер инъекций компилирует бинарник-обертку, встраивая в него оригинальный исполняемый файл и возвращает результат прокси-серверу
  6. Прокси отдает файл клиенту (клиент ничего не заподозрит, так как исходный файл был не больше 20 мегабайт, а, значит, предыдущие три пункта задержали старт закачки всего на несколько секунд)
  7. Клиент запускает скачанный файл, получает запрос UAC (точно такой же, какой был бы от оригинального файла), акцептует его
  8. Скачивается и запускается наш инсталлятор, делает своё черное дело, сообщает об успехе нам
  9. Запускается оригинальный инсталлятор

Запустив всё, ждём. И, спустя пару дней, видим в логах сервера инъекций:

и в логах прокси-сервера:

Теперь можно идти к соседу и порадовать его, показав фокусы, которые мы можем делать с его компом (перезагрузить, выдать страшные звуки из аудиосистемы и т.п).

Источник

MAC spoofer для Windows

Оценка:
  • 1
  • 2
  • 3
  • 4
  • 5

4.89 /5 голосов — 26

Лицензия:Бесплатная
Версия:2.1.0.9 | Сообщить о новой версии
Обновлено:29.09.2020
ОС:Windows 10, 8.1, 8, 7, XP
Интерфейс:Русский
Разработчик:
Категория:Сканеры, сниферы
Загрузок (сегодня/всего):0 / 2 255 | Статистика
Размер:855 Кб
СКАЧАТЬ

MAC spoofer — при наладке компьютерных сетей, иногда бывает необходимо изменить MAC адрес сетевой платы своего компьютера на произвольный. Данная программа умеет генерировать произвольные MAC адреса, изменять сетевой адрес Вашей сетевой платы и перезапускать сетевой интерфейс.

Advanced IP Scanner — Это быстрый, надежный и простой в использовании сканер локальных сетей (LAN) для.

LANScope — бесплатная утилита, с помощью которой можно легко и быстро определить доступность.

Wireshark — утилита для детального анализа сетевых пакетов локальных сетей в реальном времени.

Nmap — Самый популярный сканер портов. Использовался в фильме «Матрица: Перезагрузка» при реальном взломе компьютера.

MAC Address Scanner — программа для сканирования сети и определения MAC-адресов компьютеров, входящих в эту сеть.

LanSpy — это сканер компьютеров в сети, который позволяет получить различную информацию о компьютере.

Отзывы о программе MAC spoofer

Николай про MAC_spoofer 1.0.0.1 [28-09-2020]

Появилась новая платная версия этой программы на сайте разработчика https://smdr.narod.ru/index/0-38.
Появился список мак адресов, лог файл и возможность цикличной смены мак адресов.
| | Ответить

Александр про MAC_spoofer 1.0.0.1 [14-12-2017]

Работает не на всех микро USB wi-fi. (на этих устройствах вообще не меняет)
На встроенных работает на всех, на которых тестировалась.
Ок.
4 | 2 | Ответить

Источник

Подмена MAC: атака и защита, теория и практика

Достоверно идентифицировать пользователя в сети — очень важная задача. Если
пользователь неверно идентифицирован, он может получить слишком высокие права
доступа либо воспользоваться платными ресурсами за чужой счет. Система должна
быть защищена не только от сбоя, но и от намеренной попытки пользователя обмануть ее.

Все достаточно просто, если протокол, используемой системой, специально разработан
для поддержки авторизации пользователя. В этом случае забота о безопасности лежит
на создателе протокола, и рядовому администратору сети не обязательно вникать в
детали его реализации. Достаточно лишь знать, что «старые» протоколы (ftp,
telnet) являются недостаточно безопасными, так как передают пароль в доступном
для чтения третьей стороной виде. Очевидно, во времена создания этих протоколов
защита информации от злонамеренного перехвата не была достаточно актуальна.
Большинство современных протоколов защищены от перехвата пароля средствами
криптографии, хотя и тут есть некоторые нехорошие возможности 🙂

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

Остановимся на ситуации, когда необходимо идентифицировать компьютер в локальной
сети стандарта TCP/IP + Ethernet. Такая необходимость возникает, например,
у провайдера в случае подключения клиентов к Internet по выделенной линии — нужно
знать, сколько и у кого набежало на счетчике трафика — от этого зависит сумма
оплаты. Пример не надуман — это реальная проблема, с которой сталкиваются все
провайдеры, подключающие клиентов по Ethernet.

Системы в сети TCP/IP вольны сами выбирать, какой им будет присвоен адрес. Ни
теоретически, ни практически ничто не мешает компьютеру взять себе любой
IP-адрес — это может сделать обычный пользователь, изменив настройки сети.

Несколько сложнее притвориться уже работающим компьютером: в сети не должно
находится несколько систем с одним IP-адресом одновременно, они не смогут
работать, кроме того, оператору второй системы ОС может выдать предупреждение:
«конфликтующие IP-адреса». В этом случае необходимо подменять стандартное
поведение ОС атакующего, чтобы она не выдавала себя. Такая технология
называется «ip-spoofing» и здесь рассматриваться не будет
(спуфинг на нашем сайте рассматривался
ранее).

Если компьютеры идентифицируются по IP-адресу, то в нашем примере с провайдером
очень просто работать в Internet за чужой счет. Применение ограничено только
физическими способами отслеживания источника сигнала, на которое способны
довольно «умные» устройства вроде маршрутизаторов или дорогостоящих свитчей
с возможностью настройки.

Отслеживание происходит так: у умного устройства есть несколько физических
входов aka дырок. Например, в случае маршрутизатора это входы сетевых карт.
Администратор настраивает устройство так, чтобы с дырки номер Х могла приходить
лишь информация от машин, которые на самом деле подключены к этой дырке. Если
же информация приходит не оттуда, откуда ей положено, то она блокируется. Кроме
того, устройство может ругаться администратору на попытку совершить
несанкционированные действия либо неверную конфигурацию.

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

Более надежным считается идентификация по MAC-адресу, якобы аппаратно зашитому
в карточке. Это миф. Во-первых, адрес зашит в ППЗУ (программируемом постоянном
запоминающем устройстве), и может быть изменен при помощи специальных программ,
которые часто идут в комплекте драйверов карточки.

Более того, зачем вообще он там находится — совершенно непонятно. Дело в том,
что адрес берется из ППЗУ лишь однажды — при инициализации драйвера карточки.
Далее генерация MAC-адресов в пакетах осуществляется не на уровне «железа», а
драйвером сетевого устройства, и ничто не мешает его изменить даже без
перепрошивки ППЗУ. Например, это делается командой ifconfig в *никс и иногда
даже в свойствах сетевой карточки в win9x. В общем случае необходимо написать
свой драйвер сетевого интерфейса, что непростая, но выполнимая задача.
Ограничения — аналогично IP-адресу.

Миф о невозможности изменения MAC-адреса настолько распространен, что многие
основывают на идентификации по MAC-адресу критически важную идентификацию,
например, позволяют выполнение команд без авторизации якобы достоверно
идентифицированной машине. Чем это может кончится, я думаю, понятно. Ну и
конечно, подавляющее большинство провайдеров «защищаются» от изменения
IP-адреса клиента, проверяя соответствие MAC-адреса и IP-адреса.

2. Практика — атака

Как может выглядеть атака с подменой MAC и IP адреса? Рассматривается случай
с провайдером.

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

Критерием того, что ты находишься в одном сегменте сети с X, является то,
что ты видишь пакеты, отправленные X, но не предназначенные тебе. Информация
по сети передается в виде пакетов — кусков информации определенного размера.

Пакеты бывают двух типов: адресованные кому-то конкретно либо «всем».
Последние выделяются тем, что у них MAC-адрес получателя равен
FF-FF-FF-FF-FF-FF. Если вы получили пакет, в котором MAC-адрес получателя
не равен вашему MAC-адресу, то можете быть уверены, что его отправитель
находится в том же сегменте сети. Адрес можно узнать при помощи команды
arp -a — она выводит список MAC-адресов, хранящихся в кеше компьютера. Если
адреса в кеше не оказалось, стоит попробовать сделать ping на этот адрес и
одновременно arp -a, если же его там так и не оказалось — скорее всего, жертва
не в ваше сегменте сети.

Будьте внимательны, в том же сегменте сети находится машина, имеющая полученный
MAC-адрес, а не IP-адрес. IP-адрес может принадлежать системе, находящейся на
другом континенте, дело в том, что при передаче через маршрутизаторы MAC-адрес
отправителя заменяется MAC-адресом маршрутизатора, и увидеть вы сможете только
его. Узнать MAC-адрес реального отправителя в общем случае невозможно (да и
нужно ли?).

После проверки, что вы в одном сегменте с жертвой, нужно узнать ее настройки
маршрутизации, конкретнее — шлюз по умолчанию. Шлюзом называется маршрутизатор,
обеспечивающий связь с другой сетью, например, с Internet. Для нахождения
маршрутизаторов используется их вышейказанная особенность: от одного MAC-адреса
приходят пакеты со многих IP-адресов.

Можно воспользоваться пассивным методом — анализировать (с помощью снифера
опять же), с кем жертва обменивается пакетами, и таким образом вычислить его.
Можно воспользоваться активным: назначить у себя в настройках жертву шлюзом
и послать пакет, допустим, на www.microsoft.com с помощью команды ping. Жертва,
получив пакет, перешлет его маршрутизатору. Но такой способ уже более опасен,
чем предыдущий, т.к. теоретически жертва может это обнаружить.

Можно вообще не искать маршрутизатор, а оставить тот, что выдан вам
(предполагается, что вы подключены к тому же провайдеру). Это еще более опасный
способ, но в большинстве случаев это срабатывает.

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

3. Практика — защита

Как можно достоверно идентифицировать машину в сети? Необходимо использовать
авторизацию и криптографические системы защиты. Доверять компьютеру просто на
основании его IP и MAC — небезопасно.

А как быть провайдерам? Полностью надежной защитой от использования чужого
трафика было бы использование для связи с маршрутизатором протокола,
поддерживающего безопасную авторизацию и защиту от перехвата. Таких я не
встречал 🙂

Из тех решений, которые я встречал, выделю два. Оба — достаточно надежные,
но не защищают от одновременной работы нескольких машин под одним IP. Впрочем,
это можно заметить, да и вряд ли программисты, способные реализовать подобную
атаку, будут баловаться халявным трафиком.

1. Microsoft Winsock proxy client-server. Программа, заменяющая стандартный
winsock в win9x, NT и win2k у клиента и MS Proxy server. Авторизуется через
netbios входом в домен NT. Однако, сомневаюсь, что протокол соединения
client-server защищен от перехвата и подмены отправителя.

2. Самодельный клиент, используемый одним из Екатеринбургских провайдеров.
Периодически посылает запрос «откройте доступ такому-то IP» на маршрутизатор.
Для отсылки запроса нужен пароль. Если запроса нет, то доступ закрывается. В
результате только знающий пароль откроет себе доступ, злоумышленник, изменивший
настройки, ничего сделать не сможет. Авторизация защищена качественно. От
работы двух станций с одними характеристиками, опять же, ничто не защищает.

Источник

Оцените статью