1 points par GN⁺ 2023-08-25 | 1 commentaires | Partager sur WhatsApp
  • Si BitLocker sans mot de passe repose sur un TPM discret (discrete TPM), il est possible de capturer la clé en clair sur le bus SPI au moment où la VMK est transmise du TPM au CPU pendant le démarrage
  • L’expérience sur un Lenovo L13 a été menée avec un DSLogic Plus à moins de 100 dollars, mais ses limites d’échantillonnage étaient importantes pour lire de façon fiable un bus SPI à 33 MHz
  • Les données capturées doivent être interprétées dans l’ordre SPI → TIS → TPM 2.0, et la clé de 32 octets commençant par 5761 a été retrouvée dans le tampon de réponse TPM2_Unseal
  • Avec la clé extraite, la partition BitLocker est montée à l’aide de dislocker-fuse, puis sethc.exe est remplacé par cmd.exe afin d’obtenir un shell SYSTEM en appuyant cinq fois sur Maj
  • Un TPM discret seul offre difficilement une protection suffisante ; les vraies mesures de défense reposent sur l’utilisation de fTPM ou sur la configuration d’un PIN ou d’une phrase de passe BitLocker

BitLocker sans mot de passe et la faiblesse des TPM discrets

  • Une partition BitLocker est chiffrée avec la FVEK (Full Volume Encryption Key)
  • La FVEK est elle-même chiffrée avec la VMK (Volume Master Key), puis stockée sur le disque avec les données chiffrées
    • Cette structure permet la rotation des clés sans devoir rechiffrer tout le disque
  • La VMK est stockée dans le TPM
    • Le disque ne peut donc être déchiffré que lorsqu’il démarre sur cet ordinateur
    • Active Directory dispose d’un mécanisme de récupération
  • Le point vulnérable est le moment où le CPU demande au TPM de lui transmettre la VMK pour déchiffrer le disque
    • La VMK traverse le bus SPI entre le TPM et le CPU en clair
    • En capturant cette valeur, on peut l’utiliser pour déchiffrer le disque BitLocker

Matériel utilisé pour capturer les communications TPM

  • Le matériel de test est un analyseur logique DSLogic Plus
    • Il a été acheté en 2021 pour moins de 100 dollars, taxes et livraison comprises
  • Pour obtenir un signal stable, il faut une fréquence d’échantillonnage environ 3 à 4 fois supérieure à la fréquence du bus
    • Le bus SPI cible étant à 33 MHz, un échantillonnage d’au moins 100 MHz est nécessaire
    • Les spécifications du DSLogic Plus annoncent jusqu’à 400 MHz sur 16 canaux, mais les conditions d’utilisation réelles sont limitées
  • Le DSLogic Plus présente des limites nettes selon le mode de capture et le nombre de canaux
    • Quand le nombre de canaux capturés simultanément augmente, la fréquence d’échantillonnage baisse
    • Le mode stream permet de capturer de gros volumes de données pendant environ 1 minute, mais il est limité à 100 MHz sur 3 canaux
    • Le mode buffer permet bien un échantillonnage à 400 MHz, mais ne fonctionne que quelques millisecondes, ce qui n’est pas pratique pour cette tâche
  • Une option plus professionnelle est Saleae, environ 10 fois plus chère ; d’autres appareils sont disponibles dans la liste du matériel pris en charge par sigrok

Connexion à la carte et timing de capture

  • SPI étant un bus partagé, il n’est pas nécessaire de se connecter directement aux petites broches du TPM
    • S’il existe un composant plus grand connecté au même bus SPI, on peut se brancher dessus
    • Dans l’expérience, une flash SPI voisine a été identifiée et utilisée
    • Les marquages du composant permettaient de retrouver facilement la fiche technique et de confirmer son usage
  • Avec le DSLogic, seules 3 des lignes SPI ont été capturées en raison de la baisse de fréquence d’échantillonnage
    • Les lignes importantes sont CLK, MOSI et MISO
  • La tension de seuil doit être réglée à environ la moitié de la tension du signal
    • La tension mesurée du signal était de 3,3 V, et le seuil approprié était d’environ 1,6 V
  • La VMK recherchée est utilisée vers la fin de la phase POST
    • Sur le Lenovo L13, c’était juste après l’écran de démarrage, vers la 14e seconde d’un démarrage total d’environ 25 secondes
    • Il y avait déjà de l’activité SPI auparavant, mais il s’agissait surtout de lectures et de vérifications en début de démarrage, pas de communications TPM
    • On peut lancer la capture juste après le démarrage, ou attendre environ 7 secondes pour réduire les données inutiles

