DEFCON 21. Les mots de passe ne suffisent pas à eux seuls, ou pourquoi le chiffrement du disque «casse» et comment y remédier? Partie 1Il y a des choses amusantes, telles que des compteurs à augmentation monotone, avec lesquelles vous pouvez contrôler l'activité de TMP, puis vérifier les valeurs reçues. Il existe une petite plage de mémoire non volatile qui peut être utilisée pour vos besoins, elle n'est pas aussi grande qu'un kilo-octet, mais elle peut également être utile. Un compteur d'horloge vous permet de déterminer depuis combien de temps le système fonctionne depuis le dernier démarrage. Il existe des commandes que vous pouvez donner à TMP pour qu'il fasse les choses en votre nom, notamment en effaçant votre propre mémoire si nécessaire.

Ensuite, nous voulons développer un protocole que l'utilisateur peut exécuter sur l'ordinateur pour s'assurer que l'ordinateur n'a pas été piraté, avant de s'authentifier sur l'ordinateur et de commencer à l'utiliser. Qu'est-ce qui est utile pour un tel protocole, on peut essayer de "sceller" dans les registres de configuration de la plateforme?
J'ai quelques suggestions: ce sont des jetons pour des mots de passe utilisateur uniques, une image ou une animation unique, par exemple, votre photo, quelque chose d'original qui n'est pas facile à trouver ailleurs. Vous pouvez également désactiver la «sortie vidéo» sur votre ordinateur lorsque vous êtes en demande d'authentification et en mode d'authentification.
Vous pouvez également vouloir «sceller» une partie de la clé de disque, et il y a plusieurs raisons pour lesquelles vous voulez le faire. Sous certaines hypothèses de sécurité, cela garantit que le système ne démarrera que dans une configuration logicielle approuvée que vous contrôlez en tant que propriétaire de l'ordinateur. En fin de compte, cela signifie que toute personne qui souhaite attaquer votre système doit le faire via le piratage TMP ou dans le bac à sable que vous avez créé pour elle. Bien sûr, il ne s'agit pas d'une protection cryptographique particulièrement solide, car vous n'aurez pas de protocole permettant à l'utilisateur de s'authentifier en toute sécurité avec le même niveau de sécurité qu'AES, par exemple. Mais si vous n'êtes pas en mesure d'organiser quelque chose comme le cryptage RSA dans votre propre tête, ce ne sera jamais parfait.

