Астрологи провозгласили десятилетие атак на устройства IoT. Новые угрозы требуют комплексного подхода, поэтому безопасностью встраиваемых систем сегодня озабочены не только их разработчики, но и производители железа. Сегодня я на примере отладочной платы Nucleo с STM32H743 расскажу, какие векторы атаки стоит рассматривать в первую очередь и как можно защитить прошивку и конфиденциальные данные.
Безумная иллюминация в стиле Жана Мишеля Жарра или новый альбом группы Rammstein из колонок в половине пятого утра — это все милые шалости по сравнению с тем, к каким последствиям может привести взлом автоматических кормушек для питомцев или носимых медицинских устройств.
Обновления «по воздуху» и многочисленные отладочные интерфейсы умных устройств могут оказаться серьезной дырой в безопасности, которая позволит опытному злоумышленнику подменить заводскую прошивку своей собственной, — не говоря уж о банальной краже чужой интеллектуальной собственности. Глупый, глупый современный IoT!
В общем случае разработчику, который хочет защитить свое устройство, предстоит решить две ключевые задачи.
Итак, это два разных механизма защиты и преследуют они разные цели, но только их совместное применение позволяет эффективно бороться с угрозами. Иными словами, даже самые совершенные криптографические алгоритмы окажутся бесполезными, если хакер может получить расшифрованный дамп прошивки. И наоборот, защищенная от считывания память никак не предотвратит загрузку программы с вредоносным кодом.
Сегодня самый простой способ обновить прошивку устройства (SFU, Secure Firmware Update) — это отправить ему свежую версию удаленно, «по воздуху». Таким образом, мы храним на сервере и распространяем уже зашифрованный бинарник, который клиент может скачать, подтвердить его целостность, аутентифицировать, расшифровать и, наконец, установить.
Базовую безопасность при этом обеспечивают следующие меры: во-первых, исключается возможность альтернативных методов загрузки. Для этого применяется подтвержденный Secure Boot, который формирует root of trust в нашей системе. Во-вторых, приватные ключи шифрования должны храниться в прошивке устройства и быть индивидуальными.
Кроме того, конкретную реализацию криптографического алгоритма следует проверять на устойчивость к АВК (атака по второстепенным каналам, side-channel attack) или АМИС (атака методом индуцированных сбоев, fault injection attack). К этому мы еще вернемся.
Подробнее об АВК читай в нашем материале «Аппаратный CTF. Легкий способ узнать ключ шифрования устройства, когда у тебя под рукой осциллограф и ноутбук». А про АМИС на ZeroNights 2019 рассказывал LimitedResults, статью по мотивам доклада тоже можешь почитать у нас: «Взламываем ESP32 раз и навсегда. Извлечение ключей флеш-шифрования и безопасной загрузки».
Наконец, следует озаботиться защитой от нежелательного внешнего доступа. К счастью, многие разработчики уже научились отключать JTAG — самый желанный подарок для злоумышленника. Однако производители не стоят на месте и предлагают сегодня дополнительные средства обнаружить воздействие, такие как Anti-Tamper. Ими пользуются пока не так часто, как хотелось бы.
Посмотрим теперь, как выглядит применение подобных рекомендаций на практике, для линейки микроконтроллеров STM32.
Стоит заметить, что набор доступных средств защиты зависит от конкретного семейства МК (F, G, L и H). Демонстрационные примеры в пакете X-CUBE-SBSFU охватывают большую часть из этого набора, но за полной информацией в любом случае следует обращаться к документации. Конкретно сегодня нас интересуют:
Все ссылки — на PDF.
Это базовый механизм безопасности, который предотвращает доступ к содержимому памяти микроконтроллера различными отладочными средствами (JTAG, SWV и ETM). Его применение рекомендуется во всех случаях на готовых серийных устройствах. Отключение RDP возможно только для первого уровня защиты и приводит к стиранию содержимого флеш-памяти. Включение второго уровня — необратимая операция для микросхемы.
Теоретически все это может осложнить сервисное обслуживание и поиск причины неисправности возвращенного пользователем оборудования. Однако, так как само приложение все равно сохраняет способность писать в постоянную память и изменять ее, возможность обновлений прошивки (в том числе с помощью SFU) остается. При включенном RDP попытка доступа к защищенному участку памяти приводит к генерации ошибки на шине AHB.
На H743 за эту функцию отвечают биты RDP [15:8]
в паре регистров FLASH_OPTSR_CUR
и FLASH_OPTSR_PRG
из области Option Bytes. При этом значение 0xAA
соответствует нулевому уровню защиты (по умолчанию), значение 0xCC
— первому, а любое другое — второму (максимальному) уровню.
Формально на диаграммах STMicroelectronics Option Bytes относятся к внутренней флеш-памяти, однако непосредственный доступ к ним невозможен. Для взаимодействия и внесения изменений пользователю нужно обращаться к регистрам и следовать определенной процедуре (подробнее см. раздел Option Bytes Modification на с. 157 RM0433).
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score! Подробнее
1 год4990 р. |
1 месяц720 р. |
Я уже участник «Xakep.ru»
Читайте также
Последние новости