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

og og Новости

Вычислить реальный мас из рандомного

Посмотрим там же:

private static final long VALID_LONG_MASK = (1L << 48) - 1;
private static final long LOCALLY_ASSIGNED_MASK = MacAddress.fromString("2:0:0:0:0:0").mAddr;
private static final long MULTICAST_MASK = MacAddress.fromString("1:0:0:0:0:0").mAddr;

public static @NonNull MacAddress createRandomUnicastAddress(MacAddress base, Random r) {
        long addr;
        if (base == null) {
            addr = r.nextLong() & VALID_LONG_MASK;
        } else {
            addr = (base.mAddr & OUI_MASK) | (NIC_MASK & r.nextLong());
        }
        addr |= LOCALLY_ASSIGNED_MASK;
        addr &= ~MULTICAST_MASK;
        MacAddress mac = new MacAddress(addr);
        if (mac.equals(DEFAULT_MAC_ADDRESS)) {
            return createRandomUnicastAddress(base, r);
        }
        return mac;
    }

Адрес целиком, либо его младшие три байта, это чистый Random.nextLong(). «Патентованное восстановление реального МАС» — надувательство. С большой долей уверенности можно ожидать, что производители Android-телефонов применяют и другие, не зарегистрированные OUI. Исходников iOS у нас нет, но скорее всего там применен схожий алгоритм.

Вышесказанное не отменяет работу других механизмов деанонимизации Wi-Fi абонентов, основанных на анализе других полей probe request фрейма, или корреляции относительной частоты посылаемых устройством запросов. Однако достоверно отследить абонента внешними средствами крайне проблематично.

Собираемые данные больше подойдут для анализа средней/пиковой нагрузки по местоположению и времени, на основе больших чисел, без привязки к конкретным устройствам и людям. Точные данные есть только у тех, кто “внутри”, у самих производителей мобильных ОС, у установленных приложений.

Что может быть опасного в том, что кто-то другой узнает МАС-адрес вашего устройства? Для проводных и беспроводных сетей можно организовать атаку “отказ в обслуживании”. Для беспроводного устройства, к тому же, с некоторой вероятностью можно зафиксировать момент появления в месте, где установлен сенсор.

МАС-адрес сложнее, чем кажется, но проще, чем мог бы быть.

Другие проекты правительства по социальному мониторингу

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

В 2021 году в Москве начали тестировать технологию распознавания лиц с помощью видеокамер. Как сообщает Forbes, московская система является самой крупной в мире. На запуск проекта было потрачено более $3,2 млн.

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

Это породило волну недовольств в обществе. Была создана организация No Facial Recognition, эксперты которй намерены остановить сбор биометрических данных. Сторонники движения считают, что без письменного согласия граждан эта процедура нарушает закон о персональных данных.

Соответствующая петиция была размещена на Change.org. Ее уже подписали 105 816 человек. А на МВД и департамент информационных технологий Москвы даже был подан иск в суд. Однако он был отклонен. Суд посчитал, что система видеонаблюдения не нарушает законы РФ.

Зачем это нужно?

MAC адрес – это уникальный идентификатор, который присваивается каждой единице оборудования. Клонирование Мак-адреса позволяет заменять реальный физический адрес на виртуальный. Как бы временно прописать второй адрес, наделив его всеми полномочиями первого.

Сделав это, при замене роутера не нужно обращаться к провайдеру с просьбой дать доступ в интернет новому маршрутизатору. Достаточно изменить MAC-адрес на тот, с которым роутеру предоставляется доступ в интернет (то есть прописать физический Мак-адрес старого роутера в новый). Как это сделать? Для начала определите идентификатор нужного вам маршрутизатора.

Изменение для сетевой карты

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

Это понадобится, если временно нужно подключить кабель от провайдера не к маршрутизатору, а напрямую к компьютеру. Клонирование в операционной системе Windows 10 происходит следующим образом:

  1. Комбинацией клавиш R вызовите строку «Выполнить» и пропишите команду mmc devmgmt.msc.
  2. В диспетчере устройств откройте «Сетевые адаптеры», клацните ПКМ по нужному устройству и выберите «Свойства».

Как использовать частные mac-адреса в ios 14 и зачем это нужно

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

