Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial Internet of Things >> Облачные вычисления

Как использовать функции безопасности Arm TrustZone LPC5500

Узнайте, как работает расширение Arm TrustZone для серии LPC5500 и как начать использовать меры безопасности в настраиваемых защищенных и незащищенных приложениях.

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

NXP внедрил совместимый с FIPS генератор случайных чисел, выбрал алгоритм дешифрования «Prince» (позволяющий ядру выполнять симметрично-зашифрованный код) и реализовал 4096-битный эфемерный внутрикристальный ключ с технологией PUF. В сочетании с встроенным криптографическим аппаратным ускорителем «CASPER» микроконтроллеры LPC5500 подходят для приложений IoT на границе сети, требующих надежных мер кибербезопасности и предоставления ключей на протяжении всего жизненного цикла.

Кроме того, чип использует технологию Arm TrustZone для устройств на базе Cortex-M. Из этой статьи вы узнаете, как работает расширение TrustZone серии LPC5500 и как начать использовать меры безопасности в пользовательских приложениях.

Что такое технология Arm TrustZone для Cortex-M?

Основной принцип TrustZone лучше всего пояснить на примере. Производитель микроконтроллера часто предоставляет собственный частный код, такой как библиотеки безопасности, загрузчик или быстрые алгоритмы DSP, в ПЗУ микроконтроллера. Однако у авторов этих приложений часто есть веские причины для защиты своей интеллектуальной собственности - они могут не захотеть, чтобы пользователи или конкуренты декомпилировали двоичные файлы для обратного проектирования алгоритмов.

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

Рисунок 1. Незащищенный код пользователя и защищенное содержимое ПЗУ находятся на одном физическом MCU.

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

Это означает, что микроконтроллер, использующий TrustZone, будет спроектирован как два отдельных проекта. Первый проект запускается в безопасном состоянии. Затем он настраивает атрибуты безопасности для ресурсов на кристалле и может публиковать защищенные функции в таблице, доступной из незащищенного состояния. Второй содержит незащищенный код и имеет ограниченный доступ к открытым функциям защищенного мира.

Отличия от более ранних архитектур

Ядра Cortex-M3 и -M4 знают два режима процессора:режим потока и режим обработчика. Прикладное программное обеспечение работает в режиме потока, а режим обработчика имеет дело с исключениями. Код может работать как на привилегированном, так и на непривилегированном уровне, который контролирует доступ к определенным функциям ЦП.

С расширением TrustZone в ядрах Cortex-M33 были введены два новых состояния, как обсуждалось выше. Это изменение привело к появлению четырех различных режимов процессора:незащищенного обработчика, режима защищенного обработчика, незащищенного потока и защищенного потока.

Рисунок 2. Расширение TrustZone в ядре M33 создает четыре режима процессора.

Помимо других обновлений, были также представлены новые таймеры SysTick с новыми состояниями. Итак, теперь есть отдельные таймеры для безопасного и незащищенного состояний.

Раздел памяти

Как упоминалось ранее, память MCU разделяется на безопасные и незащищенные области. Ядро ЦП микроконтроллера может получить доступ к защищенным областям памяти, только если оно работает в одном из защищенных режимов. Он не может получить доступ к инструкциям, которые находятся в других разделах памяти. Однако он может читать и записывать безопасные и незащищенные сегменты ОЗУ данных. Если ядро ​​ЦП находится в незащищенном состоянии, оно может получить доступ только к незащищенным блокам памяти инструкций и данных.

TrustZone украшает диапазоны адресов в карте памяти атрибутами безопасности. Существует три атрибуции безопасности:безопасный (S), небезопасный (NS) и незащищенный вызываемый (NSC). Доступ к каждой области памяти разрешен или запрещен, в зависимости от текущего состояния безопасности ядра.

Рисунок 3. ЦП может получать доступ к разным областям в безопасном и незащищенном режиме.

На устройстве LPC55S69 память была разделена на безопасные и незащищенные сегменты в зависимости от адреса. Если бит адреса памяти 28 имеет значение LOW, память не является защищенной. В остальном это безопасно. Единственным исключением является программная память, которую можно настроить с помощью Security Attribution Unit.

Строительные блоки безопасного приложения

Незащищенный код не может выполнять прямые вызовы защищенной части приложения. Вместо этого защищенная часть предоставляет список функций, к которым может получить доступ пользователь. Этот список называется veneer-table, потому что это очень тонкий слой, который виден снаружи, но скрывает внутренние детали. Таблица облицовки находится в области памяти с атрибутом TrustZone NonSecure Callable.

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

Переход между безопасными и незащищенными функциями

ЦП с расширением TrustZone поддерживают две новые функции перехода между безопасным и небезопасным режимом:инструкции SG и BXNS.

