Как исследовать нормальный мир из безопасного мира, используя TrustZone?

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

Я нахожу некоторые соответствующие работы в Samsung TZ-RKP и SierraTEE, в которых они оба реализуют функцию, которая может измерять целостность нормального мира. Но они не дали технических деталей. У меня есть два вопроса, и я был бы очень признателен, если бы кто-нибудь дал мне несколько подсказок.

  1. Предположим, я хочу посмотреть, какие процессы выполняются в обычном мире. Нужно ли мне использовать модуль ядра в обычном мире, чтобы помочь мне сделать это? Если это так, как я могу убедиться, что он передал правильный результат в безопасный мир? Чтобы быть точным, как я могу проверить, было ли ядро ​​сжато?

  2. Предположим, у меня есть пара ключей RSA, и я храню закрытый ключ в безопасном мире. Когда процесс запрашивает расшифровку некоторых данных, как безопасный мир узнает, является ли запрос законодательным процессом? Механизм белого списка может помочь, но что, если ядро ​​в нормальном мире было скомпрометировано и противник притворяется законодательным? Безопасный мир, похоже, ничего не знает о том, что происходит в нормальном мире.

Даже если можно быть уверенным, что это из законодательного процесса и расшифровывает данные с помощью закрытого ключа, дешифрованные данные все равно будут каким-то образом возвращены в нормальный мир (т. Е. Совместно используемая память), а дешифрованные данные все еще могут быть утечка. Так какой смысл хранить закрытый ключ в безопасном мире?

Кстати, я использую плату armv8.

Заранее спасибо. Было бы здорово, если бы вы могли привести мне несколько примеров.

1 ответ

Решение

Траст-зона сама по себе не является системой безопасности. Вы должны спроектировать это. Кроме того, существует много разных типов безопасности. Например, вы предполагаете программную атаку, но существует множество физических атак против системы (как я предполагаю, вы описали). Что-то должно быть доверенной вычислительной базой (TCB); То есть некоторый код, который вы предполагаете, не может быть скомпрометирован. Ядро нормального мира, вероятно, слишком велико, чтобы быть частью TCB, но оно может быть хорошей первой линией защиты. Эксплойт против этого - только повышение привилегии от пользователя до наблюдателя. Ваш TrustZone API должен ожидать ненадежных данных (т. Е. Обычное мировое ядро ​​пытается переполнить буфер, неправильно использовать API и т. Д.).

Ключевым моментом здесь является то, что TZASC и другие периферийные устройства шины могут предоставить безопасный мир для чтения / записи памяти нормального мира. Вам придется проверять таблицы MMU и другие структуры данных в случае полнофункциональной ОС, такой как Linux. Загрузка модулей, запущенные процессы и т. Д. - все это требует проверки. Тем не менее, если в обычном мире у вас гораздо более простая система, возможно, ее можно будет проверить. Скорее всего, вы должны согласиться на часть этого. Случайная выборка ПК может быть сдерживающим фактором; но ничто не будет защищено от дурака, если нормальный мир не является кодом, несущим доказательства.

  1. Предположим, я хочу посмотреть, какие процессы выполняются в обычном мире. Нужно ли мне использовать модуль ядра в обычном мире, чтобы помочь мне сделать это? Если это так, как я могу убедиться, что он передал правильный результат в безопасный мир? Чтобы быть точным, как я могу проверить, было ли ядро ​​компрометировано?

Ваш безопасный мир может содержать ОС (или примитивный планировщик), который будет периодически проверять нормальную целостность кода мира. Существуют аппаратные модули, такие как RTIC и т. Д. Вы также можете использовать TZASC для блокировки кода ядра для обычного пользователя (без доступа) и обычного супервизора только для чтения. Comprimised является перегруженным словом. В какой-то момент вы должны чему-то доверять. Можно ли реплицировать закрытый ключ, если нормальный супер скомпрометирован? Вы должны определить свои цели безопасности. В любом смысле / смысле, конечно, ядро ​​нормального мира может быть скомпрометировано. У вас нет полной спецификации его поведения для проверки из безопасного мира.

  1. Предположим, у меня есть пара ключей RSA, и я храню закрытый ключ в безопасном мире. Когда процесс запрашивает расшифровку некоторых данных, как безопасный мир узнает, является ли запрос законодательным процессом? Механизм белого списка может помочь, но что, если ядро ​​в нормальном мире было скомпрометировано и противник притворяется законодательным? Безопасный мир, похоже, ничего не знает о том, что происходит в нормальном мире.

Ваш безопасный мир, вероятно, нуждается в некотором взаимодействии от объекта шифрования. Например, вы можете ограничить количество расшифровок без проверки. Кажется, что наиболее ценным является закрытый ключ RSA. Если вы разрешаете нормальному миру запрашивать расшифровку, то это ваша проблема, а не проблема Trustzone? Вы должны справиться с этим, используя обычные механизмы с криптографией и неизвестными / ненадежными хостами. Пара ключей RSA является глобальной или для каждого устройства? Поддерживаете ли вы отзыв и т. Д. Он есть в вашей системе, а TrustZone - только его часть.

Другие вопросы по тегам