Каждое устройство для идентификации в Wi-Fi сети использует уникальный сетевой адрес, так называемый MAC-адрес. И компания Apple, продолжая заботиться о конфиденциальности пользователей, добавила в iOS 14 функцию частного адреса, которая позволяет сообщать маршрутизаторам различных Wi-Fi сетей различные MAC-адреса.

При использовании одного и того же MAC-адреса в различных сетях становится легко отследить деятельность человека, что как минимум позволяет показывать нам релевантную рекламу. Разумеется, если использовать разные MAC-адреса для каждой Wi-Fi сети, отслеживание становится затруднительным. В общем и целом, использование частных MAC-адресов практически никак не повлияет на вашу обычную работу в интернете, за исключением тех случаев, когда к сети могут подключиться девайсы только с определенными MAC-адресами, или же если вы самостоятельно отслеживаете деятельность определенного устройства, например, в рамках родительского контроля.

Включить или отключить частные адреса просто: зайдите в настройки Wi-Fi, выберите нужную сеть, после чего включите или отключите эту опцию:

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

Разумеется, после этого произойдет переподключение устройства к данной Wi-Fi сети.

Как работает рандомизация

Мы знаем, что с целью предотвратить отслеживание перемещения людей путем сканирования эфира и сбора МАС-операционные системы смартфонов уже несколько лет применяют технологию рандомизации. Теоретически, при сканировании эфира в поиске известных сетей смартфон отправляет пакет (группу пакетов) типа 802.11 probe request с МАС-адресом в качестве источника:

Включенная рандомизация позволяет указывать не «прошитый», а какой-то другой адрес источника пакета, меняющийся при каждом цикле сканирования, во времени или ещё как-то. Работает ли это? Посмотрим на статистику собранных МАС-адресов из эфира так называемым «Wi-Fi Радаром»:

Картина совсем другая.

8й бит первого байта МАС адреса по-прежнему соответствует Unicast-природе SRC-адреса в probe request пакете.

7й бит в 92.2% случаев установлен в Local, т.е. с достаточной долей уверенности можно считать, что именно столько собранных адресов относится к рандомизированным, а менее 8% — к реальным. При этом распределение бит в OUI для таких реальных адресов примерно совпадает с данными предыдущей таблицы.

Какому производителю, по OUI, принадлежат рандомизированные адреса (т.е. с 7м битом в «1»)?

При этом все рандомизированные адреса, отнесенные к Google, принадлежат одному OUI c префиксом DA:A1:19. Что это за префикс? Давайте посмотрим в исходники Android.

private static final MacAddress BASE_GOOGLE_MAC = MacAddress.fromString("da:a1:19:0:0:0");

Стоковый андроид в поиске беспроводных сетей использует специальный, зарегистрированный OUI, один из немногих с установленным седьмым битом.

Как рандомизация повлияет на остальные сферы жизни?

У пользователей возникнут сложности при управлении умным домом и фильтрации доступа к сети. Но функцию рандомизации можно легко отключить в настройках смартфона.

Обновления ОС скорее повлияют на ИТ-компании, которые используют Wi-Fi технологии в маркетинговых целях.

Как и в случае с государственным проектом по мониторингу, сбор MAC-адресов не является нарушением закона о персональных данных. У предпринимателей нет инструментов и возможностей, чтобы получать доступ к телефонным номерам, адресам и другим личным данным конкретных пользователей.

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

Из-за рандомизации использование этих технологий оказалось под угрозой.

Как рандомизация повлияла на проект правительства москвы

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

Из-за обновления операционных систем Apple и Android мониторить передвижения граждан стало практически невозможно. Поэтому власти Москвы, скорее всего, свернут проект, на который к моменту обновления ОС уже было потрачено 62,8 млн рублей.

Новый проект вызвал волнение из-за возможной слежки за гражданами. Но MAC-адреса, которые планировало собирать АПК правительства Москвы, — это полностью обезличенная информация. Они не являются персональными данными. Это значит, что с их помощью невозможно определить конкретные данные людей. Имея MAC-адреса, власти не смогут узнать ни паспортные данные, ни номер телефона, ни адрес проживания.

Но с помощью MAC-адресов можно в реальном времени выстраивать аналитику. А собранные данные применять только для анализа потока людей, загрузки улично-дорожной сети и остановок.

