РАЗБОР На проверке

Пентест на ESP32: карманный девайс для Wi-Fi аудита

Сергей Попов
Сергей Попов Red Team · 6,5 тыс. сообщений
Подписаться
28
[ обложка статьи ]
Режим чтения
Плата ESP32 с OLED-экраном, на котором отображается надпись о захвате PMKID, паяльник в руке в перчатке над платой, рядом аккумулятор 18650 и провода на антистатическом коврике.


Полгода назад на Red Team engagement для производственной компании я оставил ESP32-WROOM-32 с прошивкой Marauder в переговорной заказчика. Плата с впаянным OLED-экраном 0.96 дюйма и аккумулятором 18650 на 3400 мА·ч - всё запихнуто в корпус от старого павербанка. За шесть часов автономной работы девайс перехватил PMKID с четырёх корпоративных точек доступа, собрал три WPA2-хендшейка и построил карту BLE-устройств на этаже. Вечером hashcat на RTX 3060 расправился с двумя PSK за двадцать минут. Весь набор для initial access обошёлся в 1100 рублей.

Чем это лучше ноутбука с Kali? Ничем - если сидишь на парковке в машине. Но когда задача - оставить автономную закладку в офисе на 6-8 часов, ноутбук с мигающим экраном и вентилятором не подходит. ESP32 решает задачу Hardware Additions (T1200, Initial Access) - физическое размещение устройства в периметре для пассивного сбора данных из эфира. Оператор уехал, плата работает.

Flipper Zero - второй очевидный кандидат. Но с Wi-Fi у него отношения сложные: встроенный радиомодуль заточен под Sub-GHz и NFC/RFID. Для Wi-Fi нужен внешний модуль Wi-Fi DevBoard - по сути та же ESP32, только втрое дороже и с урезанным набором прошивок. Flipper хорош как универсальный мультитул, но для целенаправленного аудита Wi-Fi ESP32 с Marauder или Bruce даёт больше контроля за меньшие деньги. Кто ищет аналог Flipper Zero для беспроводного аудита сетей - ESP32 закрывает Wi-Fi и BLE часть за десятую долю стоимости.

Место ESP32 в kill chain конкретное:
  • Reconnaissance: пассивный сбор SSID, BSSID, каналов, типов шифрования - Wi-Fi Discovery (T1016.002, Discovery). Параллельно BLE-сканирование устройств в радиусе.
  • Credential Access: перехват хендшейков и PMKID для офлайн-брутфорса - Password Cracking (T1110.002). Развёртывание Evil Twin (T1557.004) для перехвата учёток WPA2-Enterprise.
  • Collection: сниффинг эфира через Network Sniffing (T1040) - перехват probe requests для профилирования устройств в округе.
ESP32 - не универсальное оружие. Это специализированный сборщик данных из радиоэфира, которые потом обрабатываются на полноценной машине.

Выбор платы для портативного пентест-устройства на ESP32​

Не каждая ESP32 одинаково полезна. Разница между платами - в разъёме для SD-карты (куда сохранять дампы), поддержке внешнего дисплея и возможности подключить аккумулятор без паяльника.

МодельЧипBLESD-слотЭкранЦенаДля кого
ESP32-WROOM-32 DevKitESP32-D0WD4.2Нет (паять)Нет (паять)500-900 руб.Максимум свободы, минимум затрат
Lolin32 LiteESP324.2НетНет600-1000 руб.Встроенный разъём LiPo - TP4056 не нужен
ESP32-S3-DevKitCESP32-S35.0Зависит от версииНет800-1200 руб.BLE 5.0, USB-OTG для BadUSB
M5Stack CardputerESP32-S35.0Да1.14" IPS3500-5000 руб.Готовый корпус с клавиатурой и экраном

Все платы работают на 2.4 GHz Wi-Fi. Поддержки 5 GHz нет ни у одной - аппаратное ограничение чипов Espressif, тут ничего не поделаешь.

Если бюджет ограничен - берите ESP32-WROOM-32 DevKit и паяйте модули сами: OLED-экран SSD1306 0.96" (100-200 руб.), слот для SD-карты (80-150 руб.), аккумулятор 18650 с платой зарядки TP4056 (200-300 руб.). Итого рабочий ESP32 hacking gadget за 1000-1500 рублей.