J'ai mentionné que dans TPM, il existe une commande d'auto-effacement qui peut être exécutée via un logiciel. Comme le TPM nécessite une certaine configuration du système, avant de révéler des «secrets», vous pouvez faire quelque chose d'intéressant, par exemple, l'autodestruction. Vous pouvez développer un logiciel et créer votre propre protocole pour limiter le nombre de démarrages de l'ordinateur défaillant, vous pouvez définir un délai après que le mot de passe a été affiché à l'écran pendant une certaine période de temps, ou limiter le nombre de tentatives de saisie d'un mot de passe incorrect.
Vous pouvez définir la limite de temps pour redémarrer l'ordinateur après le cycle de travail précédent, si l'ordinateur a été «gelé» pendant une ou deux semaines, restreindre l'accès à l'ordinateur pendant la période de temps où vous prévoyez de voyager à l'étranger - vous le bloquez pendant que vous êtes en route à débloquer au plus tôt à votre arrivée à l'hôtel.
Vous pouvez également faire des choses amusantes, par exemple, laisser de petits «canaris» sur un disque qui contient des données critiques du point de vue de la sécurité. En fait, il s'agira simplement de «vergetures», dont le déclenchement entraînera une modification des valeurs du compteur monotone à l'intérieur du TPM.
Vous pouvez également créer un mot de passe autodestructeur ou un code forcé pour exécuter automatiquement une commande de réinitialisation. Puisqu'un attaquant peut attaquer de deux manières: pirater un module de plateforme de confiance ou exécuter un logiciel malveillant, vous pouvez le forcer à respecter ces règles et à effectuer une auto-destruction efficace.
Le module de plateforme sécurisée est spécialement conçu pour être très difficile à copier, il n'est donc pas possible de le cloner simplement. De cette façon, vous pouvez utiliser des choses comme des compteurs monotones pour détecter toute attaque de disque de récupération ou de lecture. Et dès que la commande clear est exécutée dans TPM, pour un attaquant qui souhaite accéder à vos données, le jeu se termine.
Il y a quelques similitudes avec le système dont Jacob Appelbaum a discuté lors de la conférence du Chaos Communication Congress il y a plusieurs années, en 2005. Il a suggéré d'utiliser un serveur réseau distant pour mettre en œuvre bon nombre de ces options, mais a reconnu qu'il serait difficile à utiliser dans la pratique. Étant donné que TPM est un composant intégré du système, vous ne pouvez obtenir de nombreux avantages qu'avec le module TPM intégré et non avec le module situé sur le serveur distant. Une approche hybride est potentiellement possible. Vous pouvez configurer le système, par exemple, comme dans le service informatique, lorsque vous bloquez temporairement le système, et il ne peut devenir disponible qu'après l'avoir connecté au réseau, appelez votre administrateur informatique et il le déverrouillera. J'hésite à pousser la pile réseau au début du processus de démarrage, simplement parce qu'elle augmente considérablement la surface d'attaque. Mais c'est encore possible.
Je tiens à préciser qu'un attaquant ne peut que faire cela, en supposant qu'il ne sera pas en mesure de casser facilement le TPM. La diapositive suivante montre une image de la conception de la puce TPM, réalisée par Chris Tarnovsky avec un microscope. Chris a parlé à DefCon l'année dernière et a fait une présentation lors de la conférence BlackHat sur la sécurité du TPM il y a quelques années.
Il a vraiment fait un excellent travail pour comprendre à quel point il est difficile de casser cette chose. Il a énuméré les contre-mesures, a compris ce qu'il faudrait pour réellement casser cette chose, puis a testé la puce entière. Il y a des détecteurs de lumière, des grilles actives sur la carte TPM, divers schémas complètement fous sont mis en œuvre pour induire l'attaquant en erreur sur ce que fait réellement ce module.
Mais si vous dépensez suffisamment de temps et de ressources et soyez prudent, vous pouvez contourner la plupart des mesures de protection. Vous pouvez retirer la puce, la placer avec un microscope électronique dans un poste de travail, trouver où se trouve le bus contenant des données non cryptées et en extraire tous les secrets. Néanmoins, une telle attaque, même si vous vous y êtes soigneusement préparée et découvrez où elle se trouve à l'aide d'un microscope coûteux, nécessitera toujours du temps et des efforts pour retirer la protection physique de la puce et ne pas la «faire frire» accidentellement lors du démontage. .

Considérez une attaque de redémarrage. J'ai mentionné plus tôt que dans presque tous les cas, le TPM est une puce distincte sur la carte mère. Il s'agit d'un lien très bas dans la hiérarchie du système. Il ne fait pas partie du CPU, comme c'est le cas avec DRM dans les consoles vidéo. Par conséquent, si un pirate parvient à redémarrer le module de plateforme sécurisée, cela n'aura pas d'effet irréversible sur le système. C'est mauvais, car une telle attaque peut passer inaperçue pour vous.