Если бы целью властей была слежка, то для этого есть куда более эффективные способы, использующие видеофиксацию.

Когда закончатся мас-адреса

Мы все порядком устали от не прекращающихся уже лет 10 историй о том, что «IPv4 адреса вот-вот кончатся». Да, новые блоки IPv4 получить уже непросто. При этом известно, что IP адреса распределены крайне неравномерно; существуют гигантские и мало использованные блоки, принадлежащие крупным корпорациям и государственным учреждением США, впрочем, без особой надежды на их перераспределение в пользу нуждающихся. Распространение NAT, CG-NAT и IPv6 сделало проблему нехватки публичных адресов не такой острой.

В МАС адресе 48 бит, из которых «полезными» можно считать 46 (почему? читай дальше), что даёт 246 или 1014 адресов, что в 214 раз больше IPv4 адресного пространства.В настоящий момент распределено примерно полтриллиона адресов, или лишь 0.73% от всего объёма. До исчерпания MAC адресов ещё очень, очень далеко.

Кому принадлежат адреса

Несложная обработка публично доступной базы данных выгрузки IEEE даёт довольно много информации. Например, некоторые организации забрали себе много OUI блоков. Вот наши герои:

У Google их всего 40, и это не удивительно: они сами производят не так много сетевых устройств.

Блоки МА не предоставляются бесплатно, их можно приобрести за разумные деньги (без абонентской платы) за $3000, $1800 или $755 соответственно. Интересно, что за дополнительные деньги (в год) можно приобрести «сокрытие» публичной информации о выделенном блоке. Таких сейчас, как видно выше, 232.

Насколько пострадают ит-компании

Мы решили проверить, сильно ли рандомизация повлияла на Wi-Fi-маркетинг. Для этого мы проанализировали количество MAC-адресов, которые собирали Wi-Fi-радары с января по февраль и с сентября по декабрь 2020 года.

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

Обновление ос apple и android

MAC-адрес — это уникальный идентификатор мобильного устройства. Wi-Fi-радар и АПК (аппаратно-программный комплекс), который планировало установить правительство Москвы, могут считывать эти данные со смартфонов с включенным Wi-Fi в радиусе 50 м. С помощью собранных адресов можно отследить передвижение потоков людей.

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

Однако в сентябре 2021 года корпорация Google выпустила версию прошивки Android 10 с функцией рандомизации MAC-адресов. Вслед за ней компания Apple вышла с обновлением ОС iOS 14. Корпорации решились на такое обновление с целью защиты конфиденциальности пользователей. Теперь данные устройств будут обновляться каждые 24 часа.

Определение

Подробно о том, как узнать MAC маршрутизатора, читайте здесь.

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

Если к роутеру подключен компьютер, смартфон или планшет, узнать Мак можно через админку в разделе «Состояние» – «Локальная сеть». Это начальная страница с основной информацией о роутере.

Далее информацию можно передать провайдеру (если смотрели идентификатор незарегистрированного маршрутизатора). Или же поменять Мак-адрес этого роутера в настройках другого, но как это сделать? Достаточно выполнить пару операций в параметрах сетевого устройства.

Случайность бит

Можно предположить, что OUI распределены случайно, а вендор затем также случайно назначает адреса индивидуальным сетевым устройствам. Так ли это? Посмотрим на распределение бит в имеющихся в моём распоряжении базах МАС адресов 802.11-устройств, собранных работающими системами авторизации в беспроводных сетях WNAM.

Разобьем каждый МАС-адрес (шесть байт) каждой из выборок на биты побайтово, и посмотрим на частоту появления бита «1» в каждой из 48 позиций. Если бит выставлен совершенно произвольным образом, то вероятность получить «1» должна быть 50%.

Откуда такая несправедливость в 7 и 8 битах? Там почти всегда нули.

Действительно, стандарт определяет эти биты как специальные (Википедия):
Подмена MAC: атака и защита, теория и практика — «Хакер»

Восьмой (с начала) бит первого байта МАС адреса называется Unicast/Multicast битом и определяет, какого типа кадр (фрейм) передается с этим адресом, обычный (0) или широковещательный (1) (мультикаст или броадкаст). Для обычного, unicast взаимодействия сетевого адаптера, этот бит выставлен в «0» во всех пакетах, им отправляемых.

