Подписывание сторонних модулей ядра при использовании SecureBoot

Nov 03, 2021 22:01

Современные EFI/BIOS в последнее время порой идут с неотключаемым SecureBoot или же порой очень сложно найти, где оно отключается. Зачем он нужен и какую пользу приносит, об этом как-нибудь в другой раз. Слишком обширная тема.

Сейчас мы разберём, как подписывать сторонние модули ядра, не входящие в основную поставку, чтобы они работали с SecureBoot. для примера возьмём VirtualBox, модули которого, обычно идут в виде исходников и собираются с помощью DKMS.

Я использую Fedora 34, но это работает в любом современном дистрибутиве.

Для начала нам понадобится mokutil.

sudo dnf update
sudo dnf install mokutil

Затем создаём новый каталог и генерим пару RSA:

sudo -i
mkdir /root/signed-modules
cd /root/signed-modules
openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=VirtualBox/"
chmod 600 MOK.priv

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

sudo mokutil --import MOK.der

Затем перезагружаемся и на появившемся синем экране выбираем: Enroll MOK --> Continue --> вбиваем пароль из предыдущего шага

Теперь уже создаём скриптик, которым мы будем подписывать модули ядра:

cd /root/signed-modules
vim sign-virtual-box

И сам скрипт, собственно:

#!/bin/bash

for modfile in $(dirname $(modinfo -n vboxdrv))/*.ko; do
echo "Signing $modfile"
/usr/src/kernels/$(uname -r)/scripts/sign-file sha256 \
/root/signed-modules/MOK.priv \
/root/signed-modules/MOK.der "$modfile"
done

На всякий случай можете проверить расположение signfile и если что, подправить пути в скрипте выше:

find /usr/src -name signfile

И далее:

chmod 700 sign-virtual-box
./sign-virtual-box

И пересобираем модуль:

modprobe vboxdrv

В дальнейшем скрипт НЕ УДАЛЯЕМ, как и сгенерированные ключи. Они нам потребуется при каждом обновлении ядра. А вот mokutil будет уже не обязателен.

This is crosspost from https://techquisitor.dreamwidth.org/332890.html

linux, software, soft

Previous post Next post
Up