MonWiki

SecureBootSignModule

PagePrincipale :: DerniersChangements :: DerniersCommentaires :: Vous êtes ec2-3-17-150-163.us-east-2.compute.amazonaws.com

PagePrincipale . memos . SecureBootSignModule

Signer les modules Noyaux


Si vous utilisez Virtualbox et le "secure boot mode", vous avez probablement le message d'erreur suivant lors de la tentative de chargement du module :

modprobe -v vboxdrv
insmod /lib/modules/4.4.0-21-generic/updates/dkms/vboxdrv.ko
modprobe: ERROR: could not insert 'vboxdrv': Required key not available


Cela vient du fait que DKMS qui compile localement le module ne le signe pas (de toute façon, il ne pourrait pas le faire car il ne dispose pas de la clé privé appartenant à Canonical). Deux solutions:

Documentation


- https://elrepo.org/tiki/SecureBootKey
- https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/sect-signing-kernel-modules-for-secure-boot.html
- https://www.kernel.org/doc/Documentation/module-signing.txt
- http://askubuntu.com/questions/483283/module-verification-failed-signature-and-or-required-key-missing
- http://chrisarges.net/2016/03/25/signed-kernel-modules-using-an-auxiliary-key.html
- https://www.suse.com/communities/blog/uefi-secure-boot-details/
- http://drivers.suse.com/doc/media/IDF-demo-fade-sub-audio.mp4

Désactiver la vérification des modules:

Installation de mokutil :
sudo apt-get install mokutil


désactivation de la vérification:
sudo mokutil --disable-validation
password length: 8~16
input password: # (saisir un mot de passe simple car il faudra le saisir QWERTY)
input password again:


On redémarre :
sudo reboot


On rentre dans menu MOK (fenetre bleue) "Shim UEFI key management"
Press any key withing 10 seconds to proceed.
Change secure Boot state


Si l'on souhaite activer de nouveau, la procédure est similaire :
sudo mokutil --enable-validation
...



MOK et création paire clés (à faire qu'une fois)


Vérifions comment le noyau Linux a été compilé:


grep -e "^CONFIG_MODULE_SIG" /boot/config-$(uname -r)
CONFIG_MODULE_SIG=y
CONFIG_MODULE_SIG_ALL=y
CONFIG_MODULE_SIG_SHA512=y
CONFIG_MODULE_SIG_HASH="sha512"
CONFIG_MODULE_SIG_KEY="certs/signing_key.pem"


Installation de mokutil :
sudo apt-get install mokutil


Génération paire de clés (à faire qu'une fois):


cd /root

cat << EOF > configuration_file.config
[ req ]
default_bits = 2048
distinguished_name = req_distinguished_name
prompt = no
string_mask = utf8only
x509_extensions = myexts

[ req_distinguished_name ]
O = PERSO
CN = PERSO
emailAddress = daniel.rocher@perso.local

[ myexts ]
basicConstraints=critical,CA:FALSE
keyUsage=digitalSignature
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid
EOF


Génération de la clé privé et du certificat (public) :
openssl req -x509 -new -nodes -utf8 -sha256 -days 3650 -batch -config configuration_file.config -outform DER -out public_key.der -keyout private_key.priv
chmod 0600 private_key.priv

Enrôlement du certificat dans MOK:
mokutil --import public_key.der
input password: # (saisir un mot de passe simple car il faudra le saisir QWERTY)
input password again:
sudo reboot


On rentre dans menu MOK (fenetre bleue) "Shim UEFI key management"

Press any key withing 10 seconds to proceed.
Enroll MOK
View Key 0
Continue
Enroll the key(s) ? YES
Password:
The system must now be rebooted : OK


Visualiser les clés enrôlées :


mokutil --list-enrolled



reset de la DB MOK:

Si l'on souhaite effacer les clés dans MOK

sudo mokutil --reset

procédure similaire à l'activation de la validation (voir ci-dessus)


Signer les modules virtualbox (à faire à chaque mise à jour du noyau)


Si le noyau a été mis à jour, DKMS aura probablement recompilé les modules virtualbox (principe même de DKMS). Du coup, les modules ne seront plus signés et ne pourront pas être chargé en mémoire.

signature des modules avec la clé privé:

cd /root
/usr/src/linux-headers-$(uname -r)/scripts/sign-file sha512 private_key.priv public_key.der $(modinfo -n vboxdrv)
/usr/src/linux-headers-$(uname -r)/scripts/sign-file sha512 private_key.priv public_key.der $(modinfo -n vboxnetadp)
/usr/src/linux-headers-$(uname -r)/scripts/sign-file sha512 private_key.priv public_key.der $(modinfo -n vboxnetflt)
/usr/src/linux-headers-$(uname -r)/scripts/sign-file sha512 private_key.priv public_key.der $(modinfo -n vboxpci)


Vérification:

strings /lib/modules/$(uname -r)/updates/dkms/vboxdrv.ko | grep sig
strings /lib/modules/$(uname -r)/updates/dkms/vboxnetadp.ko | grep sig
strings /lib/modules/$(uname -r)/updates/dkms/vboxnetflt.ko | grep sig
strings /lib/modules/$(uname -r)/updates/dkms/vboxpci.ko | grep sig


doit afficher : ~Module signature appended~

Maintenant, il est possible de charger les modules :-)
Le principe est le même pour tous les modules compilés par DKMS (ou par vous même).
Il n'y a pas de commentaire sur cette page. [Afficher commentaires/formulaire]