Как Azure Sphere обеспечивает безопасность IoT в Linux-стеке 4 МБ

На саммите по безопасности Linux Райан Фэйрфакс (Ryan Fairfax) из Microsoft рассказал о внутренней работе ОС Azure Sphere и ее модели безопасности, включая модификации ядра Linux, которые позволяют ему работать в 4 МБ.

Все еще немного тревожно видеть спикера Microsoft на конференции Linux Foundation.
Тем не менее, на недавнем саммите по безопасности Linux Райан Фэйрфакс, глава Microsoft по разработке ОС для Azure Sphere, быстро успокоил аудиторию благодаря своим знаниям в области сложных технологий.
Его презентация «Сфера Azure: установка безопасности Linux в 4 МБ ОЗУ» вписывается в жанр историй, в которых разработчикам предлагается свести свой драгоценный код к основам спартанского IoT.
Это также хорошо согласуется с нашим недавним освещением Security in Zephyr и Fuchsia на том же мероприятии, проводимом в Ванкувере.


Райан Фэйрфакс от Microsoft и круговая диаграмма, показывающая версию ядра Linux для Azure Sphere

(щелкните изображение, чтобы увеличить)

Как мы видели в прошлом году в презентации Майкла Опденакера о сокращении ядра Linux и файловой системы для IoT, Linux можно заставить работать - всего лишь - всего за 4 МБ ОЗУ.
Это было целью Microsoft для ОС Azure Sphere, дистрибутива с открытым исходным кодом на основе Linux, лежащего в основе платформы Azure Sphere для IoT.
Azure Sphere также включает в себя проприетарный криптобезопасный загрузочный стек, называемый подсистемой безопасности Microsoft Pluton, который работает на MCU, а также Azure Sphere Security Service, облачный сервис под ключ для безопасного обмена данными между устройствами и устройствами в облаке. ,


Комплект разработчика Azure Sphere MT3620 (слева) и блок-схема MediaTek MT3620

(нажмите на картинку, чтобы увеличить)

На прошлой неделе Seeed выпустил первый комплект разработчика для Azure Sphere.
Комплект разработки Azure Sphere MT3620 включает в себя MediaTek MT3620, гибридную SoC 500 МГц Cortex-A7 / Cortex-M4F с тактовой частотой 500 МГц, которая работает на облегченной ОС Azure Sphere на одном ядре -A7.
4 МБ оперативной памяти SoC - это единственная оперативная память на совместимой с Seeed Grove плате разработчика.
Microsoft заявляет, что другие поставщики SoC, помимо MediaTek, предложат свои собственные SoC Cortex-A / Cortex-M для Azure Sphere.

Большая усадка

Установка целого стека Linux в 4 МБ была непростой задачей, учитывая, что «большинство из нас не прикасалось к Linux в течение 10 лет», - сказал Фэйрфакс.
Однако трудной частью создания ОС Azure Sphere была не столько модификация ядра, сколько разработка остального стека.
Это включает в себя пользовательский модуль безопасности Linux, который координирует свои действия с фирменным кодом безопасности Cortex-M4 Pluton, используя протокол на основе почтового ящика.

«Мы с самого начала решили перейти на Linux», - сказал Фэйрфакс.
«Большинство наших изменений в ядре были небольшими, а основные функции Linux« просто работали »даже при ограниченных ресурсах.
Это заслуга усилий сообщества и гибкости ядра ».

Команда Fairfax начала работать над Azure Sphere в тайне в 2016 году, пытаясь убедить руководство Microsoft в том, что работа с ядром Linux «была жизнеспособной», сказал Фэйрфакс.
Проект был представлен в апреле 2018 года, и скоро будет выпущен первый публичный превью.

По словам Фэйрфакса, одной из основных целей Azure Sphere было обеспечение безопасности в мире MCU, где «безопасность практически отсутствует».
Microsoft несколько запутанно называет MediaTek MT3620 микроконтроллером, а не прикладным процессором из-за включения ядер микроконтроллера Cortex-M4.
Частично это может быть маркетинговым ходом, поскольку Microsoft намерена напрямую конкурировать с Amazon FreeRTOS, ориентированной на Cortex-M.

