Presser rapidement Enter permet d'accéder à un disque chiffré sous Linux

Pierre Dandumont |

La gestion d'un périphérique de stockage entièrement chiffré n'est pas nécessairement simple… ni efficace. Et l'exemple d'un problème découvert récemment avec le chiffrement sous GNU/Linux est éclairant : le fait de presser très rapidement la touche Enter (avec l'aide d'un petit périphérique USB) permet d'accéder à un périphérique chiffré.

Commençons par un point : il s'agit d'un cas un peu particulier. Dans un environnement classique, l'utilisateur doit en effet entrer deux mots de passe au démarrage : le premier permet d'accéder au périphérique et sert à déchiffrer le « disque », le second sert à accéder à la session de l'utilisateur. C'est un choix peu pratique dans certains cas, spécialement pour les appareils qui ne sont pas accessibles facilement : il n'est pas possible de se connecter à distance sans d'abord physiquement taper le premier mot de passe.

Ubuntu demande le mot de passe.

La solution la plus courante est celle choisie par Microsoft avec BitLocker : stocker la clé de déchiffrement dans un composant spécifique1, la puce TPM. De cette manière, le déchiffrement est automatique au démarrage, et l'utilisateur doit uniquement taper son mot de passe. Apple travaille un peu différemment avec FileVault, mais l'idée est la même : taper un seul mot de passe. Dans les cas de macOS, le système demande un mot de passe qui va être le même pour le déchiffrement et l'accès à la session.

L'idée derrière la faille présentée par Michael Fincham est liée à ce choix : pour permettre de régler un éventuel problème au démarrage, comme un système corrompu, il est possible de passer outre le démarrage automatique pour accéder à une console de récupération. En pressant une touche au bon moment, il est possible d'arriver sur un écran qui demande le mot de passe de déchiffrement, même si la clé est stockée dans la puce TPM.

Cette clé USB émule un clavier.

En utilisant une clé USB programmée pour émuler un clavier, il est possible d'envoyer le signal de la touche Enter environ dix fois plus vite qu'un être humain (une pression toutes les 10 millisecondes dans l'exemple) et après quelques minutes, de façon presque magique, l'utilisateur dispose d'un accès root, c'est-à-dire avec le plus haut niveau de privilège. L'auteur explique par ailleurs qu'il est possible de le faire manuellement, mais le résultat dépend en partie du clavier et de la vitesse de frappe.

Mais pourquoi ?

Les raisons exactes sont liées à des dépendances entre les différents programmes qui servent à déchiffrer le périphérique de stockage, mais l'idée reste basique : envoyer la touche Enter en rafale au bon moment va permettre de bloquer le processus qui gère le déchiffrement, avec des erreurs de mot de passe en série. Et les dépendances entre les logiciels font que le démarrage classique est bloqué et que systemd (le programme d'initialisations sous GNU/Linux) décide de lancer la console de récupération avec un accès root. Dans ce mode, l'utilisateur dispose donc de privilèges très élevés pour — en théorie — tenter de régler un problème de démarrage. Une fois à cet endroit, il est visiblement trivial de déchiffrer le périphérique de stockage, pour une bonne raison : les clés de chiffrement sont dans la puce TPM et il est donc possible de demander à cette dernière de déchiffrer le disque.

Le système panique.

Maintenant, est-il possible de régler cette faille ? Nous pourrions évidemment simplement recommander de ne pas laisser un accès physique à un attaquant, mais ça reste un vœu pieux. La solution de Michael passe par deux lignes à ajouter dans un fichier de configuration, qui permettent de forcer le redémarrage automatiquement en cas de problème. Ce choix amène une contrainte : l'accès à la console de récupération est impossible. L'autre solution, basique, consiste à ne pas passer par la puce TPM, mais nous revenons au point de départ : elle amène un côté pratique évident. La solution de Microsoft se trouve entre les deux : en cas d'accès à la console de récupération de Windows, le chiffrement nécessite une clé de sécurité secondaire (la clé de récupération), ce qui permet le dépannage tout en fournissant une solution sûre pour l'accès aux données… en supposant que l'utilisateur dispose bien des clés en question.

Dans tous les cas, cette faille qui peut sembler un peu risible montre que la sécurité des données ne doit jamais être considérée comme parfaite, spécialement quand on prend en compte le fait qu'un attaquant puisse disposer d'un accès physique.


  1. La « puce » TPM peut être physique ou virtuelle, avec une intégration logicielle dans le processeur lui-même. Elle est obligatoire pour Windows 11.  ↩︎

