Secure Boot
Secure Boot (безопасная загрузка) – это механизм, встроенный в прошивку UEFI, который проверяет цифровые подписи всех компонентов, участвующих в процессе загрузки операционной системы. Если включён, U
Secure Boot (безопасная загрузка) – это механизм, встроенный в прошивку UEFI, который проверяет цифровые подписи всех компонентов, участвующих в процессе загрузки операционной системы. Если включён, UEFI загружает только те программы, которые подписаны доверенными ключами (хранятся в базе данных DB). Это предотвращает запуск вредоносных загрузчиков и руткитов. По умолчанию в прошивке большинства компьютеров установлены ключи Microsoft, что позволяет загружать Windows и многие дистрибутивы Linux (использующие shim). В этой статье рассматриваются способы управления ключами Secure Boot в Linux, инструменты sbctl, ручная генерация ключей, подписание загрузчиков (rEFInd, GRUB, systemd‑boot) и импорт ключей в UEFI.
1.1. Английские сокращения
| Сокращение | Английское обозначение | Русское обозначение |
|---|---|---|
| UEFI | Unified Extensible Firmware Interface | Унифицированный расширяемый интерфейс прошивки |
| BIOS | Basic Input/Output System | Базовая система ввода-вывода |
| EFI | Extensible Firmware Interface | Расширяемый интерфейс прошивки |
| PK | Platform Key | Платформенный ключ |
| KEK | Key Exchange Key | Ключ обмена ключами |
| DB | Signature Database | База данных подписей |
| ESP | EFI System Partition | Системный раздел EFI |
| SB | Secure Boot | Безопасная загрузка |
| shim | bootloader shim | Прослойка для загрузки Linux с подписью Microsoft |
| SBAT | Secure Boot Advanced Targeting | Дополнительная метаинформация для отзыва |
1.2. Русские сокращения
| Сокращение | Обозначение |
|---|---|
| БЗ | Безопасная загрузка |
| УП | Унифицированный интерфейс прошивки |
| КП | Ключ платформы |
| КО | Ключ обмена |
| БП | База подписей |
| СР | Системный раздел EFI |
2.1. Цепочка доверия
- UEFI содержит встроенные базы данных: PK (Platform Key), KEK (Key Exchange Key), DB (Signature Database), DBX (Revocation List).
- При загрузке UEFI проверяет подпись загрузчика (например, bootx64.efi) с помощью ключей из DB.
- Если подпись действительна, управление передаётся загрузчику.
- Загрузчик, в свою очередь, может проверять подписи ядра и модулей (например, через shim или подписанные версии).
2.2. Ключи Microsoft
По умолчанию в DB любого сертифицированного компьютера с Windows установлен сертификат Microsoft Corporation UEFI CA 2011. Это позволяет загружать операционные системы, подписанные Microsoft (Windows, а также дистрибутивы Linux, использующие shim). Для двойной загрузки (Windows + Linux) эти ключи желательно сохранить.
2.3. Режимы работы
- Setup Mode: система UEFI не имеет платформенного ключа (PK). В этом режиме можно загружать неподписанные компоненты и устанавливать собственные ключи.
- User Mode: после установки PK UEFI переходит в режим проверки подписей.
Если на компьютере используется только Linux и нет потребности в двойной загрузке, можно удалить ключи Microsoft и установить собственные. Это повышает безопасность (отсутствие доверия к третьим сторонам) и позволяет полностью контролировать цепочку загрузки. Однако при удалении ключей Microsoft загрузка Windows станет невозможной. Перед удалением рекомендуется сохранить резервную копию оригинальных ключей (например, с помощью утилиты `efi‑update`.
4.1. Что такое sbctl
sbctl – утилита для управления ключами Secure Boot в Linux, написанная на Go. Она автоматизирует создание ключей (PK, KEK, DB), их регистрацию в UEFI, подписание файлов (ядер, загрузчиков) и установку хуков для автоматического подписания при обновлении (например, для Arch Linux с pacman). Лицензия MIT.
4.2. Установка sbctl
- Arch Linux: `sudo pacman -S sbctl`
- Gentoo: `emerge app-crypt/sbctl` (доступен в портежах)
- ALT Linux: `apt-get install sbctl` (если в репозитории, иначе сборка из исходников)
4.3. Создание и регистрация собственных ключей
sudo sbctl create-keys
sudo sbctl enroll-keys --microsoft # оставить ключи Microsoft для двойной загрузки
4.4. Подписание файлов
sudo sbctl sign -s /boot/efi/EFI/refind/refind_x64.efi
sudo sbctl sign -s /boot/vmlinuz-linux
4.5. Автоматическое подписание (Arch Linux)
Хуки sbctl подписывают новое ядро и загрузчик при каждом обновлении через pacman.
5.1. Создание собственных ключей с помощью openssl
sudo mkdir -p /etc/secureboot/keys
cd /etc/secureboot/keys
openssl req -new -x509 -newkey rsa:2048 -keyout PK.key -out PK.crt -days 3650 -subj "/CN=Platform Key/" -nodes
openssl req -new -x509 -newkey rsa:2048 -keyout KEK.key -out KEK.crt -days 3650 -subj "/CN=Key Exchange Key/" -nodes
openssl req -new -x509 -newkey rsa:2048 -keyout db.key -out db.crt -days 3650 -subj "/CN=Signature Database/" -nodes
5.2. Подписание загрузчика (например, rEFInd)
Установите `sbsigntool` (в Gentoo: `emerge app-crypt/sbsigntool`).
sudo sbsign --key /etc/secureboot/keys/db.key \
--cert /etc/secureboot/keys/db.crt \
--output /boot/efi/EFI/refind/refind_x64.efi.signed \
/boot/efi/EFI/refind/refind_x64.efi
sudo mv /boot/efi/EFI/refind/refind_x64.efi.signed /boot/efi/EFI/refind/refind_x64.efi
5.3. Подписание ядра (если требуется)
Некоторые загрузчики (например, GRUB с модулем lockdown) не проверяют подпись ядра – достаточно подписать загрузчик. Для подписания ядра:
sudo sbsign --key /etc/secureboot/keys/db.key \
--cert /etc/secureboot/keys/db.crt \
--output /boot/vmlinuz-linux.signed /boot/vmlinuz-linux
Затем настроить загрузчик на использование подписанного ядра.
5.4. Импорт ключей в прошивку UEFI
Перезагрузитесь и войдите в настройки UEFI. Найдите раздел Security → Secure Boot. Если прошивка находится в режиме Setup Mode, выберите опцию «Enroll Keys» и укажите файлы PK, KEK, DB (обычно в формате .auth или .der). Вместо этого можно использовать утилиту `sbctl enroll-keys` (если прошивка поддерживает переменные EFI).
5.5. Проверка статуса
bootctl status # для systemd-boot
sbctl status
6.1. GRUB
GRUB может быть подписан напрямую. В дистрибутивах (Ubuntu, Fedora) используется `shim` – небольшой загрузчик, подписанный Microsoft, который затем загружает GRUB, подписанный ключом дистрибутива. Для ручной настройки можно подписать `grubx64.efi`.
6.2. systemd‑boot
systemd‑boot (ранее gummiboot) обычно подписывается как `systemd-bootx64.efi`. Его можно подписать так же, как rEFInd.
6.3. rEFInd
См. раздел 5.2.
Если на компьютере также установлена Windows, не удаляйте ключи Microsoft. При генерации собственных ключей добавьте ключи Microsoft в базу DB:
sbctl enroll-keys --microsoft
Также убедитесь, что Windows не будет перезаписывать загрузчик (например, не используйте общий ESP с конфликтующими именами). Лучше иметь отдельные каталоги `Microsoft` и `refind` на ESP.
| Проблема | Решение |
|---|---|
| «No EFI variables» | Проверьте, загружена ли система в UEFI mode (не CSM/BIOS). Используйте `ls /sys/firmware/efi`. |
| «sbctl: keys not enrolled» | Выполните `sudo sbctl enroll-keys` после создания ключей. |
| Подписанный загрузчик не запускается | Убедитесь, что база данных DB содержит сертификат, которым подписан файл. Проверьте через `sbctl verify`. |
| Windows не загружается после удаления ключей Microsoft | Восстановите оригинальные ключи (если есть резервная копия) или переустановите Windows. |
9.1. Проверка состояния Secure Boot
mokutil --sb-state
9.2. Создание резервной копии текущих ключей (используя efi-readvar)
sudo apt install efitools
sudo efi-readvar -v PK -o old_PK.esl
sudo efi-readvar -v KEK -o old_KEK.esl
sudo efi-readvar -v db -o old_db.esl
9.3. Установка sbctl на Gentoo (дополнительно)
sudo emerge app-crypt/sbctl
Secure Boot – мощное средство защиты от атак на процесс загрузки. Linux-пользователи могут гибко настраивать его: использовать ключи Microsoft (для совместимости) или создавать собственные. Утилита `sbctl` значительно упрощает генерацию, подписание и регистрацию ключей. Ручной метод с `openssl` и `sbsigntool` даёт полный контроль, но требует больше усилий. Правильная настройка Secure Boot повышает безопасность системы и не мешает работе, если следовать рекомендациям.
- Документация sbctl: (https://github.com/foxboron/sbctl)
- Руководство по Secure Boot в Gentoo: (https://wiki.gentoo.org/wiki/Secure_Boot)
- Статья на ArchWiki: (https://wiki.archlinux.org/title/Unified_Extensible_Firmware_Interface/Secure_Boot)
Для работы с переменными EFI необходима загрузка в режиме UEFI.