Незаметный сниффер Wi-Fi пакетов на базе микроконтроллера ESP8266

Незаметный сниффер Wi-Fi пакетов на базе микроконтроллера ESP8266

Библиотека Arduino PCAP может оказаться очень полезной во время сниффинга

image

Автор: Kody

Обычно для сниффинга Wi-Fi сетей нужен беспроводной сетевой адаптер. Однако благодаря библиотекам, написанным для Arduino, и дешевому чипу ESP8266, в некоторых случаях можно обойтись «малой кровью». Заплатив менее 10 долларов, можно смастерить крошечный Wi-Fi сниффер на базе платформы Arduino, сохраняющего собранную информацию в PCAP файлы, совместимые с Wireshark, который уместится практически где угодно.

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

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

Микроконтроллер ESP8266

Микроконтроллер ESP8266 может быть запрограммирован в Arduino и идет с интегрированным Wi-Fi модулем, который заметен по антенне, напечатанной на плате. Эти очень дешевые устройства часто используются производителями в макетных платах с дополнительными примочками, например, в виде USB портов для облегчения программирования. На рынке представлено множество устройств на базе контролеров ESP8266, однако мы всегда имеем дело с одним и тем же чипом в центре платы с характерной диаграммой направленности антенны.

Одна из наиболее популярных макетных плат на базе ESP8266 - D1 Mini. Эти платы распространены среди нескольких производителей и по стоимости начинаются от 3 долларов. Также в этих устройствах есть пины для подключения к сенсорам и дисплеям. Количество выводов меньше, чем, например, в платформе NodeMCU, но и размер D1 Mini в два раза тоже меньше.

Вследствие популярности среди производителей для D1 Mini есть много «накладок», размещаемых друг над другом с целью расширения функциональности. Один из наиболее популярных модулей – для чтения и записи карту microSD.

Рисунок 1: Модуль для работы с картой microSD, подключенный к макетной плате

PCAP библиотека

Благодаря Стефану Кремзеру (Stefan Kremser), также известному под псевдонимом Spacehuhn, в нашем распоряжении есть библиотека для генерации PCAP-файлов, совместимых с Wireshark, которую можно загрузить в микроконтроллер ESP8266 в считанные минуты. Хотя по функциональности ESP8266 намного слабее многих беспроводных сетевых адаптеров, этот микроконтроллер вполне подходит для работы с Wi-Fi пакетами.

У микроконтроллера ESP8266 есть некоторые ограничения, а библиотека будет работать лучше на чуть более дорогом и мощном микроконтроллере серии ESP32. Однако из-за экономии приходится идти на компромиссы, а поскольку в нашем устройстве D1 Mini есть модуль («накладка») для сбора данных, то мы вполне можем смириться с ограничениями.

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

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

Необходимое оборудование

Во-первых, нам понадобится устройство на базе микроконтроллера ESP8266 (например, NodeMCU или D1 Mini). Я настоятельно рекомендую D1 Mini, поскольку это устройство размером, позволяющим прикрепить модуль для SD карты.

Из названия уже понятно, что модуль («накладка») предназначен для сохранения собранной информации на карту microSD. Я рекомендую упомянутый ранее D1 Mini datalogger, который можно купить довольно дешево. Нам потребуется всего лишь припаять пины, а затем подключить модуль к устройству. Сборщик данных включает в себя часы реального времени, позволяющие записывать информацию с временными метками на любую правильно отформатированную карту microSD.

Также нам понадобится паяльник для припаивания штыревого разъема, идущим в комплекте с устройством D1 Mini, в который будет вставляться модуль. Наконец, карта microSD должна быть отформатирована под файловую систему Fat32 (с Exfat работать не будет).

В итоге получается следующий перечень необходимого оборудования:

Также нужно установить бесплатную и кроссплатформенную среду Arduino IDE для создания прототипа, записи и загрузки скриптов на микроконтроллер (поддерживающий Arduino).

https://www.youtube.com/watch?v=BQBcrPTTIUs

Шаг 1. Установка библиотек

Для успешной реализации проекта потребуется установка библиотек. Микроконтроллер должен сохранять пакеты на карту microSD. Соответственно, нужны библиотеки для коммуникации с картой microSD и преобразования радио сигналов в данные, пригодные для чтения. Установить библиотеки в Arduino довольно просто. Кроме того, обычно доступны полезные примеры, которые можно адаптировать под наши потребности.

