В эпоху Интернета вещей (IoT) беспроводная связь становится все более популярной в повседневной жизни. В мире устройств Интернета вещей ESP32 — это популярный недорогой микроконтроллер System on Chip (SoC) со встроенными гибридными чипами Wi-Fi и Bluetooth от компании Espressif Systems. Благодаря своей прочной конструкции и сверхнизкому энергопотреблению он стал невероятно популярен в приложениях Интернета вещей. Но когда мы говорим о приложениях IoT, на ум приходит безопасность в IoT , связанная с безопасностью данных и безопасным соединением. ESP32 поддерживает взаимную аутентификацию на основе сертификата X.509 для HTTP, аутентификацию в облаке IoT ( AWS-IoT, Azure, Google Firebase и т. д.) и передачу данных. Через сеть Интернет ESP32 также обеспечивает безопасность данных, хранящихся во флэш-памяти и загрузочных секторах, чтобы предотвратить кражу данных. Сегодня мы поговорим о функциях безопасности ESP32, в основном связанных с его загрузочными секторами. Две основные функции безопасности ESP32 называются Secure-Boot и Flash Security, также известные как Flash-Encryption.
Какие блоки eFUSE есть в ESP32?
ESP32 имеет 1024-битный одноразово программируемый (One-Time-Programmable, OTP) блок памяти. Этот блок памяти OTP разделен на 4 блока по 256 бит каждый.
В этих блоках памяти хранятся ключи шифрования Flash и Secure Boot. В связи с тем, что это одноразово программируемые блоки памяти, отсутствует какое бы то ни было программное обеспечение для считывания этих блоков памяти. Только оборудование модуля ESP32 может читать и проверять функции безопасности.
Из-за блока памяти OTP отсутствует программное обеспечение для считывания этих блоков памяти. Только оборудование ESP32 может читать и проверять функции безопасности.
Что такое флэш-шифрование? Как включить его на ESP32?
ESP32 Flash Encryption (флэш-шифрование) — это функция безопасности для ESP32, предоставляемая системой ESP-IDF от компании Espressif для защиты флэш-памяти. Флэш-шифрование шифрует содержимое флэш-памяти SPI ESP32, и когда эта функция включена, по умолчанию шифруются следующие типы данных:
- загрузчик прошивки;
- таблица разделов;
- разделы типа «приложение» или разделы приложений;
- любой раздел, помеченный в таблице разделов флажком «зашифрованный», также зашифрован.
В проектах ESP-IDF пользователи могут легко включить Flash Encryption из конфигурации проекта с помощью
1 |
idf.py menuconfig |
После открытия меню конфигурации проекта ESP32 перейдите к
1 2 3 |
“Security Features” --> “Enable flash encryption on boot” --> “Enable usage mode (Development(NOT SECURE))” / “Enable usage mode (Release)” |
При флэш-шифровании существует два режима:
- Режим разработки: в этом режиме все разделы флэш-памяти ESP32 зашифрованы и открыты для модификации, а также доступны для считывания флэш-памяти с помощью UART.
- Режим выпуска: этот режим особенно рекомендуется для этапов производства и производства. В этом режиме считывание флэш-памяти с помощью UART/JTAG полностью блокируется, и новая прошивка может быть обновлена только по беспроводной сети (OTA).
Когда флэш-шифрование включено, двоичные файлы текущего кода сохраняются в памяти ESP32 в виде обычного текстового файла. Но после завершения процесса прошивки, при первой загрузке ESP32 устройство само зашифрует каждый верхний раздел, один за другим, с помощью ключа шифрования флэш-памяти AES, который хранится в eFUSE-BLK1 во время прошивки. После шифрования раздела устройство ESP32 перезагрузится и обработает запрограммированную логику.
В процессе выполнения программы модуль ESP32 расшифровывает данные флэш-памяти когда его исполнительный блок пытается их прочитать, а в процессе записи модуль шифрует данные их перед записью во флэш-память.
Что такое безопасная загрузка? Как включить ее на ESP32?
ESP32 Secure-boot (безопасная загрузка) — это функция безопасности, которая обеспечивает безопасность запуска корректных приложений на оборудовании ESP32. Когда включена безопасная загрузка, все двоичные файлы флэш-памяти [загрузчик программного обеспечения и встроенное ПО] проверяются перед загрузкой с помощью ключей подписи Secure-boot на основе RSA-3072. Таким образом, мы можем назвать Secure-boot «Хранителем (Guardian) ESP32».
Для включения флэш-шифрования мы аналогичным образом можем включить безопасную загрузку из меню конфигурации проекта.
1 2 |
“Security Features” --> “Enable hardware Secure Boot in bootloader” |
Как работает Secure-boot?
Когда устройство ESP32 загружается, доверенная прошивка оборудования ESP32 или, как мы говорили, загрузчик 1-го этапа выполняет проверку с помощью ключа безопасной загрузки на основе RSA-3072 на программном загрузчике, а затем программный загрузчик проверяет прошивку приложения с тем же ключом подписи и запускает приложение.
Заключение
Модуль ESP32 поставляется с безопасной средой [Secure-boot & Flash-Encryption], которую нам необходимо включить во время прошивки кода. Для большей безопасности рекомендуется включить обе эти опции.
857 просмотров
а что решает эта защита, ведь слив дампа не позволит декомпилировать прошивку?
Не совсем понял слив какого дампа вы имеете ввиду?
На хакере уже опубликован взлом.
Ну что поделать, будем ждать пока кто-нибудь придумает защиту получше ))