2014-09-02 2 views
2

Я пытаюсь запустить ядро ​​Linux в качестве защищенной ОС на платформе разработки, поддерживаемой TrustZone (Samsung exynos 4412). Хотя кто-то сказал бы, что безопасный os должен быть небольшим и простым. Но я просто хочу попробовать. И если это возможно, то писать или переносить приложение доверенного приложения на этот безопасный os будет легко, особенно для приложений с пользовательским интерфейсом (доверенный пользовательский интерфейс).Может ли ядро ​​Linux работать как безопасная ОС ARM TrustZone?

Я купил плату разработки с безопасной защищенной ОС на основе Xv6, а обычная ОС - Android (версия Android 4.2.2, версия ядра 3.0.15). Я попытался заменить простые защищенные os ядром android Linux, то есть с небольшим ассемблерным кодом впереди, например, очистка NS-бит регистра SCR, непосредственно называемого записью ядра Linux (с переданным необходимым ядром помеченным списком) ,

Код несжатого кода ядра выполняется правильно, и также выполняется первая функция C ядра, start_kernel(). Почти все функции инициализации работают хорошо, за исключением выполнения для calibrate_delay(). Эта функция будет ждать тиков изменилась:

/* wait for "start of" clock tick */ 
ticks = jiffies; 
while (ticks == jiffies); 

Я думаю, причина нет часов генерируется прерывание (я печатаю журналы в часы прерывания функции обратного вызова, они никогда не получали в). Я проверил состояние CPSR до и после функции local_irq_enable(). Биты IRQ и FIQ установлены правильно. Я также печатаю несколько журналов в обработчике IRQ ядра Linux, определенном в таблице векторов прерываний. Ничего не зарегистрировано.

Я знаю, что могут быть некоторые различия в системе прерываний между безопасным миром и небезопасным миром. Но я не могу найти различия в какой-либо документации. Может ли кто-нибудь их указать? И самый важный вопрос заключается в том, что, поскольку Linux - очень сложная ОС, может ли ядро ​​Linux работать как безопасная ОС TrustZone?

Я новичок в ядре Linux и ARM TrustZone. Пожалуйста, помогите мне.

+0

Ядро скомпилировано для «реального» оборудования, а не аппаратного средства TrustZone (для которого драйверы вряд ли даже существуют). –

+0