Il s'agit généralement d'une puce située à l'extérieur du bus d'ordinateur LPC, qui est lui-même un bus obsolète et se trouve à l'extérieur du pont sud de la carte mère. Dans les systèmes modernes, les seuls éléments situés à la surface de la carte mère sont le TPM, le BIOS, les contrôleurs de clavier, mais je pense qu'en fait, les contrôleurs flexibles ne l'utilisent plus. Et si vous trouvez un moyen de redémarrer le bus avec un petit nombre de contacts, vous réinitialiserez le TPM à l'état de démarrage du «nouveau système d'exploitation». Vous perdrez probablement l'accès au clavier via le connecteur PS / 2, mais ce n'est pas un gros problème, mais vous pouvez lire la séquence de démarrage du TPM dans laquelle les données secrètes sont «scellées» sans réellement effectuer une séquence sûre, et vous pouvez l'utiliser pour extraire les données.
Plusieurs attaques tentent d'utiliser cette méthode. Si TPM utilise un ancien mode appelé racine statique de confiance pour la mesure (SRTM), vous pouvez le faire assez facilement. Je n'ai vu aucune recherche sur des attaques réussies contre de nouvelles technologies fiables pour la mise en œuvre des options d'activation de module Intel. Il est probablement encore possible de capturer le bus LPC et ce qu'il transmet au CPU est un domaine qui nécessite plus de recherches. Cela pourrait être une autre façon d'attaquer un module de plateforme de confiance.
Alors, regardons un diagramme de ce dont nous avons besoin pour avoir un système de démarrage à froid avec une configuration fiable. Il existe de nombreux composants assez vulnérables dans l'architecture PC.

Par exemple, dans le BIOS, vous pouvez capturer la table des vecteurs d'interruption et modifier les droits de lecture du disque, ou intercepter l'entrée du clavier, masquer toutes les fonctions des registres du processeur - il existe de nombreuses options d'attaque. À mon avis, vous n'avez pas besoin de faire un contrôle de sécurité en mode de démarrage réel du BIOS, il vous suffit de mesurer les performances du processus de démarrage.
Dès que vous entrez dans le mode «preboot», qui n'est en fait que votre système d'exploitation, tel que le disque RAM initial de Linux, vous commencez à exécuter votre protocole et à faire ces choses. Je veux dire, dès que vous commencez à utiliser les ressources du système d'exploitation, ce que quelqu'un fait au niveau du BIOS, fonctionnant avec la table d'interruption, ne vous affectera en aucune façon. Vous vous en foutez vraiment.
Vous pouvez vérifier les performances des registres. Par exemple, si vous travaillez avec le processeur Core i5, vous savez qu'il prendra en charge des éléments tels que le bit d'interdiction d'exécution, les registres de débogage et d'autres choses que les gens peuvent essayer de masquer dans les capacités de registre.
Cette diapositive montre à quoi devrait ressembler le diagramme système lorsqu'il est lancé dans une configuration fonctionnelle.

Il y avait un projet appelé BitVisor qui implémentait de nombreux aspects de la sécurité du chiffrement de disque en utilisant des registres de processeur et la protection IOMMU dans votre mémoire principale. Le problème est que BitVisor est un programme assez spécifique et rarement utilisé.
Xen est une sorte d'hyperviseur canonique open source qui participe à de nombreuses études de sécurité, au cours desquelles les gens sont convaincus que cela fonctionne. À mon avis, nous devons utiliser l'hyperviseur Xen comme interface matérielle de niveau nu, puis y ajouter le domaine d'administration Linux dom0 pour initialiser votre matériel.
Encore une fois, dans Xen, tous vos domaines virtualisés fonctionnent en mode non privilégié, vous n'avez donc pas réellement accès direct aux registres de débogage, c'est l'une des choses qui ont déjà été faites. Xen fait des hyper-appels qui vous donnent accès à de telles choses, mais vous pouvez désactiver cette fonctionnalité dans le logiciel.
Donc, l'approche que j'utilise est que nous plaçons la clé principale dans les registres de débogage. Nous distinguons les deux premiers registres de débogage pour stocker la clé AES 128 bits, qui est notre clé principale.

