Chargement en cours

LUKS, déchiffrement auto via TPM

LUKS, déchiffrement auto via TPM

Déchiffrement automatique au boot via TPM

En entreprise, il arrive souvent que l’on doive chiffrer l’OS de ses différentes machines, que ce soit GNU/Linux avec LUKS, ou Windows avec Bitlocker.

Si on est dans un environnement sensible et/ou avec suivi de certains frameworks (comme le PCI-DSS), ça devient même obligatoire (encryption at rest).

Aujourd’hui, on va donc voir non pas comment chiffrer l’OS d’une VM Rocky, car c’est trivial et fait à l’installation, mais plutôt comment réaliser le déchiffrement au boot, histoire d’automatiser ça ! Et le tout sur Proxmox !

*J’en parle en fin d’article mais en général en prod on utilisera plutôt du NBDE, et on gardera le combo Luks/Bitlocker avec TPM pour les workstations.

I) Le labo~

Que ce soit Proxmox ou vSphere, le principe reste le même… On va partir du postulat que votre VM est chiffrée de manière classique via LUKS, et que vous devez donc entrez votre passphrase au boot:

A noter que là, je n’ai pas encore ajouté de vTPM à ma machine ! On peut très bien l’ajouter à posteriori, et c’est justement ce qu’on va faire plus bas.

II) Ajout du vTPM sur Proxmox

Clairement rien d’insurmontable, on se rend sur Hardware, puis Add, TPM State:

Ici y’a plusieurs écoles, et comme toujours en cybersécurité, ça dépend de votre Threat Model… mais grossièrement, soit vous l’hébergez sur l’hôte local, mais bien penser à faire des backups, soit sur un share style iSCSI/NFS/Autre, mais bien penser à sécuriser les accès.

Car si quelqu’un arrive à copier le disque virtuel + le vTPM, c’est game over.

Bref, on vérifie ensuite si notre (v)TPM est bien détecté, après un p’tit reboot:

ls /dev/tpm*
# Et si vous voulez vraiment vous assurer qu'il est fonctionnel
dnf install tpm2-tools tpm2-abrmd -y && tpm2_getrandom 8
# Vous devriez obtenir 8 bits aléatoires

III) Configuration de LUKS pour le déchiffrement automatique au boot

Vous allez voir, ça tient en quelques lignes ma bonne dame !

On vérifie sa version de LUKS, en théorie si votre distrib’ date d’après 2014 vous êtes bon, mais si vous avez une vieille CentOS en version 5 ou 6 par exemple, ce sera pô compatible… (ça sent le vécu ?):

cryptsetup luksDump /dev/sdaX

Ensuite on peut sceller la clef LUKS dans notre TPM:

systemcd-cryptenroll --tpm2-device=auto --tpm2-pcrs=0+7 /dev/sda3

Alors ici, ça dépendra si vous êtes en BIOS (berk) ou UEFI:

  • Si vous êtes en mode BIOS, à la old-school, le –tpm2-pcrs=0 est suffisant ;
  • Si vous êtes en mode UEFI, rajoutez le +7

Pour vulgariser, le PCR 0 vérifie le firmware, et PCR 7 lui vérifie le Secure Boot et les signatures du bootloader.
Y’a d’autres PCRs possibles (une dizaine environ) mais on part p’tet un peu loin pour ce simple labo… et surtout certains vous demanderont de refaire la manipulation après une simple update kernel par exemple, mais pour les plus curieux vous pouvez aller ici~

Side note inutile: au moment de taper le mot de passe de déchiffrement, possibilité d’appuyer sur « Tab » pour le no echo, ça évite d’afficher le nombre de caractères tapés à l’écran. Pratique pour éviter le « shoulder surfing« . 🤓

On vérifie ensuite rapidos l’UUID de notre disque, bon ici on en a qu’un seul mais ça peut arriver d’avoir plusieurs disques chiffrés sur une même VM, et dans le fichier crypttab on parle UID, et pas devices:

On peut donc sereinement modifier notre fichier /etc/crypttab, l’équivalent du /etc/fstab mais indiquant comment déchiffrer les volumes montés:

Suffit simplement de rajouter un une virgule avec tpm2-device=auto !

Et enfin, on reconstruit l’intramfs via dracut:

sudo dracut -f
# Et si vous êtes sur Debian/Ubuntu/dérivés
sudo update-initramfs -u -k $(uname -r)

Et on peut reboot pour valider le tout:

Beh oui, j’allais pas vous mettre une capture d’écran de l’accès console, ‘m’auriez pas cru sinon 🤪

Mais on voit bien dans les logs après le démarrage que le déchiffrement s’est lancé puis finalisé !

IV) Conclusion

Et bien ce mini-article est déjà terminé ! Rien de sorcier comme vous aurez pu le voir.

Comme dit en préambule, en entreprise on utilisera du NBDE, pour Network-Bound Disk Encryption, le fameux combo Tang/Clevis… mais je ferai sûrement un article dédié à ce sujet, ça pourrait être intéressant.

Grosso modo c’est du déchiffrement automatique au boot mais en passant par le réseau, alors certes dans certains environnements (air-gapped par exemple), pas moyen d’utiliser Tang car pas de connectivité, mais ça reste la méthodo la plus utilisée en entreprise, puis elle a certains avantages niveau PCRs/re-enroll notamment 😉

Sur ce, je vous souhaite une bonne journée/soirée, ciao !

Laisser un commentaire