Используйте ARM TrustZone для предотвращения доступа к области памяти из незащищенного мира.

Контекст

Я хочу иметь мощную ОС GNU/Linux, работающую в обычном мире, и небольшую ОС со встроенным монитором, работающую в Безопасный мир.

Требование

Мы должны абсолютно избегать Нормального мира, чтобы получить доступ к области памяти Безопасный мир.

Вопрос

Какие функции TrustZone нам нужно использовать/активировать, чтобы выполнить это требование? Я хотел бы использовать только необходимые функции, чтобы свести к минимуму необходимую работу.

Подробности

Я прочитал довольно много документации по ARM TrustZone, мне известны TZPC, TZASC, MMU с расширениями безопасности, но я могу не могу понять, как избежать следующей угрозы:

Что помешает хакеру, получившему доступ к пространству ядра, деактивировать MMU и напрямую получить доступ к физической области памяти Защищенного мира?

Может быть, это даже не мыслимо и не осуществимо? Но если это так, я предполагаю, что для предотвращения этого необходим TZPC, я прав? Или достаточно «просто» использовать два мира TrustZone?


person cid    schedule 08.09.2015    source источник


Ответы (2)


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

Теперь эта «защищенная мировая память» будет представлять собой либо какой-то выделенный блок (обычно встроенную SRAM), жестко связанный с картой защищенной памяти, либо кусок общей DRAM, вырезанный и защищенный только через TZPC. /ТЗАСК. В любом случае, его просто не существует в незащищенной карте памяти, поэтому незащищенное программное обеспечение не может получить к нему доступ.

person Notlikethat    schedule 08.09.2015
comment
Но что, если реальный SoC не реализует TZASC/TZPC? - person cid; 09.09.2015
comment
Что ж, тогда у вас будет либо встроенная безопасная, незащищенная и общая память, либо эта штука просто не предназначена для поддержки безопасного программного обеспечения, поэтому вы сдаетесь и идете домой. - person Notlikethat; 09.09.2015
comment
Хорошо, но тогда какова цель поддержки TZ, но, возможно, без TZPC или TZASC? Я работаю с Exynos 4210. Несмотря на поддержку TZ, в руководстве упоминается только TZPC в карте памяти. Ничего больше, так что я действительно не знаю, стоит ли мне идти домой. - person cid; 09.09.2015
comment
Если у вас есть TZPC, то у вас будет некоторая память за ним, которую вы можете разделить на безопасный кусок. Я не знаком с Exynos 4, но однажды я играл с Exynos 5410, и я знаю, что безопасная прошивка там настраивает все таким образом, что встроенная SRAM (которую она называет iRAM) разделена между защищенной прошивкой и незащищенной прошивкой. безопасная точка входа в загрузчик. А также то, что общедоступные TRM от Samsung практически не содержат никакой полезной информации. Между прочим, код ПЗУ, который загружает эту прошивку, является хорошим примером того, что жестко связано с безопасным миром. - person Notlikethat; 09.09.2015

Что помешает хакеру, получившему доступ к пространству ядра, деактивировать MMU и напрямую получить доступ к области физической памяти безопасного мира?

MMU вообще не связан с TrustZone. Таким образом, отключение MMU ничего не дает. Возможны атаки на код монитора, безопасный API ОС (в обычном мире), защиту шины, загрузочный код или аппаратное обеспечение. MMU с расширениями безопасности позволяет коду безопасного мира обращаться к памяти, как в обычном мире, и соответственно сбоить.

Подобно мошенническому ядру нормального мира, отключающему MMU, атака DMA также может использоваться на традиционном гипервизор. Цель TrustZone — избежать этих атак.

TZASC — это один из способов безопасного загрузочного кода для блокировки оборудования. Вы можете думать об этом как о разделении оборудования между безопасным и обычным с возможностями доступа для чтения/записи.

              | read  | write
 -------------+------------------
 normal super | Y/N   | Y/N
 normal user  | Y/N   | Y/N
 -------------+------------------
 secure super | Y/N   | Y/N
 secure user  | Y/N   | Y/N