Откройте папку с именем Arduino, где среда Arduino IDE сохраняет файлы проектов. Внутри должна быть папка с именем «Libraries», которая должна находиться внутри одной из папок, указанных ниже (в зависимости от операционной системы). После добавлении библиотека появится в меню Import Library:

  • macOS: ~/Documents/Arduino/libraries/
  • Windows: My Documents\Arduino\libraries\

В терминале перейдите в папку, где хранятся библиотеки, и введите команду git clone для копирования репозитария Arduino PCAP, библиотеки Arduino Time Library и зависимостей для ESP8266.

cd ~/Documents/Arduino/libraries/
git clone https://github.com/spacehuhn/ArduinoPcap.git
git clone https://github.com/PaulStoffregen/Time.git
git clone https://github.com/esp8266/Arduino.git

В этой папке проверяется присутствие библиотек во время каждого запуска Arduino IDE. Зайдите в меню «Sketch», затем в раздел «Include Library» и выберите «Manage Libraries» для поиска нужной библиотеки.

Рисунок 2: Добавление библиотек

В появившемся окне можно найти и сразу загрузить библиотеки, популярные в сообществе. Например, библиотеку neopixel от Adafruit или библиотеку SdFat, необходимую для записи информации на карту microSD. Введите в поисковом поле «sdfat» и загрузите библиотеку, кликнув на «Install». Теперь эту библиотеку можно использовать во всех проектах.

Рисунок 3: Установка библиотеки SdFat

Закройте и перезапустите Arduino IDE, чтобы все нужные библиотеки загрузились.

Шаг 2: Привязка оборудования

Теперь нужно показать Arduino IDE, с каким оборудованием мы работаем. Зайдите в меню «Arduino» и выберите «Preferences». Затем вставьте URL, указанный ниже, в поле Additional Boards Manager URLs и нажмите «OK». В списке плат должны появиться платы на базе микроконтроллера ESP8266.

http://arduino.esp8266.com/stable/package_esp8266com_index.json

Для добавления устройства D1 Mini зайдите в меню «Tools» и наведите курсор мыши на раздел «Board» со списком поддерживаемых плат. В самом верху кликните на «Boards Manager». Появится окно, где можно добавить дополнительные платы.

В появившемся окне Boards Manager в поисковом поле введите «esp8266». Затем выберите esp8266 by ESP8266 Community и установите выбранную плату для поддержки устройства D1 Mini в Arduino IDE. Возможно, поддержка этих устройств появилась после предыдущего шага, но нужно убедиться, что установлены все обновления.

Теперь должна появиться секция «ESP8266 Modules» в разделе «Board». Выберите плату «WeMos D1 R2 & mini».

Рисунок 4: Выбор платы WeMos D1 R2 & mini

Шаг 3. Изменение настроек в коде

Для открытия тестового проекта зайдите в меню Arduino, кликните на File –> Examples –> Arduino Pcap. В этой папке должен быть проект с именем «esp8266_pcap_sd», используемый нами в качестве шаблона, который мы подправим и загрузим на устройство D1 Mini. Если вы хотите использовать более мощный микроконтроллер серии ESP32, нужно выполнить те же самые шаги и выбрать проект с префиксом ESP32.

Рисунок 5: Выбор проекта esp8266_pcap_sd

После открытия проекта вы увидите раздел с основными настройками.

//===== SETTINGS =====//
#define CHANNEL 1
#define FILENAME "esp8266"
#define SAVE_INTERVAL 30 //save new file every 30s
#define CHANNEL_HOPPING true //if true it will scan on all channels
#define MAX_CHANNEL 11 //(only necessary if channelHopping is true)
#define HOP_INTERVAL 214 //in ms (only necessary if channelHopping is true)

Во-первых, нужно установить на устройстве канал для сниффинга. Наиболее часто используемые сетевые каналы: 1, 6 и 11. Устанавливаем канал 6.

#define CHANNEL 6

Далее нужно установить время ожидания перед сохранением файла на карту microSD. В устройстве D1 Mini не так много памяти, и поэтому устанавливаем сохранение каждые 30 секунд. Также можно указать имя сохраняемого файла. Если установить больший интервал ожидания, высока вероятность, что память устройства окажется переполненной.