Cette chose ne quitte jamais les registres du processeur après avoir été entrée par un processus qui accepte les informations d'identification de l'utilisateur. Ensuite, nous utilisons les deux seconds registres comme registres spécifiques de la machine virtuelle - ils peuvent être utilisés comme registres de débogage ordinaires ou, comme dans ce cas, nous pouvons les utiliser pour crypter la mémoire principale. Dans ce cas particulier, nous devons disposer de plusieurs appareils directement connectés au domaine administratif. Il s'agit d'un processeur graphique, qui est un périphérique PCI, un clavier, un TPM - tout cela doit être directement accessible.
Vous ne pouvez pas utiliser la protection IOMMU pour ces choses, mais vous pouvez configurer cette protection pour un contrôleur de réseau, un contrôleur de stockage, des périphériques arbitraires sur le bus PCI, c'est-à -dire pour des composants qui n'ont pas accès au domaine administratif ou aux espaces mémoire de l'hyperviseur. Vous pouvez accéder à des choses comme un réseau en plaçant le contrôleur réseau dans une machine virtuelle Net VM dédiée. Ces éléments seront mappés à des périphériques spécifiques dont la sécurité IOMMU est configurée, de sorte qu'un tel périphérique ne peut accéder qu'à la zone de mémoire de cette machine virtuelle.
Vous pouvez faire de même avec le contrôleur de stockage, puis exécuter toutes les applications sur les machines virtuelles APP sans aucun accès direct au matériel. Ainsi, même si quelqu'un prend le contrôle de votre navigateur Web ou vous envoie un fichier PDF malveillant, il ne recevra rien qui pourrait sérieusement compromettre le chiffrement du disque.
Je ne peux pas prendre la responsabilité de cette conception architecturale, car en fait c'est la base d'un excellent projet appelé Qubes OS.

Ses développeurs décrivent ce projet comme une formation pragmatique de Xen, Linux et de plusieurs outils personnalisés pour implémenter bon nombre des choses dont je viens de parler. Qubes OS met en œuvre une politique d'invités non privilégiés et crée un environnement système unifié, de sorte qu'il semble que vous travaillez avec un seul système, mais en réalité, il s'agit d'un tas de différentes machines virtuelles «sous un même capot». J'utilise cette idée pour implémenter ma base de code.
Donc, l'outil que je développe est un code expérimental qui confirme ce concept, je l'ai appelé Phalanx. Il s'agit d'un Xen patché qui vous permet d'implémenter le chiffrement du disque en utilisant la technologie que j'ai décrite.

La clé principale se trouve dans les 2 premiers registres de débogage DR1-2, les deux seconds registres de débogage DR2-3 sont absolument illimités par domU. Pour des raisons de sécurité, les registres XMM 0-12, utilisés comme mémoire de fonctionnement, DR2-3 et la clé sont chiffrés lorsque la machine virtuelle change de contexte. J'ai également fait une implémentation de chiffrement très simple en utilisant le module du noyau Linux zRAM, car c'est un élément intégré qui fait presque tout sauf la cryptographie, donc pour le chiffrement, j'ai juste ajouté un très petit morceau de code par-dessus. Comme vous le savez, le code le plus sûr est le code que vous n'avez pas besoin d'écrire. Une bonne caractéristique de zRAM est qu'il vous fournit un tas de bits qui sont nécessaires pour implémenter en toute sécurité des choses comme le contre-mode AES.
Nous avons plusieurs exigences matérielles. Vous avez besoin d'un système qui prend en charge les nouvelles instructions AES, qui sont assez courantes, mais tous les systèmes ne les ont pas. Très probablement, si vous avez un processeur Intel i5 ou i7, ces instructions sont prises en charge.