M5Stack Cardputer для пентеста удобен на выездах: готовое устройство с экраном, QWERTY-клавиатурой и аккумулятором. Достал из кармана - включил - работаешь. Минус - цена в 4-5 раз выше, и кастомизировать корпус сложнее.

Для wardriving к любой плате подключается GPS-модуль (NEO-6M или NEO-7M, 300-500 руб.). Он привязывает координаты к каждой обнаруженной AP - Marauder записывает SSID + GPS в формате, совместимом с Wigle.net. Wardriving с GPS-модулем на велосипеде по промзоне - вполне рабочий сценарий recon при оценке беспроводного периметра заказчика. Выглядит забавно, но данные собирает отлично.

Прошивки для аудита Wi-Fi на ESP32: Marauder, Bruce, Deauther​

Голая ESP32 не умеет ничего полезного для пентеста. Всю работу делает прошивка. Для беспроводного аудита есть несколько проектов с открытым кодом - каждый закрывает свой набор задач.

ESP32 Marauder​

Основная прошивка для агрессивного Wi-Fi и BLE аудита. Что умеет:
  • Деаутентификация клиентов - отправка поддельных Management Frames от имени AP
  • Beacon flood - генерация десятков фиктивных SSID для засорения эфира
  • Сбор probe requests для профилирования устройств в округе
  • Перехват PMKID и WPA2-хендшейков
  • BLE-сканирование с перечислением устройств и характеристик
  • Запись результатов на SD-карту в PCAP
Работает на ESP32-WROOM и ESP32-S3. Прошивается через браузерный ESP Web Flasher - открываете страницу проекта, подключаете плату по USB, жмёте кнопку. Ни Arduino IDE, ни PlatformIO не нужны. Серьёзно, прошивка через браузер - это какая-то магия, но работает.

Bruce​

Прошивка с фокусом на устройства с экраном и клавиатурой - M5Stack Cardputer и аналоги. Wi-Fi-функции пересекаются с Marauder: деаутентификация, сканирование, перехват. Сверху - модули IR-передатчика, BadUSB и RFID-эмуляции (при наличии соответствующего железа). Интерфейс заточен под физические кнопки, а не Serial Monitor.

ESP32 Deauther​

Минималистичная прошивка для одной задачи - деаутентификации Wi-Fi ESP32. Гонит deauth-фреймы, вынуждая клиентов отключаться от целевой AP. Полезна как вспомогательный инструмент: ESP32 с Deauther выбивает клиентов, ноутбук с hcxdumptool ловит переподключения. Одна задача - но делает её хорошо.

ESP32 Wi-Fi Penetration Tool​

Академический проект risinek, выросший из магистерской диссертации. Интересен техническим подходом к обходу ограничений ESP-IDF: закрытые библиотеки Wi-Fi блокируют отправку произвольных фреймов, включая деаутентификацию. По описанию проекта на GitHub, используются два способа обхода - подмена объявления блокирующей функции на этапе компиляции (заимствовано из esp32-deauther) и создание rogue AP, который сам шлёт deauth при попытке клиента подключиться к нему вместо настоящей точки. Результат экспортируется в PCAP и HCCAPX для Wireshark и hashcat соответственно. Для продакшн-пентеста я бы его не взял, но разобраться в кишках ESP-IDF - самое то.

ПрошивкаDeauthPMKIDHandshakeBLE scanBadUSBКогда брать
MarauderДаДаДаДаНетОсновной инструмент автономного аудита
BruceДаДаДаДаДа (S3)M5Stack Cardputer или платы с экраном
DeautherДаНетНетНетНетОдна задача - выбить клиентов
risinek ToolДаДаДаНетНетУчебный стенд, понимание ESP-IDF

Сборка карманного хакерского девайса: от платы до корпуса​

Минимальный набор: плата ESP32-WROOM-32 DevKit, USB-кабель и компьютер с Chrome или Edge для браузерной прошивки. Если нужна автономность - добавляются аккумулятор и плата зарядки.

Прошивка​

Самый быстрый путь - ESP Web Flasher на странице проекта Marauder. Подключили плату, выбрали версию под свой чип, нажали Flash. Если хочется контроля - esptool.py:
Bash:
# Стереть текущую прошивку
esptool.py --port /dev/ttyUSB0 erase_flash
# Залить Marauder (пример для ESP32-WROOM)
esptool.py --port /dev/ttyUSB0 --baud 115200 \
  write_flash 0x1000 esp32_marauder.bin