Когда пользовательскому коду требуется безопасная функция, он выполняет вызов через таблицу фанеры, которая расположена в части памяти NSC. Затем инструкция SG используется для переключения ЦП в безопасный режим. Когда выполнение завершается, управление возвращается пользовательскому коду с инструкцией BXNS:

Рисунок 4. Код пользователя должен вызывать безопасную функцию через привратник TrustZone.

Если пользователь пытается выполнить незаконную операцию, связанную с безопасностью, такую ​​как прямой доступ к защищенной области, возникает исключение Secure Fault.

Пример безопасного Hello World

SDK для LPCXpresso55S69 поставляется с несколькими примерами TrustZone, которые можно загрузить в MCUXpresso. Как упоминалось ранее, эти примеры состоят из двух отдельных проектов:защищенной части и незащищенного пользовательского кода.

Защищенная часть выглядит почти так же, как любой другой проект MCUXpresso. Однако есть одно отличие:вызов следующей функции:

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

Поскольку защищенный проект обрабатывает все вызовы установки, незащищенный проект не обязан, поэтому его основная функция коротка:

Однако это приложение вызывает только безопасные функции, определенные в другом проекте. Следующее определение функции PRINTF_NSE выглядит так:

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

Декор «__attribute __ ((cmse_nonsecure_entry))» принудительно экспортирует функцию в объектный файл.

Разбиение памяти на разделы

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

  1. Security Attribution Unit (SAU)
  2. Единица атрибуции, определяемая реализацией (IDAU)
  3. Логика атрибуции безопасности

SAU программируется защищенным проектом в функции BOARD_InitTrustZone (). Это позволяет разделить память на восемь областей с разными настройками безопасности. Обратите внимание, что любой регион, не указанный явно, по умолчанию остается безопасным.

IDAU позволяет производителю MCU - в данном случае NXP - определять больше настраиваемых регионов. Здесь регионы зависят от 28-го бита адреса. На MCU LPC55S69 нижняя часть карты памяти (от 0x0000_0000 до 0x2FFF_FFFF) по умолчанию является небезопасной, поэтому ее можно настроить с помощью SAU.

Арбитр обеспечивает соответствие настроек IDAU и SAU. Чтобы область памяти была помечена как незащищенная, оба логических блока должны быть установлены в незащищенные. В противном случае память вернется к защищенному состоянию по умолчанию. То же самое и с областями памяти NSC. Чтобы раздел был NSC, SAU должен быть помечен как NSC, а IDAU должен быть установлен как незащищенный.

В MCUXpresso есть инструмент, который позволяет пользователю быстро и легко определять области памяти. Чтобы получить доступ к инструменту, используйте строку главного меню IDE и откройте перспективу TEE:

Рисунок 5. Этот инструмент MCUXpresso позволяет пользователю просматривать и редактировать карту памяти MCU.

Таблица в левой части инструмента может изменить уровень безопасности областей памяти. Карта памяти с правой стороны показывает, как память распределяется.

TrustZone предлагает необходимый компонент безопасности

В серии микроконтроллеров LPC5500 с технологией TrustZone память разделена на безопасный и незащищенный мир - можно разрешить пользователям доступ к частям незащищенной памяти, а также можно написать безопасное приложение для использования другие. TrustZone действует как привратник между двумя мирами и управляет тем, как ядро ​​перемещается между ними.

Для этого были введены две новые инструкции. Защищенное приложение предоставляет внешнюю таблицу, в которой представлены функции, вызываемые из незащищенного контекста. Аппаратное обеспечение микроконтроллера гарантирует отсутствие незаконных операций доступа к памяти. Это оборудование также можно использовать для настройки регионов на карте памяти. Для этой цели MCUXpresso предлагает перспективу TEE. Более глубокое понимание безопасности, обеспечиваемой микроконтроллерами серии LPC5500, позволяет улучшить опыт проектирования. Более подробную информацию о TrustZone можно найти, просмотрев TrustZone:Calling the Secure World.

Отраслевые статьи - это форма контента, позволяющая отраслевым партнерам делиться полезными новостями, сообщениями и технологиями с читателями All About Circuits, что не подходит для редакционного контента. Все отраслевые статьи подлежат строгим редакционным правилам с целью предлагать читателям полезные новости, технические знания или истории. Точки зрения и мнения, выраженные в отраслевых статьях, принадлежат партнеру, а не обязательно All About Circuits или ее авторам.


Облачные вычисления

  1. Облако и как оно меняет мир ИТ
  2. Облачная безопасность - это будущее кибербезопасности
  3. Как стать инженером по облачной безопасности
  4. Почему будущее безопасности данных в облаке программируется
  5. Как защитить облачные технологии?
  6. Как управлять рисками облачной безопасности
  7. Как хакеры взламывают облако; Увеличьте безопасность своего облака с помощью AWS
  8. Как сдать экзамен Google Cloud Engineer?
  9. Как развернуть DevOps в облаке
  10. Как перенести ERP в облако