Сертификат драйвера устройства для системы в SecureBoot

Вопрос или проблема

Чтобы установить драйвер устройства, созданный вами на системе с включенной безопасной загрузкой (Secure Boot) в Linux, я понимаю, что можно установить только драйверы, подписанные определенным сертификатом. Хотелось бы узнать, есть ли способ получить сертификат от официального органа сертификации (CA) или каким-либо другим официальным образом, кроме создания собственного сертификата, для подписания драйвера для установки на Ubuntu или других дистрибутивах Linux с включенной безопасной загрузкой.

У меня есть еще один вопрос. Если я создаю сертификат, я понимаю, что могу использовать mokutil для запроса установки сертификата, затем ввести пароль сертификата в среде UEFI для завершения установки. Однако возможно ли завершить установку сертификата, когда система уже загружена в Linux, без входа в среду UEFI? Если да, не могли бы вы предоставить этот метод?

Вы создаете свой собственный ключ и сертификат и добавляете его в базу данных Machine Owner Key (MOK).

Часть загрузчика shimx64.efi подписана ключом Secure Boot от Microsoft и проверяет, подписан ли следующий этап ключом из базы данных MOK — именно здесь происходит передача, и этот механизм позволяет установить произвольное программное обеспечение, не нарушая цепочку безопасности загрузки: вы становитесь частью этой цепочки.

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

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

Если бы это было возможно делать из полностью загруженной системы, она была бы менее безопасной.

Ответ или решение

Вопрос о сертификате драйвера устройства для систем с включенной функцией Secure Boot вызывает интерес, особенно в контексте внедрения и поддержки данной безопасности в дистрибутивах Linux, таких как Ubuntu. Далее будет предоставлен подробный разбор процесса подписания и установки драйвера устройства в системе с Secure Boot, начиная с теории, примеров и вплоть до практического применения.

Теория

Системы с включенной функцией Secure Boot предназначены для защиты от выполнения неавторизованного кода при загрузке. Это достигается за счет использования цифровых подписей, которым доверяет прошивка UEFI. В контексте Linux, это обычно означает, что только подписанное программное обеспечение, такое как ядро и драйверы устройства, может быть загружено из-под Secure Boot. В стандартных сценариях на Linux используется механизм Machine Owner Key (MOK), который позволяет пользователю добавлять свои собственные ключи, доверяя им на уровне загрузчика.

Обычно драйверы устройства должны быть подписаны для интеграции в систему с Secure Boot. Существуют три основных способа подписи драйверов:

  1. Подписание с помощью официального сертификата, полученного от сертификационного центра (CA): Это наиболее предпочтительный, но также сложный и затратный метод для индивидуальных разработчиков, поскольку требуется соответствие строгим требованиям безопасности.

  2. Самостоятельная генерация и подпись сертификата: Этот метод является более распространенным и доступным. Пользователь создает пару ключей и подписывает ими драйверы, добавляя сертификат в базу данных MOK для его признания системой.

  3. Использование предварительно доверенных сертификатов, таких как Microsoft Third Party UEFI CA: В некоторых ситуациях, это упрощает процесс только для контроля загрузочного процесса, а не для сторонних драйверов.

Примеры

Рассмотрим подробнее второй сценарий, связанный с самостоятельной генерацией сертификата. Пользователь может использовать такие инструменты, как OpenSSL для создания пары ключей. Затем создается запрос на сертификацию (certificate signing request, CSR), который подписывается, формируя окончательный сертификат. После подписания осуществляется процесс интеграции в систему.

Применение

Практическое применение начинается с использования команды mokutil для добавления сгенерированного сертификата в базу данных MOK. Это важно: операция ввода происходит с помощью загрузки в UEFI-окружение, потому что доступ на запись к этим данным возможен только до переокружения системы.

Процесс состоит из нескольких этапов:

  1. Создание пары ключей и сертификата:

    openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=My Name/"
  2. Установка сертификата с помощью mokutil:

    sudo mokutil --import MOK.der
  3. После выполнения команды, нужно перезагрузить систему и завершить внесение изменений вручную через MOK Manager в UEFI-окружении, используя ранее заданный пароль.

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

Вывод

Монолитный подход к безопасности загрузки, например, в Linux, во многом обусловлен необходимостью соблюдения баланса между удобностью использования системы и обеспечением ее безопасности. Использование Secure Boot в сочетании с MOK позволяет пользователям и администраторам сохранять контроль над тем, какой код загружается в их системы, при этом поддерживая высокий уровень безопасности и предотвращая возможные атаки. Для тех, кто не может или не хочет заниматься созданием своих сертификатов, доступ к авторизованным CA может быть альтернативой, хотя и с большими издержками.

Оцените материал
Добавить комментарий

Капча загружается...