# Примечание: в esptool v4.x+ предпочтительный синтаксис - write-flash (с дефисом)
На Windows порт будет COM3 или аналогичный - смотрите в диспетчере устройств. Типичная проблема: плата не определяется без драйвера CH340 или CP2102. Решение банальное - ищите драйвер на сайте производителя USB-UART чипа вашей платы.

Пайка и питание​

Для автономной работы припаиваю провода от TP4056 к контактам 5V и GND на ESP32. TP4056 с защитной платой (версия с чипами DW01+FS8205, маркируется «with protection») заряжает 18650 через micro-USB и одновременно питает плату. Версия без защиты не предотвращает глубокий разряд 18650 - не берите её, убьёте аккумулятор за пару циклов. Схема: плюс аккумулятора на B+, минус на B-, OUT+ на 5V ESP32, OUT- на GND. Lolin32 Lite проще - там уже есть разъём JST для LiPo-аккумулятора, паяльник не нужен.

Потребление ESP32 с Marauder в активном режиме (сканирование + запись на SD) - порядка 130-180 мА. Аккумулятор 18650 на 3400 мА·ч даёт 8-12 часов работы с учётом потерь на DC-DC преобразование. Для суточной автономности ставлю два 18650 параллельно.

OLED-экран SSD1306 подключается по I2C: SDA на GPIO21, SCL на GPIO22. SD-модуль - по SPI. Marauder определяет подключённую периферию автоматически при загрузке.

Корпус и маскировка​

На пентесте корпус - это OPSEC. Голая плата с торчащими проводами привлекает внимание уборщицы, охранника и любопытного менеджера. Рабочие варианты: 3D-печать под размер павербанка (STL-модели есть на Thingiverse по запросу «ESP32 pentest case»), корпус от сломанного павербанка (вынимаете электронику - вставляете свою) или корпус от старого кард-ридера. USB-разъём для зарядки и кнопка включения должны быть на привычных местах - иначе устройство цепляет взгляд.

Полевой workflow: от разведки эфира до hashcat​

Конкретный сценарий пентеста на ESP32 в рамках согласованного беспроводного аудита. Без согласования - даже не думайте.

Разведка​

Включаете ESP32 с Marauder, запускаете Scan Wi-Fi. Девайс собирает beacon frames со всех точек в радиусе: SSID, BSSID, канал, сигнал, шифрование. Пассивная Wi-Fi Discovery (T1016.002) - ничего не передаёте, только слушаете.

Ищете цели: WPA2-PSK без Enterprise, точки с активными клиентами (для хендшейков), AP в зоне уверенного приёма. Отдельно смотрите на OUI - префиксы Espressif (24:0A:C4, 30:AE:A4, 84:CC:A8) выдают IoT-устройства на ESP32/ESP8266, которые сами могут стать мишенями при пентесте IoT устройств ESP32. На одном аудите так нашли контроллер вентиляции с дефолтными кредами - торчал в общей сети.

Захват PMKID​

PMKID извлекается из первого сообщения (EAPOL message 1) четырёхстороннего рукопожатия WPA2. Подключённые клиенты не нужны - ESP32 инициирует Authentication и Association с целевой AP, после чего AP отправляет EAPOL message 1. Если точка поддерживает быстрый роуминг или PMKSA caching, это сообщение содержит PMKID. Marauder сохраняет результат в PCAP на SD-карту. Красота метода - не нужно ждать, пока кто-то подключится к сети.

Деаутентификация и перехват хендшейка​

Если PMKID не получен - классический путь через деаутентификацию. Marauder шлёт поддельные deauth-фреймы от имени целевой AP. Клиенты отключаются, при переподключении обмениваются четырёхсторонним рукопожатием - Marauder его перехватывает через Network Sniffing (T1040) и записывает на SD.

Когда это не работает:
  • AP и клиент используют 802.11w (Protected Management Frames) - deauth-фреймы ESP32 игнорируются. Тут ESP32 бессилен.
  • WPA3 - PMF обязателен по спецификации, деаутентификация невозможна
  • WIDS корпоративного класса (Cisco Adaptive wIPS, Aruba RFProtect) детектирует массовые deauth и блокирует по MAC
  • Целевая сеть работает на 5 GHz - ESP32 аппаратно ограничен 2.4 GHz, и это не лечится

Офлайн-брутфорс​

