В этой статье рассказывается о функции безопасной загрузки и о том, как она используется в Linux (в частности, в RHEL7). Здесь также содержатся некоторые сведения о функции доверенной загрузке ядра Linux и о ее влиянии на приложения пользовательского пространства.
Безопасная загрузка предназначена для предотвращения установки руткитов во время загрузки в память с помощью таких механизмов, как Option ROM и MBR, которые затем загружаются в ОС, перехватывают управление системой и скрываются от антивирусных программ. Со временем эта проблема стала играть значительную роль в потере, повреждении и краже данных. Вредоносная программа может находиться между BIOS и загрузчиком ОС. Она также может устанавливаться между загрузчиком ОС и ОС.
UEFI — это новый стандарт аппаратно-программного интерфейса для современных серверных платформ с широким набором пользовательских интерфейсов, модульности и стандартных интерфейсов для IHV, предназначенных для разработки драйверов устройств в UEFI, которые лучше работают в среде предварительной загрузки, более гибкой, чем устаревшая среда BIOS. UEFI все шире внедряется в операционные системы и платформы и поддерживается многими основными версиями клиентов и серверных ОС.
Под руководством корпорации Microsoft подразделение стандартов UEFI определило способ запретить установку вредоносных руткитов во время загрузки. Для этого используется механизм загрузки и выполнения двоичных файлов, которые не были изменены и известны платформе. Этот механизм называется безопасной загрузкой. Сведения о его реализации компанией Microsoft см. в статье Безопасная загрузка Microsoft; аналогичным образом различные поставщики ОС внедрили различные способы безопасной загрузки.
Защищенные платформы с UEFI загружают только те двоичные файлы программного обеспечения, например драйверы дополнительного ПЗУ, загрузчики и загрузчики ОС, которые не были изменены и которые известны платформе. Спецификация UEFI подробно описывает механизм безопасной загрузки здесь.
Спецификация UEFI определяет инфраструктуру, необходимую для безопасной загрузки. Мы кратко познакомим вас с терминологией, используемой в безопасной загрузке, чтобы помочь тем, кто хочет получить более подробную информацию.
Безопасная загрузка не защищает систему во время работы и ее данные. Функция безопасной загрузки останавливает загрузку ОС, если какой-либо компонент не подтвержден в процессе загрузки, что предотвращает запуск скрытых вредоносных программ в системах.
В безопасной загрузке важную роль играют перечисленные ниже ключевые термины. Спецификация UEFI содержит более подробную информацию об этих ключевых терминах. В этих спецификациях подробно описано, как подписать двоичные файлы, в частности, см. раздел 28.
Подтвержденные переменные. UEFI предоставляет службу подтвержденных переменных — это означает, что только сертифицированный модуль или модуль с подлинным кодом может выполнять запись, т.е. только модуль кода, имеющий сертификат ключа. Но любая сторона может считывать эти переменные.
Ключ платформы (PK). Ключ платформы устанавливает доверительные отношения между владельцем платформы и микропрограммой, установленной производителем платформы в NVM.
KEK. Ключ обмена ключами устанавливает доверительные отношения между операционными системами и микропрограммой платформы. Ключи KEK устанавливаются в платформу операционной системой и/или компоненты сторонних производителей, которые хотят обмениваться данными с микропрограммой платформы.
БД. Авторизованная база данных, в которой хранятся открытые ключи и сертификаты модуля кода, который имеет право взаимодействовать с микропрограммой платформы.
DBX. База данных с черным списком. Любой модуль кода, соответствующий этим сертификатам, не сможет начать загрузку.
Подпись. Подпись создается закрытым ключом и хэшем двоичного файла, который будет подписан.
Сертификат. Сертификат Authenticode, содержащий открытый ключ, который соответствует закрытому ключу, используемому для подписи изображения.
Микропрограмма платформы UEFI загрузит сторонние драйверы, дополнительные ПЗУ и загрузчики ОС, подписанные центром сертификации (в данном случае корпорацией Microsoft). Любой производитель оборудования может записать свои драйверы в UEFI BIOS и подписать их у корпорации Microsoft для запуска на платформе UEFI. OEM-производители устанавливают общедоступную часть ключа в базе данных платформы, а служба протокола загрузчика UEFI проверяет подпись двоичного файла в авторизованной базе данных, прежде чем запускать его на платформе. Эта цепочка аутентификации продолжается с UEFI до загрузчика ОС и ОС.
Таким образом, UEFI позволяет запускать загрузчики ОС, которые подписаны и ключ которых присутствует в базе данных. Этот механизм ключей гарантирует, что загрузчик ОС или дополнительные ПЗУ будут работать только в том случае, если они авторизованы и не изменены какой-либо стороной.
Рис. 1. Микропрограмма платформы UEFI