Седьмой (с начала) бит первого байта МАС адреса называется U/L (Universal/Local) битом и определяет, является ли адрес глобально уникальным (0), или локально уникальным (1). По умолчанию, все «прошитые изготовителем» адреса глобально уникальны, поэтому подавляющее число собранных МАС адресов содержат седьмой бит выставленным в «0».

С шестого по первый биты первого байта, биты второго и третьего байта в OUI идентификаторах, и тем более биты в 4-6 байтах адреса, назначаемые производителем, распределены более-менее равномерно.

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

Уникальность

Уникальны ли МАС адреса? В теории да, поскольку каждый из производителей устройств (владельцев блока МА) обязан обеспечивать уникальный адрес для каждого из выпускаемых им сетевых адаптеров. Однако некоторые производители чипов, а именно:

выставляют последние три байта МАС адреса в случайное число, по всей видимости, после каждой перезагрузки устройства. Таких адресов в моей выборке №1 нашлось 82 тысячи.

Поставить себе чужой, не уникальный адрес можно, конечно, путем целенаправленной его установки «как у соседа», определив его сниффером, или выбрав наугад. Также возможно случайно поставить себе не уникальный адрес, выполнив, например, восстановление бэкапа конфигурации какого-нибудь маршрутизатора вроде Mikrotik или OpenWrt.

Что будет, если в сети будет присутствовать два устройства с одним МАС адресом? Все зависит от логики сетевого оборудования (проводного роутера, контроллера беспроводной сети). Скорее всего, оба устройства или не будут работать, или будут работать с перебоями.

Что, если поставить себе МАС с выставленным в «1» седьмым или восьмым битом, т.е. local или multicast-адрес? Скорее всего, ваша сеть на это не обратит внимания, но формально такой адрес не будет соответствует стандарту, и лучше так не делать.

Хождение по граблям в чистом поле или как собрать mac-адреса близлежащих wi-fi-устройств

Все свои публичные выступления (благо, их не так много) я начинаю с явного или неявного упоминания тезиса “Наша индустрия — сложная, проблемы могут вскрыться на любом, даже самом очевидном шаге, а оптимистично предполагать, что все будет просто и легко — наивно”. Как ни странно, эта простая мысль, полученная многолетним набиванием шишек, порой является откровением и для более опытных специалистов, хотя, казалось бы, весь оголтелый задор и вера в непогрешимость собственных идей и практик должна была выветриться уже давно. Расскажу байку на этот счет, пример простого, с первого взгляда, проекта.

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

В один прекрасный день товарищ скинул мне ссылку на интересный стартап. Ребята предлагали представителям малого бизнеса из сферы услуг и продаж поставить у себя точку доступа (с captive portal-ом) для своих клиентов, дабы раздавать интернет, попутно собирая MAC-адреса смартфонов людей, проходящих мимо. Цель сего действия весьма простая — большое количество рекламных сетей позволяют таргетироваться по списку адресов устройств, поэтому, направив рекламную компанию на проходящих мимо пользователей, мы с большой долей вероятности получим новых посетителей (потому что близко и “где-то это я уже видел”). Т.е. такая раздача виртуальных флаеров. Товарищ спросил, как это делается и сможем ли мы такое повторить.

Быстрый гуглеж на тему вскрыл механизм такого сбора данных. WiFi-адаптер запускался в режиме прослушивания эфира и бегал по каналам, захватывая пакеты, анализируя их и агрегируя полученные данные. Существовали и готовые открытые утилиты для этого, например, airodump-ng из состава aircrack-ng. Т.е. для повторения нам надо просто запустить эту утилиту, желательно, на отдельном компактном и носимом устройстве, и запихнуть полученные данные в БД, из которой потом уже доставать готовые списки MAC-адресов для рекламных сетей. Вроде бы задача простая, решаемая за один, максимум — два вечера неспешной работы, почти все готово же.

Разумеется, это оказалось ни разу не так.

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

Первоначально мы хотели взять что-то простое и дешевое, например, коробочки Orange Pi Zero, поставить туда airodump-ng и пробросить данные, выплевываемые утилитой на сервер, где благополучно их сложить в базу. У меня был опыт работы с такими распределенными системами с выделенным центром (правда, там в роли рабочих лошадок выступали виртуальные машины, поднимаемые через API облака этим же самым центром по мере необходимости, но не суть), так что часть кода благополучно перекочевала в новый проект.

