Déchiffrement d'un disque dur avec LUKS et une Yubikey
I. Introduction
Cela fait maintenant plusieurs années que j’ai mis en place un chiffrement de mon disque dur à l’aide de LUKS sur ma Kali Linux. Jusqu’à présent, j’ai fait le choix de configurer une “passphrase” afin de protéger la clé cryptographique servant à chiffrer et à déchiffrer le disque. C’est cette “passphrase” qui doit être saisie lors du démarrage du système afin d’assurer le déchiffrement.
Disposant d’une clé de sécurité Yubikey 5, je souhaite pouvoir booter sur mon OS et déchiffrer le disque sans devoir réaliser une saisie clavier.
II. Mise en place technique
A. Prérequis
Dans un premier temps, il faut s’assurer que les paquets yubikey-personalization et yubikey-luks sont correctement installés sur le système Kali Linux.
Attention
Le fichier /usr/share/yubikey-luks/ykluks-keyscript généré par le paquet yubikey-luks dysfonctionne et ne permet pas de pré-enregister le mot de passe utilisé lors du challenge Yubikey - LUKS dans le fichier de configuration /etc/ykluks.cfg.
Un fichier ykluks-keyscript fonctionnel a été proposé sur Github pour résoudre ce problème :
https://github.com/espegro/yubikey-luks/tree/main
Il est nécessaire de le télécharger et de remplacer le fichier d’origine défectueux.
B. Configurations
Ensuite, nous allons utiliser le mode “Challenge-Response” et l’usage de l’algorithme HMAC-SHA1 entre LUKS et la yubikey. L’idée est ici de s’authentifier auprès de LUKS à l’aide de la clé de sécurité matérielle en lieu et place de la fameuse “passphrase” pour pouvoir ensuite se servir de la clé de déchiffrement. Deux slots sont disponibles sur la yubikey pour mettre en place cette méthode d’authentification. Dans le cas présent, nous utiliserons le slot 2.
Dans un premier temps, nous devons savoir quel disque ou quelle partition est chiffré(e). Ici nous constatons qu’il s’agit de la partition 3 du disque NVME.
LUKS accepte l’usage de plusieurs passphrases pour avoir accès à la clé de chiffrement-déchiffrement des disques ou partitions (32 pour LUKS 2 et 8 pour LUKS 1). Le slot 0 de LUKS est déjà configuré. Il contient la “passphrase” utilisée actuellement. Il est donc nécessaire de choisir un autre slot disponible (comme le slot 1). Pour obtenir les informations présentes dans l’en-tête, notamment concernant le paramétrage des slots :
Dans le cas présent, nous constatons que le slot 0 est déjà utilisé et qu’il n’y en a pas d’autres. Nous pouvons donc sollicité le slot 1.
Ce script nous demande un mot de passe ou une passphrase qui servira lors du challenge entre la Yubikey et LUKS.
Une fois le déroulement du script terminé, il faut maintenant indiquer à LUKS que nous utiliserons la clé de sécurité matérielle au moment du déchiffrement via l’ajout de keyscript=/usr/share/yubikey-luks/ykluks-keyscript.
Enfin, afin d’éviter de saisir le mot de passe défini précédemment dans le script lorsque l’on insérera la Yubikey dans le port USB, nous allons l’indiquer dans le fichier de configuration /etc/ykluks.cfg. Ce sera finalement du 1FA, c’est à dire le déchiffrement du disque à l’aide de la Yubikey uniquement.
Il nous reste maintenant à régénerer une image initramfs qui prendra en compte ces nouveaux paramétrages :
III. Conclusion
Ça y est ! Nous pouvons maintenant déchiffrer le disque à l’aide de notre Yubikey lors du démarrage de la Kali Linux sans à avoir à saisir une “passphrase”.
En cas de perte ou de problème avec la clé de sécurité matérielle, nous sommes toujours en mesure d’utiliser la première “phassphrase” définie lors du chiffrement initial du disque (slot 0).
J’ai fait le choix par simplicité de passer par une méthode “Challenge-Response”. J’ai découvert, lors de mes recherches, que l’utilisation de Fido 2 était également envisageable et qu’il apporterait probablement davantage de garanties en matière de sécurité dans un environnement sensible. Cependant, il faut s’assurer d’avoir une version de systemd compatible et les manipulations paraissent un peu plus périlleuses. Pour ceux que cela intéresserait, voici des liens qui traitent de la question :
https://research.kudelskisecurity.com/2023/12/14/luks-disk-encryption-with-fido2/
https://github.com/nyancient/fido2-luks
Sources
https://www.endpointdev.com/blog/2022/03/disk-decryption-yubikey/