Якщо ви коли-небудь купували розумну лампочку, автоматичний вимикач живлення або камеру IoT, у вас, імовірно, вже є мікроконтролер ESP8266 чи ESP32. Китайська компанія під назвою Espressif створила ESP як доступну платформу для легкого виготовлення розумних продуктів, підключених до Wi-Fi, Bluetooth, LoraWan, тощо. Крихітні мікроконтролери мають дивовижну функціональність в міцному і недорогому пакеті, ставши ще більш популярними після того, як хакери стали використовувати дружню до початківців мову Arduino IDE на ESP.
Легке створення прототипів засобів безпеки Wi-Fi чи BLE стало можливим завдяки створенню плат для розробки з мікроконтролером ESP, встановленим на друкованій платі з інтерфейсом USB для легкого програмування. До них відносять NodeMCU і D1 mini, мабуть, найпопулярніші developer board для ESP. Ці плати легко дозволяють працювати новачкам, використовуючи популярні мови, такі як Arduino, MicroPython та Lua.
Сьогодні більше поговоримо про ESP32.
Протягом багатьох з цих років ESP32, здавалося, має добру репутацію. Це досить недорогий модуль для розробників, зацікавлених в одноразових проектах. За останній рік я бачив ESP32 не тільки в декількох виробничих системах, але також як його можливості та екосистему використовують в різних напрямах, що робить плату надзвичайно цікавою для багатьох розробників IoT. У сьогоднішній публікації я розповім, чому вважаю ESP32 інтригуючим рішенням для IoT та Wireless Pentesting.
Чому він популярний?
Причина #1 — Це дешево
В багатьох системах IoT, для яких я розробив програмне забезпечення, часто виявляв, що хороший відсоток витрат на оплату матеріалів йде безпосередньо на підключення та на самий мікроконтролер. Модулі ESP32 достатньо недорогі в порівнянні з багатьма іншими рішеннями, які доступні на ринку сьогодні. Наприклад, якщо ви поглянете на модулі ESP32, які доступні на веб-сайті Digikeys, ви побачите, що ці модулі в середньому коливаються від $3.80 до близько $4.80!
Причина #2 — Bluetooth/Wi-Fi комбінований модуль
Коли справа доходить до IoT чи Pentesting, існує певна необхідність мати можливість підтримувати кілька рішень для роботи. У деяких випадках Bluetooth може бути кращим для потреб локального підключення, тоді як з’єднання Wi-Fi необхідне для хмарної та віддаленої взаємодії з пристроями. Коли один модуль може забезпечити обидва рішення, це, безумовно, безпрограшний варіант не тільки для розробника, але і для кінцевого користувача. Якщо продукту потрібне лише з’єднання Wi-Fi, стек Bluetooth можна вимкнути або увімкнути Bluetooth як функцію, яка буде додана згодом. Я бачив кілька клієнтів, які вибрали ESP32 для функцій Wi-Fi, а потім ввімкнули Bluetooth, щоб розширити набір функцій для своїх продуктів.
Причина #3 — Вона має широку підтримку екосистеми
ESP32 має напрочуд велику екосистему. Спочатку можна знайти багато інструментів з відкритим вихідним кодом та бібліотек, таких як ті, що надаються через Arduino IDE. Наприклад, Espressif пропонує інструменти розробки та програмні фреймворки, які здаються достатньо надійними, щоб задовольнити більшість розробників.
Причина #4 — Ви можете програмувати на MicroPython
Крім всіх інших причин, які ми обговорювали, ESP32 також є цікавим рішенням, оскільки можна встановити MicroPython на модуль і розробити додаток в Python. Хоча я знаю, що це не обов’язково є кращим рішенням для системи, це відкриває можливість швидко створити прототип системи.
Як запрограмувати ESP?
Мікроконтролери, такі як ESP, не мають багатьох функцій, як на повноцінних комп’ютерах, наприклад, Raspberry Pi. Найбільша відмінність полягає в тому, що мікроконтролер не має операційної системи. Замість цього нам потрібно запрограмувати те, що ми хочемо, а потім завантажити його для запуску в циклі.
Для початку завантажте Arduino IDE, додайте ESP32 до списку плат і підключіть його через USB. Далі виберіть плату розробки, яку ви використовуєте, і прошийте завантажений на неї код, наприклад, Wi-Fi Deauther.
Можливості
- Атаки на автентифікацію
Одним з найпотужніших можливостей ESP32 є написання майже будь-якого типу Wi-Fi пакету з нуля.
Маршрутизатори Wi-Fi можуть надіслати повідомлення, яке називається пакетом для перевірки автентичності, на будь-який підключений пристрій. Аналогічним чином, пакет роз’єднання дає команду пристрою відключитися, коли він залишає зону покриття мережі Wі-Fі. ESP32 можливо використовувати для підробки цих повідомлень, що може призвести до відключення будь-якого цільового пристрою в межах досяжності Wi-Fi.
Коли пакети де-аутентифікації надсилаються безперервно, пристрої Wi-Fi, такі як ноутбуки та камери безпеки IoT, взагалі перестануть підключатися до мережі. Це фактично DOS-атака. Майбутній стандарт WPA3 виправляє це, роблячи пакети для перевірки автентичності неможливими, але поки новий стандарт не буде широко використовуватися, більшість мереж залишаються вразливими до цього недоліку.
- Sniffing пакетів
ESP32 також може перехоплювати пакети BLE та Wi-Fi. Бібліотека Arduino PCAP може читати основну інформацію про мережі за допомогою Wireshark, використовуючи ESP як мережевий адаптер.
Ви можете використовувати sniffing пакетів та детектор Deauth, щоб попередити себе про можливу атаку де-аутентифікації, перехоплюючи підозрілу кількість пакетів де-аутентифікації. Якщо хтось почне використовувати такий інструмент, як Deauther проти пристрою у вашій мережі, детектор Deauth виявить потік пакетів і попередить вас про те, що вашу мережу атакують.
ESP32 також можна використовувати для моніторингу всіх пакетів за допомогою монітора пакетів Wi-Fi чи BLE. Цей інструмент може контролювати кількість точок доступу та пристроїв, а також кількість і тип пакетів, що надсилаються в певній зоні.
- Створення фейкових мереж
ESP32 можна використовувати для підробки beacon пакету, який є типом пакету, що використовується точкою доступу Wi-Fi, щоб оголосити свою назву та основну інформацію будь-кому в діапазоні. Ці пакети також допомагають шукати вже знайомі тобі мережі.
Інструмент, званий Beacon Spammer, може легко створити до тисячі підроблених мереж одночасно. Хакер, який додає до цього списку найпоширеніші відкриті імена мереж Wi-Fi та активує Beacon Spammer, призведе до того, що сусідні розумні пристрої припинять використовувати рандомізацію MAC-адрес, намагаючись підключитися до знайомих підроблених мереж.
Це означає дві речі. По-перше, ESP32 може призвести до того, що сусідні пристрої припинять використовувати рандомізовані MAC-адреси, що робить їх вразливими для відстеження. Другий полягає в тому, що ESP32 може визначити, які мережеві імена, швидше за все, потрібно використовувати зловмиснику для того, щоб вивчити багато можливостей, чекаючи реакції від цільового пристрою.
- “Малий пакет, великий потенціал”
Для такого невеликого і недорогого пристрою досить примітно, що цей мікроконтролер може зондувати сусідні пристрої мережі, взагалі відключати пристрої від мережі або навіть виявляти атаку Wi-Fi чи BLE. Ці здібності продовжують робити ESP32 захоплюючою платформою для хакеріві показує наскільки дешевою може бути атака.
Практика
Для установки Arduino IDE і всіх необхідних драйверів перейдіть за посиланням.
- BLE-scanner
ESP32 може виступати як BLE-сервер або як BLE-клієнт. Є кілька прикладів BLE для ESP32 у бібліотеці ESP32 BLE для Arduino IDE. Ця бібліотека встановлюється за замовчуванням, коли ви встановлюєте ESP32 в IDE Arduino.
Примітка: Вам потрібно встановити надбудову ESP32 в IDE Arduino. Дотримуйтесь одного з наступних посилань, щоб підготувати Arduino IDE до роботи з ESP32, якщо ви цього ще не зробили.
▪ Windows instructions — ESP32 Board in Arduino IDE
▪ Mac and Linux instructions — ESP32 Board in Arduino IDE
У вашій IDE Arduino ви можете перейти до меню Файл > Приклади > ESP32 BLE Arduino та дослідити приклади, що встановлені з бібліотекою BLE.
Примітка: щоб побачити приклади ESP32, потрібно вибрати board ESP32 у меню Інструменти > Boards.
Для короткого прикладу до ESP32 з BLE в IDE Arduino ми створимо сервер ESP32 BLE, а потім сканер ESP32 BLE, щоб знайти цей сервер. Ми використаємо та пояснимо приклади, що додаються до бібліотеки BLE.
Щоб повторити цей приклад, вам потрібні дві плати ESP32. Ми будемо використовувати плату ESP32 DOIT DEVKIT V1.
Сервер ESP32 BLE
Щоб створити сервер BLE ESP32, відкрийте IDE Arduino і перейдіть у меню Файл > Приклади > ESP32 BLE Arduino і виберіть приклад BLE_server. Завантажується такий код:
Для створення сервера BLE код повинен виконувати наступні кроки:
- Створити BLE-сервер.
- Створити службу BLE.
- Створити характеристику BLE на службі.
- Створити BLE-дескриптор на характеристиці.
- Запустити службу.
- Запустити advertisement, щоб її могли знайти інші пристрої.
Як працює код?
Давайте швидко розглянемо, як працює приклад сервера BLE.
Починається з імпорту необхідних бібліотек для можливостей BLE.
Потім вам потрібно визначити UUID для Служби та Характеристики.
Ви можете залишити UUID за замовчуванням або перейти на uuidgenerator.net, щоб створити випадкові UUID для своїх служб та характеристик.
У функції setup() він запускає послідовний зв’язок зі швидкістю передачі в 115200.
Потім ви створюєте пристрій BLE під назвою “MyESP32”. Ви можете змінити це ім’я на будь-яке, що вам подобається.
У наступному рядку ви встановите пристрій BLE як сервер.
Після цього ви створюєте службу для сервера BLE з UUID, визначеним раніше.
Потім ви встановлюєте характеристику для цієї служби. Як бачите, вам потрібно передавати як аргументи властивості характеристики. У цьому випадку це: READ & WRITE.
Після створення характеристики ви можете встановити її значення методом setValue ().
У цьому випадку ми встановлюємо значення як текст “Hello World says Neil”. Ви можете змінити цей текст на свій смак. У майбутніх проектах, цей текст може бути показанням датчика або, наприклад, станом лампи.
Нарешті, ви можете запустити служби та рекламу, щоб інші пристрої BLE могли сканувати та знаходити на цей пристрій BLE.
Це лише простий приклад того, як створити BLE-сервер. У цьому коді нічого не робиться в функції loop(), але ви можете додати її, коли підключається новий клієнт.
Сканер ESP32 BLE
Створити сканер ESP32 BLE дуже просто. Візьміть інший ESP32 (поки інший виконує ескіз сервера BLE). У вашій IDE Arduino перейдіть у меню Файл > Приклади > ESP32 BLE Arduino і виберіть приклад BLE_scan. Потрібно завантажити наступний код.
Цей код ініціалізує ESP32, як пристрій BLE та сканує пристрої поблизу. Завантажте цей код на ESP32. Можливо, ви захочете тимчасово відключити інший ESP32 від комп’ютера, щоб бути впевненим, що завантажуєте код на правильну плату ESP32.
Після завантаження коду, і ви повинні увімкнути дві плати ESP32.
Перейдіть до послідовного монітора з ESP32, на якому запущено приклад “BLE_scan”, натисніть кнопку ESP32 (з ескізом “BLE_scan”) ENABLE, щоб перезапустити, і зачекайте кілька секунд, поки він сканує.
Сканер знайшов два пристрої: один — це ESP32 (він має назву “MyESP32), а другий — MiBand2.
- ESP32 — Wi-Fi sniffer
Цей експериментальний проект показує, як створити простий і недорогий аналізатор пакетів Wi-Fi (також відомий як sniffer Wi-Fi). Серцем цього проекту є Wi-Fi модуль ESP32, який здатний працювати в promisc режимі. Це означає, що цей розумний чіп дозволяє захоплювати мережеві пакети IEEE802.11 для подальшого аналізу. Оскільки модуль Wi-Fi не реалізує автоматичне перемикання каналів, у основний цикл додано додатковий код, який перемикає канали з інтервалом у 500 мс. Представлений sniffer вимагає функції зворотного виклику, яка обробляє всі отримані нерозбірливі пакети. Приклад функції зворотного виклику відображає кілька основних відомостей, таких як тип пакета (пакет керування, пакет управління тощо), RSSI або MAC-адреси. Повний код, що використовує ESP-IDF, знаходиться на GitHub, натисніть тут.
Версія Arduino — https://github.com/ESP-EOS/ESP32-WiFi-Sniffer.
Ось сам код для використання:
Ось сам результат:
Однією платою ESP32 краще моніторити тільки 1 канал для кращого збору інформації, але враховуючи їх дешевизну, то це може виглядати приблизно так:
Висновки
Я не намагаюся бути адвокатом або упередженим по відношенню до ESP32 в будь-якому випадку. Те, що я намагаюся зробити, це поділитися тим, наскільки інтригуючими стали ці модулі для професійних розробників, які розробляють недорогі продукти IoT. Потенціал використання модулів для зниження витрат за рахунок інтеграції декількох рішень є досить високим.
Як можна бачити, в плані співвідношення можливостей і ціни, ESP32 досить цікаві, і в будь-якому випадку, набагато функціональніші за звичайні Arduino. Експерименти з Wi-Fi також досить цікаві, на платі можна тримати не тільки цілком функціонуючий веб-сервер (навіть з підтримкою websockets), але і вивчити роботу Wi-Fi і MAC більш детально.
В цілому, модулі ESP32 цікаві тоді, коли можливостей Arduino вже не вистачає, а використовувати Raspberry Pi з Linux дуже дорого. До речі, обчислювальні можливості ESP32 дозволяють використовувати навіть модуль камери, так, що плату можна використовувати в якості бездротового відеодзвінка або прототипу для домашньої системи відеоспостереження.
Що думаєте? Чи використовували ви ESP32 у своїх продуктах або розглядали його?