Первые две строки есть во всех системах ARM. Последние два относятся к TrustZone. Физически это сигналы на шине. Биты: чтение/запись, безопасный/нормальный (бит тега NS) и супер/пользователь. Каждый мастер BUS будет статически назначен миру или, если мастер поддерживает TrustZone, он может быть динамическим. Одним из примеров динамического мастера является ЦП. Для ведомых устройств это либо память (большой массив аналогичных вводов-выводов), либо небольшие банки регистров контроллера. Для памяти TZASC позволяет разбивать память на разделы. Для подчиненных устройств с меньшим регистром обычно реализуется более простой доступ к шине «все или ничего» (например, TZPC). TrustZone очень расплывчата для системного программиста, потому что она гибкая и позволяет использовать различные конструкции SOC.

Может быть, это даже не мыслимо и не осуществимо? Но если это так, я предполагаю, что TZPC обязателен для предотвращения этого, я прав? Или достаточно «просто» использовать два мира TrustZone?

TZPC – это пример простого безопасного/нормального секционирования подчиненного устройства. Для ввода-вывода на основе регистров на AMBA APB (расширенная периферийная шина).


[Этот раздел задуман как конкретный пример гибкости архитектуры TrustZone, позволяющей разработчикам SOC создавать новые устройства, которые могут быть полезны для некоторых конкретных приложений.]

Рассмотрим систему, в которой у нас есть один чип NAND (NFC), но мы хотим разрешить как безопасный, так и обычный доступ, а обычный мир не может получить доступ к защищенным данным. Если мы создадим контроллер NFC с поддержкой TrustZone, у нас может быть два банка регистров ввода-вывода и данных DMA для указанных пользователем буферов. Один банк регистров безопасный, другой обычный. Контроллер NFC будет безопасным мастером, а чип NFC будет безопасным подчиненным. Когда кто-то получает доступ к обычному банку регистров контроллера NFC, гипотетический чип должен проверить, разрешен ли доступ (это будет аппаратное обеспечение в приведенных выше атаках) и еще один пример динамического мастера. Когда он читается от имени обычного мира, он будет использовать DMA с NS, установленным так, чтобы применялись разрешения на доступ к обычному миру.

person artless noise    schedule 08.09.2015
comment
Я, может быть, плохо понимаю, но как это отвечает на мой вопрос? В таком случае необходимо защищать области физической памяти безопасного мира с помощью TZASC/TZPC? - person cid; 09.09.2015
comment
TZASC и TZPC — это один из способов (например, есть разные контроллеры Ethernet, но все они используют протокол Ethernet). Семантически эти элементы управляют доступом к BUS; они вне процессора. Вы не упомянули Exynox 4210. . В разделе 2.2 руководства есть подсказки (вещи с «тире» могут быть под NDA/раскрытием информации о безопасности). ТЗПК 0-6 тоже есть. Возможно, они контролируют память, но это немного странно. Вам нужно поставить документы вашего поставщика (Samsung) с ARM. - person artless noise; 10.09.2015
comment
Нет ничего обязательного. Решения по безопасности не являются универсальным вопросом. В каждом продукте присутствуют разные активы/ситуации. TrustZone предоставляет некоторые инструменты, которые помогут в этом. Что вы делаете в своем дизайне, зависит от вас (и вашего поставщика SOC, Samsung). Каждый ЦП ARM Cortex-A имеет поддержку TZ. Если производитель не защищает шину, то в большинстве ситуаций она бесполезна. Вы должны вести тесные переговоры с поставщиком или его агентами (VAR и т. д.). Вам также нужны тамперы и т. д., чтобы смягчить аппаратные взломы, которые напрямую манипулируют памятью. - person artless noise; 10.09.2015