avatar TheUMan | 

C'est beau l'informatique... (c'est un dev qui vous le dit ^^-p )

avatar pocketalex | 

@TheUMan

En même temps, tant que notre vie quotidienne, notre identité et nos données personnelles, notre argent, l'argent de notre entreprise, l'argent de la finance, nos centrales, nos routes, nos trains ... n'est pas géré par l'informatique, je ne vois pas où est le problème

avatar souze | 

@pocketalex

🤣

avatar olivierm | 

@pocketalex

😱

avatar vince29 | 

Si vous avez des soucis avec bitlocker, lui aussi peut se bypasser si vous avez un accès physique (et un peu de matériel)
https://hackaday.com/2023/08/25/bypassing-bitlocker-with-a-logic-analzyer/

avatar Chris K | 

Tout bloquer si la rapidité de l’appui sur la touche Entrée est au delà ce qu'un être humain (même barbu et mangeur de pizzas) peut réaliser ? 😁

avatar Pierre Dandumont | 
Ben disons qu'une clé USB qui émule un clavier, c'est trivial (ça permet de hacker d'autres trucs, d'ailleurs)
avatar media | 

Mouais. On a un accès root dans l'initramfs parce que la configuration de dracut le permet. Bon.

Quelle est la différence entre ça, et modifier directement la ligne du kernel dans le bootloader pour accéder directement à ladite console, et surtout quelle est la différence entre ça et booter un live, donc avoir un accès root, et accéder aux mêmes données sur la puce TPM ? Ici non plus le système d'exploitation installé sur le PC n'est jamais lancé.

Je ne vois pas trop ce que ça apporte cette technique et ça semble un peu être un faux problème. De toute façon, avec un accès physique, + la clé stockée dans une puce, tout est possible. (sérieux, qui fait ça  ?). C'est même probablement possible de récupérer la clé avec un live même si l'OS installé sur l'ordinateur est Windows.

avatar marc_os | 

pour une bonne raison : [...]

Est-ce vraiment une bonne raison ?

les clés de chiffrement sont dans la puce TPM et il est donc possible de demander à cette dernière de déchiffrer le disque

« Donc »... et pourquoi, et comment ? 😳

avatar Pierre Dandumont | 
Avec les outils liés à la gestion du TPM, une fois l'accès root ouvert.
avatar koko256 | 

Donc ce n'est pas un problème de Linux mais bien un problème de systemd qui
1. Ouvre la console root sans demander le mot de passe root
2. N'en profite pas pour verrouiller le TPM.

avatar media | 

Même pas, c'est un problème de configuration par défaut de dracut. Systemd ne fait que faire ce que dracut lui dit de faire.

Mais c'est pareil que de booter un live usb et d'avoir un accès root sur celui-ci. C'est un faux problème ce truc. Ce n'est pas une faille de sécurité.

avatar Pierre Dandumont | 
Probablement pas non. Je ne suis pas totalement expert en TPM, mais de ce que j'ai compris du fonctionnement, le déchiffrement et l'accès aux clés est possible parce qu'on démarre sur un système "valide" au départ pour le déchiffrement. Ce qui ne serait pas le cas d'un live USB.
avatar media | 

Je ne suis pas un expert non plus, mais de ce que je sais, il existe des lives compatibles secure boot (Ubuntu par exemple). Et rien n'empêche de se faire un petit bootloader signé sur un live. Il n'est pas possilble d'accéder au TPM via un live d'Ubuntu ? Malheureusement je n'ai pas de PC compatible sous la main pour tester.

À propos du wiki d'Arch Linux, depuis le 5 avril 2021 ils expliquent noir sur blanc que mettre la clé de chiffrement du disque racine dans la puce TPM réduit la sécurité :
https://wiki.archlinux.org/index.php?title=Trusted_Platform_Module&diff=657701&oldid=657699
et depuis le 10 avril 2021, c'est écrit dans un warning rouge qu'en cas d'accès physique à la machine, rien n'est sécurisé.

Alors certes le coup du "canon à touches" simplifie le processus, mais c'est quand même difficile de considérer ça comme une faille de sécurité. C'est vraiment juste un problème de configuration par défaut de Dracut. Ça ne me semble pas pire que de laisser activer le boot sur USB.

avatar koko256 | 

@media

Dommage, toute bonne raison de taper sur systemd est bonne à prendre :)