Interprétation SPI, TIS et TPM 2.0

  • Les signaux capturés doivent être interprétés en trois couches : SPI, TIS et TPM 2.0
  • SPI est un protocole simple, interprétable même avec un analyseur logique généraliste
    • Au moment où l’horloge passe de 0 à 1, l’état de la ligne de données devient la valeur du bit
    • Dans l’exemple, MOSI vaut 0 pendant 8 cycles d’horloge et s’interprète donc comme 0x00, tandis que MISO n’a que le premier bit activé et s’interprète comme 0x80
  • La partie la plus difficile a été TIS (TPM Interface Specification)
    • Aucun décodeur fonctionnel n’a été trouvé, il a donc fallu traiter cela manuellement
    • Les décodeurs libsigrok n’ont pas réussi à interpréter correctement les données, mais ont aidé à localiser approximativement les zones où avaient lieu les échanges TPM
    • L’échec peut venir de l’absence de Chip Select dans la capture, d’une horloge imprécise, de certains octets manquants ou d’une autre raison
  • Les requêtes envoyées du maître vers l’esclave suivent un motif répétitif
    • L’esclave envoie 80 pour signaler qu’il est prêt
    • Le maître envoie l’en-tête D4 00 24 et les octets TPM
    • L’esclave confirme la lecture avec 01 FF
  • Les réponses de l’esclave vers le maître dépendent de la configuration et de la lecture des registres
    • La trame d’exemple est le résultat de la lecture d’un octet à l’adresse D4 00 24
    • L’esclave démarre la transaction avec 80, puis la valeur intéressante 0x80 apparaît

Trouver la clé dans la réponse TPM2_Unseal

  • La commande TPM qui demande le retour de la clé est TPM2_Unseal
  • Pour isoler les transactions TPM, l’attention s’est portée sur les réponses de la ligne MISO plutôt que sur les trames de requête
    • Les données SPI brutes ont été filtrées avec le masque 80 00 00 00 01 .., en ne conservant que le dernier octet wildcard
    • Le début d’une transaction TPM est identifié par les en-têtes 80 01 ou 80 02
    • La réponse contenant la clé est une réponse d’authentification plus longue et commence par 80 02
  • Il y avait environ 10 ms de délai entre la commande Unseal et la réponse
    • L’en-tête 80 02 indique une session avec mot de passe, et diffère de l’en-tête en clair 80 01 utilisé par la plupart des requêtes
    • Le délai semble provenir de l’authentification de la requête et du traitement HMAC de la réponse
  • Les commandes et réponses TPM sont obtenues en réassemblant les octets un par un
    • L’outil tpmstream-web a été utilisé pour le décodage
    • Dans le tampon de réponse, la clé commence par 5761 et mesure 32 octets

Montage du disque et backdoor

  • Après avoir enregistré la clé extraite dans un fichier, elle est passée à dislocker-fuse pour monter la partition BitLocker
  • L’exemple de commande crée le fichier de clé, connecte /dev/sdd3 à ./mnt/, puis monte de nouveau dislocker-file dans ./mnt2/
  • La backdoor la plus simple consiste à remplacer le programme Sticky Keys de Windows par cmd.exe
    • Windows/System32/cmd.exe est copié vers Windows/System32/sethc.exe
    • Après avoir remis le disque dans le portable et redémarré, appuyer 5 fois sur la touche Maj permet d’obtenir un shell SYSTEM

Limites du matériel et mesures de défense

  • Le DSLogic est difficile à recommander pour cette tâche
    • De nombreuses captures ont échoué et ont dû être jetées
    • Un échantillonnage à 3 fois la vitesse du bus suffisait à peine à obtenir une horloge cohérente, et certains octets manquaient
  • Les limites du matériel ont obligé à comprendre le protocole en profondeur et à consacrer beaucoup de temps à l’interprétation manuelle des captures
    • Si c’est l’employeur qui achète le matériel, il semble préférable d’opter pour un analyseur logique professionnel
  • Contrairement à ce que l’on pourrait attendre, l’utilisation d’un TPM discret n’améliore pas la sécurité du système et peut créer une illusion de sécurité
  • Il existe deux mesures de défense
    • Utiliser fTPM
    • Si un TPM discret doit être utilisé, configurer un PIN ou une phrase de passe pour BitLocker
  • Microsoft recommande également de configurer un PIN ou une phrase de passe BitLocker pour les zones de l’organisation nécessitant un niveau plus élevé de protection des données