С точки зрения архитектуры, Azure Sphere OS находится поверх стека Pluton MCU, а базовый уровень - это стек безопасности, основанный на Arm TrustZone.
Затем следует специальное ядро ​​Linux, которое, в свою очередь, возглавляет слой подключения обновления облачных сервисов.
Верхний уровень предназначен для контейнеров приложений ввода-вывода POSIX и реального времени.

Кастомное ядро ​​в настоящее время основано на основной версии Linux 4.9.
Патчи объединяются вверх по течению каждый месяц, и есть планы по обновлению до филиалов LTS ежегодно.

Первым шагом в сокращении ядра было «избежать помещения текста в память», сказал Фэрфакс.
Для этого ОС во многом зависит от технологии Execute-In-Place (XiP), которая обычно интегрируется в контроллеры флэш-памяти MCU.
«XiP позволяет вам взять область флэш-памяти и отобразить ее в адресном пространстве только для чтения, но также и в режиме, в котором вы можете выполнить его как код».

Кроме того, «мы настроили ядро, чтобы сделать его модульным, чтобы мы могли его отключить», объяснил Фэйрфакс.
«Мы настроили размеры кеша и исправили, чтобы настроить размеры по умолчанию».

Команда отключила множество опций отслеживания памяти и такие вещи, как kallsyms .
Они неохотно вырезали sysfs, что сэкономило почти 1 МБ, но для Fairfax был кодовым эквивалентом задачи автора убить своих любимых .
В конце концов, большая часть пространства ядра была занята сетевым стеком и драйверами оборудования ».

Облегченный модуль безопасности Linux

Первоначально группа разработчиков Azure Sphere OS пыталась использовать SSH-сервер с фиксированным корневым паролем для безопасности, но быстро поняла, что это «не собирается сокращать его в долгосрочной перспективе», сказал Фэйрфакс.
Чтобы уменьшить поверхность атаки, они экспериментировали с различными моделями безопасности, включая «запекание объектов в файловой системе и использование UID и SGID для создания предсказуемых сред».

Эти подходы вызвали некоторые проблемы IPC и были ошибочными, потому что «они ложились бременем во время сборки», сказал Фэйрфакс.
«Любая ошибка будет распространяться через систему и сделает вас уязвимыми».

Фэйрфакс и его команда пересмотрели существующие технологии Linux, которые могут помочь сделать разрешения более детализированными и «создать модель, где приложения могут получать доступ к ресурсам по принципу наименьших привилегий», - сказал Фэйрфакс.
В конце концов они выбрали урезанную версию Linux Security Model (LSM), набор расширений ядра, которые «уменьшат поверхность атаки, полностью исключив некоторые функции из таблицы.
Там нет оболочки или управления учетными записями пользователей, которые на самом деле не имеют отношения к IoT-устройству, и нет сложного управления заданиями и процессами ».

Fairfax также добавил поля, которые создавали идентичность приложения для каждой задачи.
«Приложения и модули ядра могут использовать эти новые поля для расширенного контроля доступа», - сказал Фэйрфакс.
«Значения неизменны - после установки они наследуются по умолчанию».

Разработчики «много экспериментировали с файловыми системами», сказал Фэрфакс.
Они пытались использовать файлы только для чтения с патчами XIP, а также записываемые файловые системы, такие как ext2, jfffs и yaffs, но «им всем потребовались сотни килобайт для инициализации, или около 1/16 от общей доступной системной памяти». В конце концов, они перенесли ультралегкие « мелочи» из Mbed OS от Arm в Linux как VFS-модуль.

Одна проблема с защитой устройства IoT в Linux заключается в том, что «Linux рассматривает всю инфраструктуру GPIO как единый ресурс», - сказал Фэйрфакс.
«В реальном мире не все, что связано с вашим чипом, имеет одинаковую чувствительность.
У меня может быть один вывод GPIO, который переключает светодиод, говорящий о том, что я подключен к сети, который не является сверхчувствительным, но другой GPIO может открыть соленоид в моей печи, чтобы запустить поток газа, что является более тревожным ». Команда добавила контроль доступа к существующим функциям, таким как GPIO, чтобы обеспечить более детальный контроль доступа.

