Безопасность firmware
Тема дорожной карты · Embedded / Системный программист
Безопасность firmware — отдельная дисциплина embedded-разработки, поднявшаяся в последние 5 лет благодаря IoT и регуляторике (CRA в ЕС, обязательная сертификация в ряде вертикалей). Покрывает три фазы: безопасная загрузка (secure boot), защищённое хранение секретов (ключи, сертификаты), безопасные обновления (signed OTA). Без них устройство — вектор атаки: злоумышленник может прошить свою firmware, извлечь ключи дешифрования, подменить behaviour в полях.
Как это работает
Secure boot строится на цепочке доверия: BootROM (immutable) проверяет подпись bootloader-а через root-of-trust ключ (вшит в OTP-fuses чипа), bootloader проверяет ядро/RTOS-образ, тот проверяет приложение. Каждый шаг отказывается работать с непроверенным следующим. Хранение секретов — в защищённом периметре чипа: TPM (Trusted Platform Module) — внешний или встроенный crypto-чип, ARM TrustZone — Secure World отделён от Normal World на уровне процессора, eFuse OTP — для root keys. OTA-обновления подписываются на сервере, на устройстве проверяется подпись + версия (anti-rollback), A/B partition даёт безопасный fallback.
Когда применять
Любое устройство, которое подключено к сети и работает за пределами физически контролируемой среды (промышленный IoT в поле, медтехника в больницах, smart-home), обязано иметь secure boot и подписанные обновления. Для closed-systems (production line, не подключенные к сети) можно ограничиться physical security. CRA требует поддержку обновлений в течение всего lifecycle устройства — это бизнес-требование, не техническая опция.
Типичные ошибки
Хранение приватных ключей в исходном коде — извлекаются reverse-engineering-ом за час. Отключение JTAG/SWD-портов через fuse без альтернативного debug-канала — устройство нельзя отлаживать в полях после deploy. Подпись обновлений ECDSA без anti-rollback — старая уязвимая прошивка с валидной подписью может быть откачена. Использование одного root-ключа для всего парка — компрометация = brick всего парка устройств.