По мере того, как разработчики встроенной системы переходят на создание подключенных устройств IoT, безопасность стала одной из наиболее важных проблем, с которыми они сталкиваются. Процессоры ARMv8-M поддерживают TrustZone, который предоставляет разработчикам новый механизм, помогающий изолировать их защищенное программное обеспечение от более общего программного обеспечения пользователя. Как и любой новый инструмент, необходимо следовать нескольким советам разработчиков, чтобы убедиться, что они улучшают их системную безопасность.
Совет 1 — Провести аудит безопасности для понимания потребностей в безопасности
Прежде чем пытаться использовать TrustZone, необходимо, чтобы разработчики проводили аудит безопасности и определяли, что в их системе необходимо защитить. Это может сильно варьироваться от приложения к заявке, но может включать в себя:
- Ключи
- Данные
- Библиотеки
- Код приложения
- Периферия
- Местоположения памяти
- Связь
- И т.д.
В зависимости от ресурса, который необходимо защитить, будут существовать различные способы защиты этого ресурса, такие как использование шифрования или изоляции. TrustZone разработан, чтобы помочь разработчикам изолировать их дизайн.
Совет 2 — Минимизировать доступ к незащищенной памяти с использованием защищенного кода
TrustZone отделяет аппаратное обеспечение микроконтроллера от двух зон: безопасное и незащищенное. Небезопасный код имеет доступ к защищенной памяти только для выполнения «открытых» функций. Это позволяет пользовательскому приложению вызывать защищенную функциональность. Но попытка получить доступ к чему-либо за пределами открытых функций приведет к ошибке. Это замечательно, но потенциальной проблемой для разработчиков является то, что защищенный код может получить доступ ко всем областям незащищенной памяти.
Разработчикам необходимо соблюдать осторожность при использовании защищенного кода для доступа к незащищенной памяти. Разработчик может использовать инструкцию TT для проверки разрешений для региона. Это предотвратит случайное выполнение незащищенного кода в защищенной области. Разработчики должны использовать защищенный код для доступа к защищенному коду и сведения к минимуму доступа к незащищенной памяти.
Совет 3 — Очистить секретную информацию из небанковских регистров
В реализации TrustZone существуют безопасные регистры, которые не могут быть просмотрены, если процессор работает в ненадежном режиме. Тем не менее, есть регистры процессора, которые сгруппированы и распределены между безопасным и ненадежным режимами. Это означает, что если выполняется безопасная операция, и часть данных хранится в регистре банков, процесс переходит к ненадежному режиму. Затем защищенные данные могут быть доступны через банковский регистр. Чтобы этого не произошло, разработчикам необходимо убедиться, что все небанковские регистры, которые были использованы, очищаются, прежде чем переходить в режим незащищенного исполнения. В противном случае это может стать способом для хакеров получить представление или даже получить доступ к защищенным областям кода.
-
Копаем глубже в TrustZone для ARMv8-M
-
Введение в архитектуру ARMV8-M
-
7 советов по защите встроенной системы
Совет 4 — Аутентификация незащищенного изображения при запуске
Когда загружается процессор TrustZone, безопасный режим вводится автоматически. Это дает разработчикам возможность не просто инициализировать свой процессор, но также надежно загружать процессор. Разработчики могут аутентифицировать свои пользовательские приложения и следить за тем, чтобы все было в порядке до перехода в небезопасный режим и запуска пользовательских приложений. Если злоумышленнику удалось вставить свой собственный код или приложение в память, защищенный код может обнаружить это при запуске и предпринять необходимые действия, чтобы помешать попытке использовать систему. Это может заставить разработчика задаться вопросом: что произойдет, если изменится область безопасного кода? Защищенные области заблокированы и не могут быть изменены без специальных инструментов.
Совет 5 — Используйте как небезопасные, так и защищенные MPU
Еще одна интересная особенность TrustZone заключается в том, что она обеспечивает модуль защиты памяти (MPU) для небезопасной области памяти и защищенной области. Это означает, что разработчики могут принять дополнительную предосторожность защиты памяти даже в защищенной памяти. MPU может быть настроен для мониторинга защищенных задач, выполняемых в RTOS, или для обнаружения попытки переполнения стека задач. Это дает разработчикам довольно гибкую информацию о том, как они могут реализовать свое безопасное решение.
Заключение
Добавление безопасности к подключенному устройству, несомненно, будет сложной задачей для многих групп разработчиков. TrustZone предоставляет разработчикам дополнительный инструмент для повышения безопасности. Как и любой инструмент, его нужно использовать должным образом, чтобы быть эффективным. Мы рассмотрели несколько простых советов в этой статье, но еще многое предстоит сделать для защиты встроенной системы.
Якоб Бенинго является консультантом по встроенному программному обеспечению, который в настоящее время работает с клиентами в более чем десятке стран, чтобы кардинально преобразовать свой бизнес, улучшив качество, стоимость и время выхода на рынок. Он опубликовал более 200 статей по встроенным технологиям разработки программного обеспечения, является востребованным спикером и техническим тренером и имеет три степени, в том числе магистры машиностроения из Мичиганского университета. Не стесняйтесь обращаться к нему по адресу jacob@beningo.com, на своем веб-сайте www.beningo.com/ и подписываться на его ежемесячный Embedded Bytes Newsletter .
|