Инструментом проброса данных на сервер послужило написанное простейшее Erlang-приложение, которое, как предполагалось, будет выдергивать данные с дампера эфира (парсинг), сериализовать их (родной сериализацией Erlang-а) и передавать через web-сокет на сервер по HTTPS (не вызывая подозрений у DPI-систем и не изобретая собственных протоколов). Процессоры Allwinner H2 , которые использовались в Orange Pi, достаточно мощные, чтобы собираться и отлаживаться прямо на устройстве. Опять же, в теории все хорошо.

На практике началось.

1. как оказалось, встроенный WiFi в Orange Pi годился только на то, чтобы подцепиться к точке доступа и швырнуть данные в сервер. Ну, точнее, не сам адаптер, а поддержка его чипсета в ядре. Для большинства IoT проектов этого, наверняка, было бы достаточно. Впрочем, к этому удару мы были готовы, потому что предварительное изучение сайта aircrack-ng дало вполне четкое и неоднозначное “везде это работать не будет, если что — мы не виноваты, список проверенных чипсетов прилагаем”. В списке обнаружились почти все устройства Atheros (купленной Qualcomm) и Ralink (купленной MediaTek), что внушало некоторые перспективы в случае перехода с прожорливых китайских ARM-ов на более аскетичные MIPS-ы из чипсетов для роутеров.

Но, пока это все собирается из соплей и палок, т.е. прототипируется — надо решить проблему здесь и сейчас. Поэтому мы воспользовались такой экзотикой в наше технологичное время (когда беспроводная связь есть в любой зажигалке) как Wi-Fi USB-адаптер. Изучение списка совместимости и сопоставление его с ассортиментом ближайшего магазина выдало жертву — DLink DWA-160 в ревизии C1 (это важно, поскольку другие аппаратные ревизии использовали другой чип и вызывали неиллюзорную головную боль в плане принуждения к работе). Двухдиапазонный, не требующий плясок с драйвером, поскольку поддержка давно в ядре, этот свисток пригодился в дальнейшем и в эксплуатации в других проектах, поэтому я скупил их, наверное, все (пять штук), что оказались доступны в нашем провинциальном городе.

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

Убедившись в работоспособности устройства, я подключил его к одноплатнику и выключил встроенный WiFi-адаптер с расчетом, что интернет будет доступен через Ethernet-интерфейс.

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

Вторую свинью подложил aircrack-ng. Этот набор утилит был создан с целью взлома проверки на проникновение WiFi-сетей, т.е. был написан хакерами для хакеров. Не знаю, благодаря какой логике они предпочли использовать дампер эфира беспроводных сетей не в виде традиционного unix-way подхода выплюнуть структурированный текст для последующей обработки, а сделать полноценный term-интерфейс, на котором почти в реальном времени (и с учетом настроек терминала) отображать информацию по обнаруженным сетям и устройствам, но они сделали именно так. Да, я нашел Python API неизвестной степени готовности ко всему этому, но, опять же, паук прототипирования, обитавший в моей голове, жестко запретил тащить еще один язык, переключаться на другой (мы же помним, серверная часть уже была частично готова и написана она была далеко не на Python-е) или, упаси боже, реализовывать airodump-ng самостоятельно на базе tcpdump-а. А, следовательно, надо было искать обходные пути.

К счастью, беспроводные хакеры начали что-то подозревать, что постоянно тупить в интерфейс — такое себе занятие, поэтому реализовали периодическое выкладывание всего найденного и агрегированного в виде CSV-файлов. С задаваемым интервалом. С этим уже можно жить. Разумеется, наивный вариант — запустить утилиту и перечитывать файл по таймеру — тут же дал по рукам. Работающий на ноутбуке, при переносе на одноплатник, он начал сбоить в процессе вычитывания файла по понятным причинам — порой утилита просто не успевала выгрузить все и часть данных безвозвратно терялась.

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