Спасибо за ваш ответ. Но я видел несколько реализаций доверия, которые могут делать много вещей, таких как отображение пользовательского интерфейса и сенсорный экран. Вы можете увидеть реализацию Genode. [Документация] (http://genode.org/documentation/articles/trustzone) [Видео] (https://www.youtube.com/watch?v=voFV1W4yyY8) –

+0

Ваш вопрос кажется немного неясным. Оформить все вопросы в теге [tag: trust-zone] и особенно вопрос [Как разработать программы для зоны доверия рук] (http://stackoverflow.com/questions/15455011/how-to-develop-programs-for -arm-трест-зона). Вы ** не нуждаетесь в защищенной ОС для надежного * надежного *; просто безопасную загрузку, проверку раздела с блокировкой загрузки и таблицу мониторинга с помощью Secure API. –

ответ

1

Нет ничего технически препятствующего запуску Linux в состоянии безопасности процессора ARM. Но это побеждает всю цель TrustZone. Большое, сложное ядро ​​и ОС, такие как Linux, необоснованно формально проверять до такой степени, что его можно считать «безопасным».

Для дальнейшего чтения по этому аспекту см http://www.ok-labs.com/whitepapers/sample/sel4-formal-verification-of-an-os-kernel

Что касается конкретной проблемы, которую вы столкнулись - не должно быть ничего особенного обработки прерываний в Secure против Non-безопасное состояние (если явно не настроить его, чтобы быть другой). Но может быть, что защищенная ОС, которую вы удалили, выполняла начальные инициализации таймера, которые сейчас не происходят.

Также 3.0.15 является абсолютно древним ядром - он был выпущен 2,5 года назад на основе чего-то, выпущенного более 3 лет назад.

+1

Это, возможно, расщепляющие волосы ... В Linux нет ничего плохого в безопасном мире; по умолчанию ARM поддерживает обратную совместимость. Что, может быть, неправильно - запустить Linux и Trustlet в безопасном мире. Технически возможно запустить минимальную безопасную Linux в безопасном мире с защищенными периферийными устройствами и еще одним Linux в небезопасном мире. Не верьте микро-ярусу. Большинство атак приходится на код API, а не на ОС. Linux имеет гораздо больше обзоров, чем OKL4. Так же легко (или проще) писать ошибочное приложение/ячейки в OKL4, чем в Linux. –

+0

Linux также на несколько порядков больше, чем OKL4 (который был связан только ради этого отчета - ОС не может сама по себе быть в безопасности, только система может быть защищена). Большая база кода по своей сути менее безопасна. В то время как можно было надежно использовать Secure Linux и небезопасный Linux, сосуществующий с простой технической точки зрения, это не помогло бы в обеспечении безопасности системы. – unixsmurf

+0

Поскольку мое разъяснение, похоже, было неясным: я мало что знаю о OKL4, и я не утверждаю, что он безопасен. Я включил ссылку на него только из-за отчета, в котором обсуждались вопросы формальной проверки операционной системы. Как я сказал сначала в своем ответе, а затем более решительно в комментарии. Я утверждаю, что он может быть защищен до жары/холодной смерти Вселенной. Я также утверждаю, что то же самое не соответствует ни одному размеру Linux. Уменьшение поверхности атаки не обеспечивает безопасную систему - самое большее, что может сделать ее менее опасной. – unixsmurf

2

Запуск Linux как защищенного мира OS по умолчанию должен быть стандартным. То есть, безопасный мировой супервизор является самым надежным и может легко перейти на другие режимы. защищенный мир - это принципиальная концепция процессора ARM.

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

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

TrustZone позволяет разделить программное обеспечение. Если вы запустили как Linux, так и приложение trustte на том же уровне, это бесполезно. Претендент - это просто нормальное приложение.

В нормальном режиме для доверенности - это установка страницы монитора при загрузке и блокировка физического доступа. Затем ядро ​​Linux может использовать инструкцию smc для вызова подпрограмм в доверенном для доступа к функциям типа DRM для дешифрования носителя и т. Д. В этом режиме Linux работает как обычная мировая ОС, но может вызывать ограниченную функциональность с помощью безопасный мир через определяемый вами API SMC.

Практически все функции инициализации работают хорошо, за исключением того, что они работают до calibrate_delay().

Это симптоматика неработающих прерываний. calibrate_delay() работает в замкнутом цикле, ожидая . Отметьте счетчик для увеличения через прерывания системного таймера. Если вы работаете в безопасном мире, вам может понадобиться маршрутизировать прерывания. Регистр GICD_ISPENDR может использоваться для принудительного прерывания. Вы можете использовать это для проверки правильности функционирования ARM GIC. Кроме того, параметр командной строки ядра lpj=XXXXX (где XXXX - некоторое число) может пропустить этот шаг.

Скорее всего, какой-то периферийный маршрутизатор прерывания, конфигурация часов или другая инициализация прерывания/таймера выполняется загрузчиком в обычной системе, и вам это не хватает. Загрузка новой платы всегда сложна; тем более с TrustZone.

1

Есть несколько проблем с тем, что вы говорите, что нужно прояснить. Во-первых, вы пытаетесь запустить ядерное безопасное ядро ​​или нормальное ядро ​​мира? Вы сказали, что хотите запустить Linux в SW и Android в NW, но на ваш вопрос было сказано: «Я попытался заменить простые защищенные os на ядро ​​android Linux». Итак, с каким ядром возникают проблемы?

Во-вторых, вы упомянули очистку NS-бит. Это не имеет смысла. Если установлен NS-бит, для его очистки требуется, чтобы вы уже работали в NW (по мере того, как будет установлен бит), вы выполнили инструкцию SMC, переключились в режим монитора, установили NS-бит в 0, а затем восстановили регистры SW. Это так?

Что касается прерываний, правильно ли вы инициализировали VBAR для каждого режима выполнения, то есть для безопасного мира VBAR, обычного мира VBAR и MVBAR. Все три должны быть настроены, в дополнение к настройке правильных значений в NSACR и других, чтобы обеспечить прерывание, направляемое в правильный мир выполнения, а не только с помощью SW. Кроме того, вам нужны отдельные таблицы векторов исключений и обработчики для всех трех режимов. Сначала вы можете уйти с одним набором, но как только вы разделите свою систему памяти с помощью TZASC, вам понадобится разделить все.

TZ требует большой конфигурации и не просто обрабатывается установкой/снятием NS-бит. Для Exynos 4412 существуют многочисленные регистры управления TZ, которые необходимо правильно настроить для выполнения в NW. К сожалению, ни одна из информации о них не рассматривается в Публичной версии Руководства пользователя. Вам нужна полная версия, чтобы получить все значения и адрес, необходимые для фактического запуска ядра SW и NW на этом процессоре.

Смежные вопросы