Модель безопасности обновления устройства
Обновление устройств для Центра Интернета вещей предоставляет безопасный способ развертывания обновлений для встроенной прошивки устройств, образов и приложений на устройствах Интернета вещей (IoT). Данный рабочий процесс предоставляет сквозной безопасный канал с полноценной моделью цепочки обеспечения сохранности, которая позволяет устройству убедиться, что обновление является доверенным, неизмененным и целевым.
Каждый шаг в рабочем процессе обновления устройства защищается с помощью различных функций и процессов безопасности, чтобы гарантировать, что каждый шаг в конвейере выполняет защищенную передачу следующему шагу. Эталонный код агента обновления устройств определяет и правильно обрабатывает любые несанкционированные запросы на обновление. Также эталонный агент проверяет каждую операцию скачивания, чтобы убедиться, что ее содержимое является доверенным, неизмененным и целевым.
Итоги
Так как обновления импортируются в экземпляр обновления устройств, служба отправляет и проверяет двоичные файлы обновления, чтобы убедиться, что злоумышленник не изменил их. После проверки служба обновления устройства создает внутренний манифест обновления с хэшами файлов из манифеста импорта и других метаданных. Служба обновления устройств подписывает этот манифест обновления.
После импорта в службу и хранения в Azure служба служба хранилища Azure автоматически шифрует двоичные файлы обновления и связанные метаданные клиента. Служба обновления устройств не обеспечивает автоматическое дополнительное шифрование, но позволяет разработчикам шифровать содержимое самостоятельно, прежде чем оно достигнет службы обновления устройства.
При развертывании обновления на устройствах из службы обновления устройства отправляется подписанное сообщение на устройство через защищенный канал центра Интернета вещей. Агент обновления устройств проверяет подпись, чтобы определить, является ли она аутентичной.
Любой загруженный двоичный файл защищается посредством подписи манифеста обновления. Манифест обновления содержит хэши двоичных файлов, поэтому после того, как он будет считаться доверенным, агент обновления устройства станет доверять хэшам и сопоставлять их с двоичными файлами. После скачивания и проверки двоичного файла обновления он передается установщику на устройстве.
Сведения о реализации
Чтобы обеспечить масштабирование службы обновления устройств до уровня самых простых, низкоуровневых устройств, в модели безопасности используются простые асимметричные ключи и простые подписи. Они используют форматы на основе JSON, такие как маркеры JSON Web и ключи JSON Web.
Защита содержимого обновления с помощью манифеста обновления
Манифест обновления проверяется с помощью двух подписей. Подписи создаются средствами структуры, состоящей из подписных ключей и корневых ключей.
Агент обновления устройств содержит внедренные открытые ключи, используемые для всех устройств, совместимых с обновлением устройств. Эти открытые ключи являются корневыми ключами. Корпорация Майкрософт управляет соответствующими закрытыми ключами.
Корпорация Майкрософт также создает пару из открытого и закрытого ключей, которые не встраиваются в агент обновления устройства и не хранятся на этом устройстве. Это ключ подписи.
При импорте обновления в обновление устройства для Центр Интернета вещей служба создает манифест обновления, служба подписывает манифест с помощью ключа подписывания и включает сам ключ подписывания, подписанный корневым ключом. При отправке на устройство манифеста обновления агент обновления получает следующие данные сигнатуры.
- Само значение подписи.
- Алгоритм, используемый для создания № 1.
- Сведения об открытом ключе для ключа подписи, используемого для создания № 1.
- Подпись открытого ключа подписи в № 3.
- Идентификатор открытого ключа корневого ключа, используемого для создания № 3.
- Алгоритм, используемый для создания № 4.
Агент обновления устройств использует эти сведения для проверки подписи открытого ключа подписи корневым ключом. Затем агент обновления устройства проверяет, заверена ли сигнатура манифеста обновления ключом подписи. Если все подписи верны, агент обновления устройств доверяет манифесту обновления. Так как манифест обновления включает в себя хэши файлов, которые соответствуют самим файлам обновления, эти файлы обновления могут также быть доверенными, если хэши совпадают.
Наличие корневого ключа и ключей подписи дает возможность Майкрософт периодически обновлять ключ подписи, что рекомендуется для обеспечения безопасности.
Веб-подпись JSON (JWS)
Используется updateManifestSignature
для обеспечения того, чтобы информация, содержащаяся в ней updateManifest
, не изменялась.
updateManifestSignature
создается по веб-подписи JSON с веб-ключами JSON, что позволяет выполнять проверку исходного кода. Подпись представляет собой строку в кодировке Base64Url с тремя блоками, разделенными знаком ".". См. раздел Вспомогательные методы jws_util. h для считывания и проверки ключей и маркеров JSON.
Веб-подпись JSON — широко используемый стандарт-кандидат IETF для подписи содержимого с использованием структур данных на основе JSON. Это способ обеспечения целостности данных путем проверки сигнатуры данных. Дополнительные сведения можно найти в разделе веб-подписи JSON (JWS) RFC 7515.
Веб-токен JSON
JSON Web Tokens — это стандартный, открытый промышленный метод, обеспечивающий безопасное представление утверждений между двумя сторонами.
Корневые ключи
Каждое устройство в службе обновления устройства содержит набор корневых ключей. Эти ключи являются основой доверия для всех подписей обновления устройства. Любая подпись должна устанавливаться в цепочку через один из этих корневых ключей, чтобы считаться верной.
С течением времени набор корневых ключей изменяется по мере необходимости периодическим прокручиванием ключей подписи в целях безопасности. В результате программное обеспечение агента обновления устройств должно обновляться с помощью последнего набора корневых ключей с интервалами, указанными командой обновления устройств. В августе 2025 г. будет происходить следующий запланированный поворот корневого ключа.
Начиная с версии 1.1.0 агента обновления устройства агент автоматически проверяет наличие изменений корневых ключей при каждом развертывании обновления на этом устройстве. Возможные изменения:
- Доступен новый корневой ключ.
- Существующий корневой ключ отключен (фактически "отозван"), то есть он больше не действителен для установления доверия.
Если имеет значение true, агент обновления устройств автоматически загружается из службы DU новый корневой пакет ключей. Этот пакет содержит полный набор всех корневых ключей, а список отключенных, содержащий сведения о том, какие корневые ключи и (или) ключи подписи больше не являются допустимыми. Корневой пакет ключей подписан с каждым корневым ключом, поэтому доверие к пакету можно установить как из исходных корневых ключей, которые являются частью самого агента DU, так и всех последующих скачанных корневых ключей. После завершения процесса проверки все новые корневые ключи считаются доверенными для проверки доверия с помощью ключа подписи для данного манифеста обновления, а все корневые ключи или ключи подписывания, перечисленные в отключенном списке, больше не являются доверенными для этой цели.
Подписи
Подписанный (открытый) ключ, подписанный одним из корневых ключей, сопровождает все подписи. Сигнатура определяет, какой корневой ключ использовался для подписания ключа подписи.
Агент обновления устройства должен проверять подписи, сперва подтверждая правильность подписи (открытого) подписанного ключа, ее верность и наличие подписи одним из утвержденных корневых ключей. После успешной проверки подписанного ключа подпись может быть проверена с помощью открытого ключа с подписанным доверием.
Ключи подписывания поворачиваются на более быстрый курс, чем корневые ключи, поэтому ожидается, что сообщения, подписанные различными ключами подписывания.
Служба обновления устройств управляет отзывом ключей подписывания при необходимости, поэтому пользователи не должны пытаться кэшировать ключи подписывания. Всегда используйте ключ подписи, сопровождающий подпись.
Защита устройства
Важно обеспечить на устройстве правильную защиту ресурсов безопасности, связанных с его обновлением. Такие ресурсы, как корневые ключи, должны защищаться от изменения. Это можно делать разными способами, например, с помощью устройств безопасности (TPM, SGX, HSM и т. п.) или даже жестким кодированием в агенте обновления устройства, как в нашей эталонной реализации. Для последнего требуется цифровая подпись кода агента обновления устройств и включение поддержки целостности кода системы для защиты от вредоносных изменений кода агента.
Можно использовать дополнительные меры безопасности, такие как обеспечение безопасной передачи от компонента к компоненту. Например, это может быть регистрация конкретной изолированной учетной записи для выполнения разных компонентов и (или) разрешение сетевого взаимодействия (например, вызовов к REST API) только с узла localhost.
Следующие шаги
Узнайте, как обновление устройств использует управление доступом на основе ролей Azure