Извлекаете SD-карту, переносите PCAP на рабочую машину. Конвертация и взлом:
Bash:
# PCAP в формат hashcat
hcxpcapngtool -o hash.hc22000 capture.pcap
# Брутфорс WPA2 PSK на GPU
hashcat -m 22000 hash.hc22000 rockyou.txt -r best64.rule
RTX 3060 даёт порядка 400-500 тысяч комбинаций в секунду на WPA2. Rockyou.txt с правилом best64 покрывает типовые пароли за минуты. Для цифровых PSK - маска hashcat -m 22000 hash.hc22000 -a 3 ?d?d?d?d?d?d?d?d перебирает восьмизначные числовые комбинации за секунды. Восьмизначный цифровой пароль на Wi-Fi - это вообще не пароль.

BLE-разведка и GPS-wardriving: ESP32 радиомодули за пределами Wi-Fi​

ESP32 - не только Wi-Fi. Встроенный BLE-модуль превращает плату в BLE-сканер ESP32 для инвентаризации Bluetooth-устройств: фитнес-браслеты, умные замки, beacon-маячки, беспроводные клавиатуры. Marauder показывает MAC-адрес, имя устройства (если объявлено), тип и RSSI. На одном из аудитов обнаружил BLE-замок на серверную с дефолтным PIN - производитель, видимо, не предполагал, что кто-то будет целенаправленно сканировать эфир. Зря.

GPS-аудит безопасности через wardriving - другой рабочий сценарий. GPS-модуль NEO-6M или NEO-7M подключается к ESP32 по UART. Marauder привязывает координаты к каждой обнаруженной AP. Проехали периметр заказчика на машине - получили карту всех Wi-Fi-сетей с характеристиками, уровнем сигнала и геолокацией. На карте сразу видно, какие точки «вылезают» за физический периметр.

Ограничение стоит помнить: ESP32 не работает на Sub-GHz (433 МГц, 868 МГц). Для анализа LoRa, Zigbee или радиосигналов сигнализаций нужен SDR - HackRF One или хотя бы RTL-SDR. ESP32 закрывает исключительно 2.4 GHz: Wi-Fi и BLE.

OPSEC и ограничения при беспроводном аудите сетей​

📚 Часть контента скрыта. Этот материал доступен участникам сообщества с рангом One Level или выше
Получить доступ просто — достаточно зарегистрироваться и проявить активность на форуме

Практический вывод: если ваш ESP32 попадёт в руки blue team - из flash-памяти можно вытащить всё, что записано. Шифруйте критичные данные на SD-карте, не храните результаты аудита на устройстве дольше необходимого. Закончили работу - стёрли.

Деаутентификация и перехват трафика без письменного разрешения заказчика - уголовное преступление. В договоре должен быть явно указан Wi-Fi в scope, согласованы конкретные SSID и временные окна. Уведомление IT-департамента или его отсутствие - вопрос модели engagement, но это должно быть прописано в документах до начала работ.

Собирая ESP32 для пентеста, стоит помнить одну вещь. Часть пентестеров предпочитает покупать готовые устройства с AliExpress - M5Stack Cardputer с предустановленным Bruce или Marauder-плату в пластиковом корпусе. Включают, тыкают по меню, ловят хендшейк и считают себя подготовленными. Но разница между тем, кто собрал девайс сам, и тем, кто купил готовый, проявляется в момент, когда что-то идёт не так. Плата не прошивается - ты знаешь, что проблема в драйвере CH340. Аккумулятор не держит - ты понимаешь, что TP4056 не выдаёт достаточный ток при одновременной зарядке и питании. Marauder не видит AP - ты знаешь, что антенна на PCB слабее внешней u.FL. Пайка, отладка, подбор компонентов - это и есть тот hardware hacking, который формирует пентестера IoT-устройств, а не оператора чужого меню.

ESP32-S3 с BLE 5.0 и USB-OTG постепенно вытесняет старые WROOM-модули - BadUSB, BLE-аудит и Wi-Fi на одной плате без внешних модулей. Cardputer уже показал, как это выглядит в готовом форм-факторе. Но собрать аналог за треть цены из компонентов - по-прежнему выгоднее и полезнее для навыков. Попробуйте - соберите свой первый девайс, прошейте Marauder и просканируйте эфир у себя дома. Удивитесь, сколько всего торчит наружу.
Полезно

Комментарии

0

Ещё по теме