Ага, сейчас, как же. Тестовая сборка этой цепочки (а написание кода и отладка заняла действительно пару вечеров) вскрыла забавный факт — количество адресов, пойманных за сутки в нашем офисе, достаточно удаленном от публичных проходимых мест, колебалось в районе пары тысяч штук. Да, конечно, рядом была небольшая гостиница (это было в докарантинно-изоляционное время, не удивляйтесь), но все равно, что-то много.

Освежив знание по структуре MAC-адреса и вспомнив факт, что мобильные устройства, зачастую, для сокрытия своего истинного MAC-адреса генерируют локальные адреса, я доработал серверную часть простейшим фильтром, вычищающим все broadcast и local адреса на входе. Список сократился на порядок и уже выглядел похожим на правду. Все было готово к полевым испытаниям.

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

Первая установка вскрыла сразу кучу недостатков.

Во-первых, большинство китайских плат для прототипирования поставляется с долгосрочной памятью на MicroSD в противовес NAND/NOR flash чипам. Исключение делается только для мощных SoC, явно избыточных для данной задачи. Увы, MicroSD — это непосредственная головная боль эксплуатационщика — окисление контактных площадок, выход из строя SD-карт, зависимость контактов от температуры внутри корпуса (а она немалая, китайские чипы не являются сильно энергоэффективными, а платы, зачастую, и вовсе рассчитываются сразу исходя из пикового энергопотребления, поэтому без дополнительного радиатора ну никак). Так и оказалось, что при выдергивании питания из устройства система приходила в неработоспособное состояние — повреждались файлы с байт-кодом ERTS, после перезагрузки приложение отказывалось работать.

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

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

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

В это момент я вспомнил, что у меня в коллекции есть замечательная плата Carambola 2 от литовских товарищей 8Devices. А если зайти на их сайт, то можно обнаружить еще более компактное устройство на том же чипе под названием Centipede. Прошлые эксперименты с данным классом устройств показали, что Erlang вполне влезает в отведенные 16 МБайт flash-памяти (и еще немного остается приложению). Единственный минус (который, скорее, даже плюс) — это маломощный MIPS и необходимость кросс-компиляции, что делает сборку Erlang-приложения чуть более нетривиальной. Но это был уже известный маршрут, поэтому я заказал парочку Centipede, а сам пока портировал существующую версию, работающую с сервером, на Carambol-у.

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

Когда приехали компоненты, начался новый этап. Чип AR9331 успешно поддерживался aircrack-ng из коробки, данные можно забирать с Ethernet-интерфейса, последние версии OpenWRT и ERTS собраны и успешно опробованы. Приложение переписано — часть кода переехала в код устройства, данные накапливались в отдельном процессе и периодически сбрасывались в файл в виде сериализованного Erlang-терма. К этому был нарисован простейший web-интерфейс, получающий данные через websocket. Порты для inotify и erlexec благополучно собраны средствами OpenWRT.

Смущало только одно — на данные оставалось 300 килобайт. Не то, чтобы мало, если хранить только MAC-адреса клиентских устройств, но airodump-ng отдает гораздо больше интересной информации, в том числе адреса точек доступа, их ESSID-ы и прочее, которое тоже неплохо было бы запомнить. На всякий случай. Ладно, будем действовать по обстоятельствам.

Собираем, проверяем. С ходу вскрывается проблема.

OpenWRT, как мы все знаем — это такой минималистичный вариант сборки Linux, который предназначен специально для устройств с ограниченными объемами памяти. Как следствие — оттуда выкинуто то, что можно было выкинуть безболезненно, и упрощенно то, что можно было упростить, в том числе многопользовательский режим. Т.е. обычная практика, когда код стартует от root-а и работает с максимальными привилегиями, что, конечно, облегчает вопросы связанные с группами, пользователями и контроль их действий. Да-да, буква S в аббревиатуре IoT отвечает за безопасность. Беда заключается в том, что erlexec, который я использовал для запуска и управления airodump-ng, не может выполнять операции из-под root-а — для этого ему необходим дополнительный пользователь, от имени которого он будет порождать назначенные ему процессы. А при создании дополнительного пользователя с другим уровнем привилегий… правильно, не дает airodump-у достучаться до сетевого устройства. Выкрутить это ограничение из библиотеки показалось процессом небыстрым, поэтому erlexec был заменен на порты — встроенный механизм запуска сторонних процессов в Erlang. Мелочь, а неприятно.

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

