Модель безопасности обновления устройства

Обновление устройств для Центра Интернета вещей предоставляет безопасный способ развертывания обновлений для встроенной прошивки устройств, образов и приложений на устройствах Интернета вещей (IoT). Данный рабочий процесс предоставляет сквозной безопасный канал с полноценной моделью цепочки обеспечения сохранности, которая позволяет устройству убедиться, что обновление является доверенным, неизмененным и целевым.

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

Итоги

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

После импорта в службу и сохранения в Azure двоичные файлы обновления и связанные метаданные клиента автоматически шифруются службой хранилища Azure. Служба обновления устройств не обеспечивает автоматическое дополнительное шифрование, но позволяет разработчикам шифровать содержимое самостоятельно, прежде чем оно достигнет службы обновления устройства.

При развертывании обновления на устройствах из службы обновления устройства отправляется подписанное сообщение на устройство через защищенный канал центра Интернета вещей. Подпись запроса проверяется агентом обновления устройства на предмет подлинности.

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

Сведения о реализации

Чтобы обеспечить масштабирование службы обновления устройств до уровня самых простых, низкоуровневых устройств, в модели безопасности используются простые асимметричные ключи и простые подписи. Они используют форматы на основе JSON, такие как маркеры JSON Web и ключи JSON Web.

Защита содержимого обновления с помощью манифеста обновления

Манифест обновления проверяется с помощью двух подписей. Подписи создаются средствами структуры, состоящей из подписных ключей и корневых ключей.

Агент обновления устройства содержит встроенные открытые ключи, которые используются для всех устройств, обладающих возможностями обновления. Эти открытые ключи являются корневыми ключами. Соответствующие закрытые ключи контролируются корпорацией Майкрософт.

Корпорация Майкрософт также создает пару из открытого и закрытого ключей, которые не встраиваются в агент обновления устройства и не хранятся на этом устройстве. Это ключ подписи.

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

  1. Само значение подписи.
  2. Алгоритм, используемый для создания № 1.
  3. Сведения об открытом ключе для ключа подписи, используемого для создания № 1.
  4. Подпись открытого ключа подписи в № 3.
  5. Идентификатор открытого ключа корневого ключа, используемого для создания № 3.
  6. Алгоритм, используемый для создания № 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