#define FILENAME "esp8266"
#define SAVE_INTERVAL 30 //save new file every 30s

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

Если переключение между каналами доступно, нужно указать наивысший канал. В США Wi-Fi сети не используют каналы с номером выше 11, но в других странах используют.

#define CHANNEL_HOPPING false //if true it will scan on all channels
#define MAX_CHANNEL 11 //(only necessary if channelHopping is true)

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

#define HOP_INTERVAL 214 //in ms (only necessary if channelHopping is true)

В итоге настройки должны выглядеть так:

//===== SETTINGS =====//
#define CHANNEL 6
#define FILENAME "nullbyte"
#define SAVE_INTERVAL 30 //save new file every 30s
#define CHANNEL_HOPPING false //if true it will scan on all channels
#define MAX_CHANNEL 11 //(only necessary if channelHopping is true)
#define HOP_INTERVAL 214 //in ms (only necessary if channelHopping is true)

Шаг 4. Соединение устройства и модуля

Пришло время соединить аппаратную часть. Если вы покупали D1 Mini и модуль для сбора данных в интернет-магазине, нужно припаять пины (особого труда не составит). Штыревой разъем должен быть установлен так, как показано на рисунке ниже, чтобы не возникло проблем с подключением модуля:

Рисунок 6: Подключение регистратора данных в припаянный штыревой разъем на устройстве D1 Mini

Если вы не хотите заморачиваться с паянием и в тоже время хотите поддержать Spacehuhn, можно купить плату в специальном магазине.

Шаг 5: Загрузка проекта и сниффинг пакетов

Теперь пришло время собрать все воедино. Вначале вставляем карту microSD в модуль, подключаем USB кабель к компьютеру и устройству D1 mini. Затем заходим в меню «Tools» и далее в раздел «Port». В списке должен быть уже выбранный последовательный порт. В противном случае этот порт нужно выбрать. Если нужный последовательный порт не отображается, скорее всего, не установлены корректные драйвера для USB интерфейса устройства D1 Mini. Соответственно, устанавливаем нужные драйвера.

Как только все вопросы с последовательным портом решены, можно загружать проект. Вначале нужно убедиться, что код скомпилирован без ошибок, кликнув на галочку в левом верхнем углу экрана. Затем кликните на иконку, находящуюся справа от галочки, для отправки кода на устройство D1 Mini.

Рисунок 7: Компиляция и загрузка проекта на устройство

После загрузки кода зайдите в меню «Tools» и раздел «Serial Monitor» для проверки статуса устройства D1 Mini. Установите скорость (в бодах) равной 115,200, поскольку в противном будет отображаться набор случайных символов.

Рисунок 8: Отслеживание статуса устройства

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

Благодаря маленькой батарейке в виде таблетки для запитывания часов и источника питания в виде кабеля Micro-USB, подключенного к компьютеру или адаптеру питания, для запитывания всего устройства, вы можете собирать информацию, пока есть место на карте.

Вместо порта питания через Micro-USB вы можете использовать батарейный аккумулятор в связке с модулем battery (или другую батарейную конструкцию) для запитывания устройства D1 Mini, но я не рекомендую, поскольку подключение через Micro-USB все равно понадобится, и появится риск возгорания. К тому же, батареи хватит ненадолго. Хотя есть одна интересная идея для экономии питания, связанная с использованием пассивного инфракрасного датчика движения, который будет активировать сбор информации с близлежащих устройств, пока в помещении находятся люди.

Заключение

Библиотека Arduino PCAP может оказаться очень полезной во время сниффинга, однако есть ограничения, связанные с отсутствием у микроконтроллера ESP8266 возможностей, которые есть в более мощных беспроводных сетевых адаптерах. Соответственно, высока вероятность порчи фреймов и пропуска пакетов по разным причинам.

Следует учитывать, что всегда будет несколько каналов, которые сниффер не сможет прослушивать одновременно. Если вы собираете Wi-Fi трафик, переключаясь между каналами, будет фрагментация. Для снижения фрагментации нужно прослушивать только один канал.


Подписывайтесь на каналы "SecurityLab" в TelegramTelegram и Яндекс.ДзенЯндекс.Дзен, чтобы первыми узнавать о новостях и эксклюзивных материалах по информационной безопасности.