Проверить, впрочем, работоспособность этого варианта руки так и не дошли — в поле зрения попала очередная игрушка — Onion Omega2 на Mediatek 7688. Как и у их собратьев, конструктора LinkIt Smart 7688, там было много всего, но самое главное — вдвое больше flash-памяти, а, значит, уже можно не переживать за нехватку места для хранения данных. Окей.

Заказываем, ждем. Месяц. Два. Терпение лопается — пишем американцам на предмет “где товар, Зин”. Тишина. Открываем спор на PayPal. Американцы просыпаются. Говорят “Ой, у нас система приема заказов сбойнула, сейчас все пришлем”. Высылают, ждем три недели. Фух, устройство на руках и даже работает.

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

Тут надо сделать небольшое отступление — при том, что у меня в шаговой доступности лежало несколько плат LinkIt Smart, я не рассматривал их в качестве платформы, потому как в самом начале эпопеи попытка использовать их как устройства захвата провалилась. Тогда драйвера для чипа поставлялись в виде собранных модулей под конкретные версии ядра и, видимо, это и стало причиной неработоспособности. В последних версиях OpenWRT появилась как родная поддержка 7688, так и открытый драйвер, так что это повод пересмотреть подход к данным устройствам.

Впрочем, наличие WiFi прямо на чипе было принято использовать по прямому назначению — все-таки устройству нужен хоть какой-нибудь интерфейс управления, причем и в полевых условиях тоже, хотя бы для того, чтобы понять, работоспособно оно или не очень. Посмотреть на полученные данные тоже было бы небесполезно.

Соответственно, комбинируем предыдущие подходы — используем единственный выведенный на MiniDoc USB-интерфейс под WiFi-свисток для сканирования пространства, а встроенный WiFi — для управления устройством в виде маломощной точки доступа. Собираем, проверяем, все работает.

Но аппетит приходит во время еды. Начнем с того, что файл с данными в виде Erlang-сериализации — удел настоящих маньяков, а чуть более широкому спектру специально обученных профессионалов надо что-то попроще. Опять же, помимо складывания данных от airodump-а хотелось бы еще и точное время измерения, и, желательно, хоть какая-то привязка к расположению устройства в пространстве.

Встраиваем между WiFi-свистком и устройством USB-хаб. Настройки (а они зависят от положения устройства на шине в случае OpenWRT) идут лесом, но это уже незначительные мелочи. Правим. Вытаскиваем из завалов USB-GPS приемник, благо, уже проверенный временем и с написанным кодом разбора NMEA-0183 (код, конечно же, все равно пришлось подправить). Проверяем — устройство благополучно не обнаруживается системой, явно нехватка драйверов. Собираем драйвера USB Serial и закидываем на устройство — тоже тишина. Потом вспоминаем, что в больших системах GPS-свисток обнаруживался не как ttyUSBx, а как ttyACMx, т.е. USB GSM modem. Ну отлично, второй заход на добавление драйверов, успех.

Берем код, интегрируем в приложение. Добавляем в приложение sqlite3 в качестве хранилища. Теперь не надо будет проверять наличие записи в состоянии и вообще работа с данными упрощается до небольшого количества строчек. Собираем все в кучу, учим при добавлении данных забирать показания GPS, правим JS-код на мордочке для отображения в случае неполного набора данных (может случится, когда GPS еще не поймал спутники, а данные сканирования эфира уже идут). Проверяем работу — вроде живет. Можно объявлять промежуточную победу.

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

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

Так вот, все вышеописанные мытарства — это только pet-проект с очень низкой сложностью (почти сразу было понятно, что и как делать), отсутствием разработки аппаратной части (привет, физика) и выходом на сколько-нибудь более-менее завершенное изделие. Нет, конечно, нельзя исключить, что автор этих строк — дремучий дилетант, а настоящие гуру проходят этот путь за один вечер в промежутке между вечерним чаем и рюмкой коньяка, но пока опыт показывает только одно: ИТ это сложно и оптимизм здесь наказуем финансово, репутационно и мотивационно, а те, кто говорит “там все просто” — либо гении, либо жулики, причем второе более вероятно.

Оцените статью
Huawei Devices
Добавить комментарий