1 commentaires

 
GN⁺ 2023-08-25
Avis sur Hacker News
  • Tous les TPM prennent en charge les sessions chiffrées pour empêcher ce type d’attaque par homme du milieu. Il suffit d’utiliser TPM2_StartAuthSession et de demander le chiffrement pour chaque commande de session, mais BitLocker ne le fait pas : c’est une grave défaillance. Microsoft doit corriger cela.
    À titre de comparaison, systemd utilise des sessions chiffrées quand on emploie le chiffrement de disque LUKS avec un TPM : https://github.com/systemd/systemd/commit/acbb504eaf1be51572...

    • Ce n’est même pas vraiment une attaque par homme du milieu, c’est plutôt du sniffing passif.
      Je connais mal les TPM, donc je me demande comment fonctionnent les sessions authentifiées. Comment le système d’exploitation prouve-t-il son identité au TPM d’une manière qu’un attaquant ne puisse pas contrefaire dans une vraie attaque par homme du milieu ? Les secrets ou clés stockés côté système d’exploitation devraient, il me semble, être en clair sur le disque puisqu’on n’a pas encore la clé de chiffrement.
      Même si le système d’exploitation vérifiait d’une façon ou d’une autre l’identité du TPM et rendait impossible un contournement en modifiant quelques fichiers sur le disque, je ne vois pas ce qui empêcherait un attaquant d’exécuter la même routine dans un émulateur. À moins de l’intégrer à un environnement d’exécution sécurisé côté CPU, comme Intel ME ou SGX, il semble difficile d’obtenir une vraie sécurité avec cette approche, et dans ce cas le TPM ne servirait sans doute plus à grand-chose.
    • Je me demande si cet oubli est intentionnel, et si oui, pour quelle raison.
    • Les sessions authentifiées sont pratiquement inutiles si l’appareil n’est pas entièrement intégré. Il n’existe aucun moyen de garantir l’identité de la SRK, donc les attaques par homme du milieu restent possibles.
  • Il y a aussi un autre article de 2021.
    https://arstechnica.com/gadgets/2021/08/how-to-go-from-stole...
    Certains fabricants de PC portables proposent une option qui efface le TPM lorsqu’on ouvre la machine. Si vous avez ouvert votre portable pour voir s’il était possible d’ajouter de la RAM, mieux vaut espérer avoir accès à la clé de récupération BitLocker ou en avoir une sauvegarde.

    • Conserver une copie de la clé de récupération quelque part est une bonne pratique.
    • Il y a de fortes chances que cela repose sur un simple bouton de contact anti-effraction, facilement contournable en découpant le plastique à l’arrière. Je doute qu’ils aient installé un dispositif sophistiqué avec un câblage sur toute la coque.
    • Je n’ai jamais vu la détection d’intrusion dans le châssis activée par défaut sur un appareil grand public. C’était peut-être un modèle commandé en volume via un compte entreprise. Ces produits peuvent être livrés avec les réglages voulus par le service informatique.
    • Tu parles du cas où l’on dévisse le portable pour accéder à l’intérieur ?
      On pourrait peut-être aussi y accéder en découpant le plastique. Un peu comme la scène d’extraction du parasite dans Matrix.
    • La blague, aujourd’hui, c’est qu’il est difficile de trouver un portable avec de la RAM évolutive. C’est même le cas de certaines gammes ThinkPad ; les portables gaming le permettent souvent.
  • Rien de nouveau. La configuration par défaut ne demande pas de PIN, mais la documentation Microsoft décrit plusieurs attaques et recommande de configurer un PIN BitLocker pour les empêcher complètement. Comme le TPM bloque les tentatives par force brute, le PIN peut être assez faible.
    Exemple : https://learn.microsoft.com/en-us/windows/security/operating...

    • Fait intéressant, à ma connaissance Windows Defender bloque désormais par défaut les attaques d’élévation de privilèges fondées sur les fonctionnalités d’accessibilité. Behavior:Win32/AccessibilityEscalation
    • Je m’attendais à ce que le TPM efface le matériel de clé après X tentatives échouées ; ce n’est pas le cas ?
  • Avec BitLocker et ce type de chiffrement, je n’ai jamais vraiment compris cette architecture où la clé de déchiffrement est fournie automatiquement par le système. Si le portable entier est volé, quelle sécurité BitLocker apporte-t-il ? Du point de vue de l’attaquant, le système démarre simplement et demande le mot de passe du compte utilisateur.
    D’après ce que j’ai compris, cela protège mes données si l’on retire le disque dur du portable pour essayer de l’utiliser sur un autre système. À cause de cette incompréhension peut-être stupide, j’ai toujours configuré BitLocker avec un mot de passe à saisir manuellement, et j’ai toujours fait pareil avec LUKS. Est-ce complètement faux ?

    • L’attaquant doit contourner la connexion, extraire la clé de la mémoire du système ou, s’il y a un TPM physique, mener une attaque du type décrit dans cet article. C’est probablement bien plus sophistiqué qu’un voleur ordinaire qui vole un ordinateur coûteux pour se faire de l’argent rapidement.
      Le plus probable est qu’il efface le disque pour le revendre, pas qu’il tente réellement une attaque par cold boot. Cela dit, tout dépend du modèle de menace. Personnellement, la principale raison pour laquelle j’utilise le chiffrement complet du disque sur mes machines personnelles est de réduire la nécessité de détruire physiquement les supports de stockage au moment de s’en débarrasser.
      Même si un disque dur tombe en panne, je n’ai pas besoin de le démonter réellement pour m’assurer que mes données ont disparu. Mes appareils sont généralement en veille lorsque je suis à l’extérieur, donc si quelqu’un veut mener une attaque par cold boot, il peut de toute façon le faire.
    • Ce n’est pas totalement faux, mais tu passes peut-être à côté du risque que la clé puisse désormais être exportée.
      Comme tu le dis, si la clé de déchiffrement est fournie automatiquement au système, elle se trouve en RAM et est prête à être exportée par un attaquant puis réutilisée sur le disque chiffré. L’attaque par cold boot[1] est un vecteur d’attaque qui mérite d’être approfondi pour déterminer s’il correspond à ton modèle de menace.
      [1] https://en.wikipedia.org/wiki/Cold_boot_attack
    • Windows est censé empêcher quiconque d’accéder aux fichiers tant que le bon mot de passe de compte n’a pas été saisi. Sur cette machine, le disque est donc déchiffré, mais ensuite Windows bloque l’accès.
    • À vue de nez, si tu n’as pas défini de mot de passe pour le chiffrement du disque, il n’y a sans doute aucune protection dans ce scénario.
  • Si la clé passe par un bus partagé, cela signifie-t-il que n’importe quel composant du système peut l’intercepter aussi facilement que cet analyseur logique ? Ça ressemble à un cauchemar de sécurité de la chaîne d’approvisionnement

    • Le but de ce type de chiffrement est de permettre de vendre ou de réutiliser des disques durs séparés sans risque pour les données
      Si n’importe qui peut démarrer le portable et accéder au disque dur déchiffré, quelle différence cela fait-il de sniffer d’abord la clé ? Si l’on pouvait démarrer le portable, on avait de toute façon accès au résultat final
    • C’est partagé entre certains composants, mais absolument pas tous. De nos jours, le bus SPI ne relie généralement que la flash de démarrage, le TPM et le CPU lui-même, qui est le maître du bus
  • Si l’on veut que BitLocker protège contre le vol d’un portable, il faut de toute façon utiliser un mot de passe et désactiver la veille simple, par opposition à l’hibernation

    • Le premier point n’était pas totalement évident avant cet article. Le vol d’un portable est en pratique l’une des catégories les plus faibles[1] de menaces pour lesquelles le chiffrement complet du disque a du sens, et Windows a beaucoup mis en avant le fait qu’il ne demande rien d’autre que le mot de passe du compte utilisateur normal
      Alors, que fait réellement le matériel « de confiance » du TPM dans ce cas ? Les mesures de démarrage peuvent-elles aussi être falsifiées ? Et en plus, c’est d’une stupidité ahurissante. Pourquoi le matériau de clé circule-t-il en clair sur le bus ? Il n’y a même pas une sorte de protocole d’échange de clés
      [1] Il est aussi question ici d’effacement sécurisé, ce qui est un cas encore plus faible. Mais si le chiffrement complet du disque repose sur une EEPROM que l’on peut retirer de son socket et détruire physiquement, cela résout tout aussi efficacement cette partie
  • Je me demande quel logiciel a été utilisé pour transformer les signaux bruts en 0 et en 1. J’ai depuis longtemps un projet similaire : lire des données numériques sur des cassettes des années 80. J’ai obtenu des fichiers .wav des bandes d’assez bonne qualité, mais je n’ai toujours pas trouvé l’outil ou la bibliothèque adéquats pour les convertir en 0 et 1
    Bien sûr, le vrai plaisir commencera une fois qu’il faudra décoder les 0 et les 1. Je sais comment les bits sont encodés, c’est de la modulation par déplacement de fréquence[0]. Ce que j’ignore, c’est quoi utiliser pour décoder cela en un flux de bits que je puisse traiter ensuite
    [0] https://en.wikipedia.org/wiki/Frequency-shift_keying

    • Pour décoder de vieilles bandes FSK, il vaut la peine de regarder du côté du filtre de Goertzel glissant. C’est un filtre facile à implémenter, qui extrait l’amplitude d’un bin de fréquence donné dans une fenêtre glissante, et il est souvent mentionné dans la littérature sur le décodage DTMF
      On peut produire une sortie numérique en comparant les sorties d’une paire de ces filtres. On peut aussi utiliser une transformée de Fourier discrète glissante parcimonieuse, mais l’interpolation entre les bins de fréquence est plus fastidieuse, alors que le filtre de Goertzel s’en charge à votre place
    • C’est le vaste domaine du traitement numérique du signal, et c’est essentiellement ce que font un modem ou le convertisseur analogique-numérique d’une carte son
      Je ne connais pas d’algorithme ou de logiciel unique qui transforme n’importe quel signal brut en octets. Il faut déterminer quel type de modulation le signal utilise, puis trouver le décodeur correspondant ou l’écrire soi-même. En général, cela implique du filtrage et plusieurs algorithmes mathématiques, mais un programme de décodage de base est souvent assez court et simple
      C’est une compétence assez chouette à acquérir, parce que les mêmes techniques servent dans toutes sortes de domaines. Par exemple, après avoir appris un peu de DSP, beaucoup de possibilités se sont ouvertes en communications radio, en musique et sound design, ainsi qu’en traitement d’images et de vidéos
    • À lire l’article, cela semble simple. Quand l’horloge passe de l’état bas à l’état haut, le niveau courant de la ligne de données est la valeur du bit, et pour trouver le point de départ il suffit de chercher un 1 suivi de sept 0
    • Pulseview https://github.com/sigrokproject/pulseview et les autres parties du projet Sigrok https://github.com/sigrokproject devraient faire l’affaire
      Ou bien, puisque l’auteur mentionne DSlogic, il existe peut-être un fork de ces programmes fourni par le fabricant de cet analyseur logique
    • Les routines de chargement de cette époque se contentaient de compter les passages par zéro DC : X passages donnait un 0, Y passages donnait un 1, sans se soucier de la fréquence ni de l’amplitude
      Le signal brut passait généralement dans une bascule de Schmitt pour implémenter une hystérésis et obtenir des fronts stables. Cela compensait ainsi la polarité du signal de la bande et les variations du moteur
  • Il est ironique de lire que « utiliser un TPM physique séparé réduit en réalité la sécurité »
    Mon portable de 2015 n’avait pas de TPM physique, et quand j’ai essayé de l’activer, le message disait « Autoriser BitLocker sans TPM compatible (mot de passe ou clé de démarrage sur clé USB requis) », donc j’ai pensé que c’était moins sûr. Heureusement que je n’utilisais de toute façon pas BitLocker

  • C’est très drôle que le truc de cour de récré consistant à renommer l’invite de commandes en gestionnaire d’accessibilité, comme à l’époque de Windows Vista, fonctionne encore tel quel
    On imagine que Windows authentifierait quelque chose qui s’exécute avec des droits administrateur sans connexion, mais Windows semble être à 75 % du théâtre de sécurité, et les 25 % restants ressemblent aussi à une autre forme de théâtre

  • La même technique avait été décrite en 2021 :
    https://dolosgroup.io/blog/2021/7/9/from-stolen-laptop-to-in...