web-dev-qa-db-fra.com

Utilisez TPM2.0 pour décrypter en toute sécurité le disque dur sous Linux - sans surveillance

J'ai passé plusieurs jours à essayer de comprendre comment déchiffrer en toute sécurité un disque dur sur un emplacement distant en utilisant TPM2.0 sous Linux. Je ne suis pas un expert en sécurité et c'est ma première bataille avec TPM2.0. J'ai beaucoup appris, mais j'ai encore des questions. Quelqu'un pourrait-il m'aider avec ceux-ci:

  • À l'heure actuelle, TrustedGRUB2 ne prend pas en charge TPM2.0, uniquement TPM1.2. Je n'ai pas pu trouver d'autres projets prenant en charge TPM2.0. Y a-t-il?
  • TPM2.0 peut-il arrêter le processus de démarrage?

Le problème que j'essaie de résoudre est tel que:

  • J'ai une partition / Chiffrée avec /boot Non chiffrée
  • L'ordinateur sera dans les locaux de quelqu'un d'autre, il ne devrait donc pas être possible de voler un disque dur et de lire les données
  • Le processus de démarrage doit être sans assistance - la machine ne doit pas décrypter le lecteur et démarrer elle-même si quelque chose a changé - Configuration du BIOS, initram fichier (/boot N'est pas crypté, donc jouer avec initram est possible)

J'ai pensé à cette solution:

  • La clé LUKS sera la valeur de PCR0
  • La valeur PCR0 devrait changer, si quelqu'un va changer quelque chose dans le BIOS, comme le réinitialiser (si quelqu'un va voler tout le PC, pas seulement le disque), activez le démarrage USB.
  • La valeur PCR0 utilisée pour décrypter le disque doit être sécurisée autant que le système d'exploitation en cours d'exécution est le seul moyen de lire ce PCR0 inchangé sans changer le BIOS est d'accéder au système d'exploitation, non?

Je pense que j'ai atteint un niveau auquel je peux poser une question légitime sur cette question, mais je ne peux pas moi-même évaluer davantage les implications ou les trous dans ce domaine.

5
Kamil

Sur un système Linux, vous pouvez utiliser la chape pour "lier" un volume LUKS au TPM2 et décrypter le système de fichiers racine automatiquement dans votre cas. Par exemple:

clevis luks bind -d /dev/sda3 tpm2 '{"pcr_ids":"0"}'

ou

clevis luks bind -d /dev/sda3 tpm2 '{"pcr_ids":"0,1"}'

Vous en aurez besoin pour être déjà crypté et avoir une phrase secrète, que la commande ci-dessus vous demandera. Vous pouvez laisser la phrase secrète en tant que sauvegarde ou la supprimer par la suite.

Je ne suis pas sûr d'utiliser la valeur PCR0 elle-même comme clé, car dans mon expérience limitée, cette valeur est assez facile d'accès. Je ne crois pas que c'est comme cela que le "scellement" des données contre un PCR fonctionne, mais je ne connais pas la relation exacte entre la valeur PCR et la valeur scellée.

J'ai utilisé une chape pour lier un volume LUKS au TPM2, et un déchiffrement automatique au démarrage quand c'est le système de fichiers racine. J'ai chiffré l'appareil pendant l'installation et j'ai réussi à le lier manuellement et dans un script kickstart. L'outil de chape a ajouté le support TPM2 début 2018 et l'a fait hors du repo "beta" RHEL lorsque RHEL 7.6 a été publié. Je n'ai obtenu que le déchiffrement automatique pour fonctionner sur le volume complet/dev/sd *, pas sur les volumes logiques. J'ai trouvé ce lien très utile: https://blog.dowhile0.org/2017/10/18/automatic-luks-volumes-unlocking-using-a-tpm2-chip/

Je crois que PCR0 est censé changer si le firmware du BIOS est modifié et que PCR1 change même si certains paramètres sont modifiés. Je ne connais pas les meilleurs PCR à choisir; mes informations proviennent d'un seul système et de la spécification PC Client définissant l'utilisation de la PCR à https://trustedcomputinggroup.org/wp-content/uploads/PC-ClientSpecific_Platform_Profile_for_TPM_2p0_Systems_v51.pdf (Section 2.3.4, Tableau 1 ).

1
Jaime