Модель пользователя и приложения

Если ядро ​​Azure Sphere радикально не отличается от любого другого чрезвычайно сокращенного ядра Linux, режим пользователя значительно отличается.
«Текущая модель Linux не предназначена для ограниченных ресурсов», - сказал Фэйрфакс.
«Таким образом, мы создали специальный инициализатор, называемый диспетчером приложений, который загружает приложения, настраивает их среды безопасности и запускает их.
Это единственный традиционный процесс, который выполняется в нашей системе - все остальное является частью приложения ».


Fairfax, описывающий пользовательский режим Azure Sphere и модель приложения

(щелкните изображение, чтобы увеличить)

Приложения Azure Sphere самоописываются и могут обновляться независимо.
Фактически, «они на самом деле являются их собственными независимыми файловыми системами», объяснил Фэйрфакс.
«Они работают изолированно друг от друга и не могут получить доступ ни к какому ресурсу из другого приложения».

Изначально существует четыре предварительно загруженных системных приложения: управление сетью, обновления, управление и контроль через USB, аппаратное шифрование и ускорение ГСЧ.
GDBServer не является обязательным, и OEM-производители могут «добавить одно или два приложения, которые содержат собственную бизнес-логику», сказал Фэйрфакс.

Одним из правил Azure Sphere является то, что «все обновляется OTA и все возобновляемо», сказал Фэрфакс.
Кроме того, поскольку «быстрое ОТА является критически важным» при реагировании на новые угрозы, команда стремится к обновлению исправлений безопасности ОТА в течение 24 часов после публичного раскрытия, что было достигнуто благодаря вирусу Crack.
Microsoft будет управлять всеми обновлениями ОС, но OEM-производители контролируют собственные обновления приложений.

Команда Microsoft изо всех сил пыталась найти способ запуска контейнеров, в том числе с использованием LXC, но «мы не смогли заставить его соответствовать», сказал Фэйрфакс.
«Контейнеры отличные, но у них есть серьезные накладные расходы на ОЗУ». Они также попытались использовать пространства имен для создания автономных приложений, но обнаружили, что «многие периферийные устройства, такие как GPIO, не работают с пространствами имен».

На данный момент «мы развернули контейнеры и сосредоточены на изоляции приложений и обеспечении правильности нашей модели разрешений», - сказал Фэйрфакс.
«Мы гарантируем, что переполнение буфера в приложении дает вам только то, что это приложение уже может сделать.
Мы создаем каждое приложение как отдельную файловую систему, чтобы они монтировались или отключались в процессе установки или удаления.
Там нет копирования файлов вокруг для установки.

«Каждое приложение имеет метаданные в файловой системе, которые говорят:« Вот как я запускаю, и вот что мне нужно », - продолжил Фэйрфакс.
«По умолчанию все, что вы получаете, это вычисления и ОЗУ - даже сетевой доступ должен быть объявлен как часть манифеста.
Это помогает нам рассуждать о состоянии безопасности и помогает разработчикам пользоваться наименьшими привилегиями в приложениях ».

Планы на будущее требуют пересмотра пространств имен, чтобы создать «что-то вроде контейнера», и есть план «уменьшить cap_sys_admin или сделать его более детализированным», говорит Фэйрфакс.
Он также хочет изучить интеграцию частей SELinux или AppArmor.
Скорее всего, команда планирует усовершенствовать некоторые работы по улучшению памяти и файловых систем, которые, по словам Фэйрфакса, «применимы в других местах, даже если вы говорите о чем-то вроде Raspberry Pi».

Вы можете найти более подробную информацию о Azure Sphere на странице продукта Microsoft Azure Sphere и посмотреть полное видео презентации ниже.

Сфера Azure: установка безопасности Linux в 4 МБ ОЗУ

Эта статья защищена авторским правом © 2018 Linux.com и была первоначально опубликована здесь .
Он был воспроизведен этим сайтом с разрешения его владельца.
Пожалуйста, посетите Linux.com для получения последних новостей и статей о Linux и open source.