
Preuve de concept démontrant le contournement du chiffrement de disque LUKS lié au TPM sur les systèmes Linux, en extrayant les clés de volume via une attaque par système de fichiers racine personnalisé.
Ce dépôt contient un code de preuve de concept simple exploitant une faiblesse courante décrite initialement il y a plus d'un an sur https://oddlama.org/blog/bypassing-disk-encryption-with-tpm2-unlock/. Bien qu'il cible spécifiquement IncusOS, l'attaque est assez générique contre la plupart des systèmes Linux modernes.
Si vous liez votre chiffrement LUKS à un TPM, assurez-vous également de définir un code PIN pour le TPM.
Ceci est un PoC rapide et brouillon. Il n'est pas entièrement poli et comporte quelques aspérités. Aucun support n'est fourni, et je ne prévois aucun développement ultérieur.
Comme la plupart des gens, je supposais que configurer un chiffrement de disque LUKS lié à la puce TPM de mon ordinateur portable serait sécurisé et empêcherait un attaquant d'extraire la clé de volume LUKS (également appelée clé maîtresse). Il s'avère que c'est presque déprimant de facilité à réaliser, sans laisser aucune trace de l'attaque.
Oui, le problème est qu'un attaquant peut fournir un système de fichiers racine personnalisé, et après le démarrage de votre système, le TPM sera dans un état « bon » connu où il déverrouillera volontiers votre volume LUKS. L'attaquant peut ensuite faire ce qu'il veut et dissimuler facilement toute preuve de l'attaque.
Mais un attaquant préparé n'a littéralement besoin que de quelques minutes en possession de votre ordinateur pour que vous soyez compromis. Vous laissez votre ordinateur portable dans la chambre d'hôtel pendant que vous sortez dîner ? Et un point de contrôle de sécurité où l'on vous écarte pour un interrogatoire ? Oui, ce n'est pas bon.
Le script ./prepare.sh exécute les étapes nécessaires pour compromettre la VM cible. Les mêmes étapes peuvent facilement être exécutées contre un vrai disque dur temporairement retiré de son boîtier habituel.
L'« exploit » proprement dit extraira la clé de volume LUKS d'origine, ce qui peut être observé en consultant le journal de attack.service. De nombreuses variantes de cette attaque sont possibles.
Exécutez ./restore.sh pour effacer toute preuve de vos actions tout en repartant avec la clé de volume LUKS de votre victime.