avatar Artefact3000 | 

Et sous MacOS?

Aucune mention dans l’article de hack possible.

avatar Pierre Dandumont | 
macOS ne dépend pas d'une puce TPM ni de systemd. Donc il n'y a pas de soucis avec le problème évoqué ici.
avatar 9 | 

Plus qu'un problème lié à l'environnement Linux, c'est un problème lié au matériel des ordinateurs compatibles PC et à TPM ou je n'ai rien compris ? On peut accéder à une partition Windows chiffrée dès lors qu'on boote sur une distribution Linux ?

avatar Pierre Dandumont | 
Je ne suis pas expert du TPM, mais a priori non, la puce ne doit pas donner accès aux clés si on n'a pas démarré sur un OS valide.
avatar media | 

Mais dans l'exemple à aucun moment tu n'as démarré un OS valide, tu es encore dans l'early boot. Dans l'initramfs. Le disque système est toujours chiffré.

avatar Pierre Dandumont | 
Certes, mais le fonctionnement de base du TPM fait que c'est bloqué de ce que j'ai compris. La technique utilisée consiste à déchiffrer le disque sans la clé, mais si on démarre depuis un autre périphérique de boot, le TPM ne donne normalement pas accès sans la clé, justement.
avatar media | 

Je vois. Donc si j'ai bien tout compris, le secure boot ne permet de ne démarrer que sur un bootloader signé. Si on modifie ce dernier, la signature est non valide et l'ordinateur ne démarre pas.

Si la signature est valide, le bootloader lance l'initrd/initramfs, qui lui aussi est signé. Celui-ci va permettre de déchiffrer le disque système, en allant récupérer la clé de déchiffrement dans la puce TPM.

Je ne suis pas encore convaincu qu'un live d'Ubuntu ne permette pas d'accéder à la puce, mais soit. Partons du principe que seul l'OS installé sur le PC permette d'accéder à la puce.

Ici, la configuration de l'ordinateur est faite pour répondre à un besoin particulier : avoir son disque système chiffré, mais pouvoir redémarrer sans aucune intervention physique. La clé est donc stockée dans une puce, sans plus de sécurité que cela. N'importe qui ayant un accès à l'OS démarré plus un accès root peut lire la clé. N'importe qui ayant un accès physique à la machine peut lire la clé (pas forcément aussi facilement que l'exploit décrit ici).

Tout le monde sait que cette configuration n'est pas sécurisée, et met en garde contre elle.

Manque de bol, dans ce cas précis, hyper rare, la configuration par défaut de Dracut permet d'accéder encore plus aisément à la clé, il faut juste un canon à touche entrée (et donc les ports USB ne sont pas désactivés sur un ordinateur dont on ne surveille pas l'intégrité physique). Une fois que tu le sais, tu changes la configuration (une option sur la ligne du noyau dans le bootloader) et la « faille » disparait. Ou alors, tu désactives l'user input au démarrage, ce qui est probablement une bonne pratique.

C'est un problème, c'est bien que ça soit documenté, mais ce n'est ni une faille qui touche le noyau Linux ni une faille qui touche Systemd, c'est vraiment un problème de configuration par défaut, pour un cas limite qui n'avait pas encore été pris en compte.

Celui qui croit que son disque chiffré qui se déchiffre tout seul sans aucune intervention est sécurisé est bien naïf.

Ceci dit, il y a de toute manière un gros problème de culture du chiffrement des disques dans la communauté linux. Même btrfs ne le prend pas en charge, c'est assez fou.

avatar OTo | 

Pourtant lorsque le disque est utilisé sur un autre ordinateur, la clef doit être déverrouiller avec une passphrase. La clef n'est clairement pas dans la puce tpm mais au début de la partition. Il y a même une méthode pour la garder ailleurs ( une carte sd par exemple)
Ils n'ont pas dit quel système de chiffrement ils utilisaient ?
En tout cas luks ne fonctionne pas comme ça de mémoire.

avatar bozzo | 

Une question et une réflexion :
1- MacOS est-il impacté ? Pierre a déjà répondu : c’est non (jusqu’à ce qu’une autre faille soit trouvée…)
2- La conclusion de l’article est édifiante : la sécurité ne doit jamais être considérée comme parfaite. Raison pour laquelle je ne mets pas mes mdp ( de 1Password) sur un serveur en ligne, potentiellement accessible à des millions d’individus.

CONNEXION UTILISATEUR