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:
- Désactiver la vérification des modules
- Générer sa paire de clés, rajouter le certificat public dans MOK et signer les modules virtualbox
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).