Защищаем микроконтроллер. Как работает Firmware Hardening и Secure Boot на примере STM32

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

Безумная иллюминация в стиле Жана Мишеля Жарра или новый альбом группы Rammstein из колонок в половине пятого утра — это все милые шалости по сравнению с тем, к каким последствиям может привести взлом автоматических кормушек для питомцев или носимых медицинских устройств.

Обновления «по воздуху» и многочисленные отладочные интерфейсы умных устройств могут оказаться серьезной дырой в безопасности, которая позволит опытному злоумышленнику подменить заводскую прошивку своей собственной, — не говоря уж о банальной краже чужой интеллектуальной собственности. Глупый, глупый современный IoT!

Для чего нужен Secure Boot

В общем случае разработчику, который хочет защитить свое устройство, предстоит решить две ключевые задачи.

  • В первую очередь следует реализовать механизм подтверждения подлинности прошивки (аутентификации). Для этого используются различные криптографические алгоритмы (например, SHA-256 и NIST P256). Они позволяют убедиться, что на устройстве будет исполняться только доверенный код.
  • Кроме того, необходимо защитить память от внешних атак и лишить злоумышленника доступа к критичным регионам, который он может в теории получить с помощью уязвимостей ПО либо при использовании отладочных интерфейсов (например, JTAG) или логического анализатора.

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

Как это работает

Сегодня самый простой способ обновить прошивку устройства (SFU, Secure Firmware Update) — это отправить ему свежую версию удаленно, «по воздуху». Таким образом, мы храним на сервере и распространяем уже зашифрованный бинарник, который клиент может скачать, подтвердить его целостность, аутентифицировать, расшифровать и, наконец, установить.


Базовую безопасность при этом обеспечивают следующие меры: во-первых, исключается возможность альтернативных методов загрузки. Для этого применяется подтвержденный Secure Boot, который формирует root of trust в нашей системе. Во-вторых, приватные ключи шифрования должны храниться в прошивке устройства и быть индивидуальными.


Кроме того, конкретную реализацию криптографического алгоритма следует проверять на устойчивость к АВК (атака по второстепенным каналам, side-channel attack) или АМИС (атака методом индуцированных сбоев, fault injection attack). К этому мы еще вернемся.

INFO

Подробнее об АВК читай в нашем материале «Аппаратный CTF. Легкий способ узнать ключ шифрования устройства, когда у тебя под рукой осциллограф и ноутбук». А про АМИС на ZeroNights 2019 рассказывал LimitedResults, статью по мотивам доклада тоже можешь почитать у нас: «Взламываем ESP32 раз и навсегда. Извлечение ключей флеш-шифрования и безопасной загрузки».

Наконец, следует озаботиться защитой от нежелательного внешнего доступа. К счастью, многие разработчики уже научились отключать JTAG — самый желанный подарок для злоумышленника. Однако производители не стоят на месте и предлагают сегодня дополнительные средства обнаружить воздействие, такие как Anti-Tamper. Ими пользуются пока не так часто, как хотелось бы.

Аппаратные средства

Посмотрим теперь, как выглядит применение подобных рекомендаций на практике, для линейки микроконтроллеров STM32.

WWW

Стоит заметить, что набор доступных средств защиты зависит от конкретного семейства МК (F, G, L и H). Демонстрационные примеры в пакете X-CUBE-SBSFU охватывают большую часть из этого набора, но за полной информацией в любом случае следует обращаться к документации. Конкретно сегодня нас интересуют:

  • AN5156 — ключевой материал о безопасности микроконтроллеров STM32;
  • UM2262 — руководство по фреймворку SBSFU в пакете XCUBE;
  • AN4838 — апноут для MPU (Memory Protection Unit);
  • PM0253 — мануал по механизмам защиты для ядра Cortex-M7;
  • DS12110 — даташит на МК H743;
  • RM0443 — референс на МК H743.

Все ссылки — на PDF.

Защита от чтения, RDP

Это базовый механизм безопасности, который предотвращает доступ к содержимому памяти микроконтроллера различными отладочными средствами (JTAG, SWV и ETM). Его применение рекомендуется во всех случаях на готовых серийных устройствах. Отключение RDP возможно только для первого уровня защиты и приводит к стиранию содержимого флеш-памяти. Включение второго уровня — необратимая операция для микросхемы.

Теоретически все это может осложнить сервисное обслуживание и поиск причины неисправности возвращенного пользователем оборудования. Однако, так как само приложение все равно сохраняет способность писать в постоянную память и изменять ее, возможность обновлений прошивки (в том числе с помощью SFU) остается. При включенном RDP попытка доступа к защищенному участку памяти приводит к генерации ошибки на шине AHB.

На H743 за эту функцию отвечают биты RDP [15:8] в паре регистров FLASH_OPTSR_CUR и FLASH_OPTSR_PRG из области Option Bytes. При этом значение 0xAA соответствует нулевому уровню защиты (по умолчанию), значение 0xCC — первому, а любое другое — второму (максимальному) уровню.

INFO

Формально на диаграммах STMicroelectronics Option Bytes относятся к внутренней флеш-памяти, однако непосредственный доступ к ним невозможен. Для взаимодействия и внесения изменений пользователю нужно обращаться к регистрам и следовать определенной процедуре (подробнее см. раздел Option Bytes Modification на с. 157 RM0433).

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


Александр Бурага: Инженер-конструктор радиоэлектронной техники. С вниманием следит за прогрессом IoT и носимой электроники.
Похожие материалы