Démarrage sécurisé
Le démarrage sécurisé est habituellement associé à la capacité d'un micrologiciel de plateforme de vérifier les composants de démarrage et de s'assurer que seul votre propre système peut démarrer.
Le démarrage sécurisé est implémenté de multiple façons. La plus connue est le démarrage sécurisé UEFI qui repose sur le micrologiciel de plateforme UEFI, mais d'autres implémentations existent sur les systèmes embarqués.
On NixOS, Secure Boot can be enabled via the project Lanzaboote.
Lanzaboote dispose de deux composants: lzbt
et stub
.
lzbt
est la ligne de commande qui signe et installe les fichiers de démarrage sur l'ESP.
stub
est une application UEFI qui charge le noyau et initrd depuis l'ESP. Elle diffère de systemd-stub, voir plus bas pour des précisions.
Pré-requis
L'implémentation du démarrage sécurisé de Lanzaboote nécessite un système installé en mode UEFI avec systemd-boot activé. Ceci peut être vérifier en exécutant bootctl status
:
$ bootctl status
System:
Firmware: UEFI 2.70 (Lenovo 0.4720)
Secure Boot: disabled (disabled)
TPM2 Support: yes
Boot into FW: supported
Current Boot Loader:
Product: systemd-boot 251.7
...
Il est recommandé de définir un mot de passe BIOS et le chiffrement total du disque afin de se prémunir d'attaques contre l'UEFI et le démarrage sécurisé.
Installation
Follow the instructions in the Quick Start guide.
Gestion des clés
À ce jour, Lanzaboote offre seulement un stockage local du trousseau de clés. Sans cela, il est impossible de reconstruire le système et signer les nouveaux fichiers générés.
Prochainement, Lanzaboote fournira deux nouveaux services de signature: la signature à distance (un serveur HTTP recevant des demandes de signature et renvoyant les signatures) et la signature basée sur PKCS#11 (en apportant un périphérique de type HSM tel qu'une YubiKey, NitroKey, etc).
Différences avec `systemd-stub`
systemd et les distributions en amont ont une solution existante s'appelant `systemd-stub`, cependant cette solution n'est pas applicables à NixOS étant donné qu'il y a trop de générations sur un même système.
En utilisant `systemd-stub`, un noyau et un initrd doivent être dupliqués pour chaque génération. En utilisant le stub Lanzaboote, un noyau et un initrd peuvent être dé-dupliqués sans compromettre la sécurité.
Tracking the feature parity with `systemd-stub` can be done in this issue: https://github.com/nix-community/lanzaboote/issues/94.