Mais le reste du "matériel" doit être vérifié pour s'assurer qu'il prend en charge toutes les fonctions nécessaires. Les extensions matérielles de virtualisation HVE se sont répandues vers 2006. Il sera un peu plus difficile de trouver un ordinateur avec IOMMU. Cela n'est pas indiqué dans les spécifications de l'unité centrale, et vous devrez vous plonger dans ses caractéristiques, et aussi découvrir quelle est la différence entre VTX et VTD et ainsi de suite. Vous devrez donc peut-être chercher un système qui prend en charge ces éléments. Et vous avez bien sûr besoin d'un système avec un module de plateforme TPM de confiance, car sinon vous ne pourrez pas du tout mesurer les mesures de charge. Habituellement, vous regardez des ordinateurs de classe affaires où vous pouvez vérifier la disponibilité des composants nécessaires. Si vous trouvez Intel TXT avec la technologie Trusted Execution, il aura presque tout ce dont vous avez besoin. L'équipe Qubes sur son Wiki présente une excellente liste de compatibilité matérielle, qui répertorie les détails de nombreux systèmes qui implémentent de telles choses.
Donc, pour assurer la sécurité, nous avons plusieurs hypothèses sur certains composants du système. Le TPM, bien sûr, est un composant très important pour garantir l'intégrité du démarrage. Vous devez vous assurer qu'aucune porte dérobée ne peut réinitialiser la NVRAM, manipuler des compteurs monotones ou faire croire au système qu'il utilise un état de confiance, bien qu'en réalité ce ne soit pas le cas. Sur la base des commentaires de Tarnovsky, qui a effectué l'ingénierie inverse de ces puces, j'ai fixé une limite d'environ 12 heures d'accès exclusif à l'ordinateur, qui est nécessaire si vous souhaitez lancer une attaque TPM sur lui pour récupérer tous les secrets.

\
Il existe plusieurs hypothèses concernant le processeur, le contrôleur de mémoire et l'IOMMU, principalement en ce qui concerne le fait qu'ils ne sont pas piratés et mettent correctement en œuvre leurs fonctions. Certaines de ces hypothèses ne doivent pas être très strictes, car Intel peut facilement contourner certaines de ces choses, et nous n'avons aucun moyen de le savoir.
Certaines des hypothèses de sécurité concernent Xen. Il s'agit d'un logiciel qui possède en fait un système de sécurité très puissant, mais rien n'est parfait, et parfois des vulnérabilités surviennent même dans un système sécurisé. Étant donné que Xen a une position privilégiée dans le système, il est très important de s'assurer qu'il est dans un état sûr.
Ainsi, avec de telles hypothèses de sécurité, nous avons une sorte de base pour le modèle de menace. , , , , - . , . , .
, – . , , , , .

, , , . , , , — , , , .
— , . FDE , RAM.
, IOMMU, . TPM NVRAM, , – , , .
, , , 12 . , .
, , . , .
TPM — NVRAM, / LPC. TPM , , , , .

RAM . , RAM RAM, , , . , , Sony PS3.
, . , . , , , , , TPM . , , , , , RIPA – , .
. , , , . .
-, . OpenSSL , API, .
Qubes OS.

: , . .
– .
, , -. , , , . Merci de votre attention!
Merci de rester avec nous. Aimez-vous nos articles? Vous voulez voir des matériaux plus intéressants? Soutenez-nous en passant une commande ou en le recommandant à vos amis, une
réduction de 30% pour les utilisateurs Habr sur un analogue unique de serveurs d'entrée de gamme que nous avons inventés pour vous: Toute la vérité sur VPS (KVM) E5-2650 v4 (6 cœurs) 10 Go DDR4 240 Go SSD 1 Gbps à partir de 20 $ ou comment diviser le serveur? (les options sont disponibles avec RAID1 et RAID10, jusqu'à 24 cœurs et jusqu'à 40 Go de DDR4).
VPS (KVM) E5-2650 v4 (6 cœurs) 10 Go DDR4 240 Go SSD 1 Gbit / s jusqu'au printemps gratuitement lors du paiement pendant
six mois, vous pouvez commander
ici .
Dell R730xd 2 fois moins cher? Nous avons seulement
2 x Intel Dodeca-Core Xeon E5-2650v4 128 Go DDR4 6x480 Go SSD 1 Gbps 100 TV à partir de 249 $ aux Pays-Bas et aux États-Unis! Pour en savoir plus sur la
création d'un bâtiment d'infrastructure. classe utilisant des serveurs Dell R730xd E5-2650 v4 coûtant 9 000 euros pour un sou?