Réponse courte: Non, c'est toujours très important
La plupart des gens ont publié des réponses qui incluent l'ingénierie sociale, ou des attaques qui sont nécessairement interactives (comme des enregistreurs de frappe ou des variantes de l'attaque de la méchante femme de chambre). Ceux-ci peuvent être contournés à l'aide de techniques d'attestation à distance sécurisées (impliquant généralement Intel TXT ou SGX). Comme la plupart d'entre eux sont interactifs et que de nombreux adversaires ne peuvent pas se permettre d'attendre que quelqu'un se connecte au serveur, je vais fournir quelques exemples qui peuvent être utilisés pour compromettre un serveur chiffré à tout moment, ainsi que des mesures d'atténuation. Notez que ce sera centré sur Linux, mais les points matériels sont indépendants du système d'exploitation.
Récupération directe de la mémoire à l'aide d'attaques de démarrage à froid
La méthode que tout le monde connaît , une attaque de démarrage à froid, peut récupérer les clés de chiffrement sur la plupart des matériels avec une fiabilité modérée avec deux méthodes. La première consiste à refroidir la mémoire à l'aide d'un spray réfrigérant, à la retirer physiquement et à la placer dans une nouvelle carte mère pour lire le contenu. La seconde consiste à conserver la mémoire, éventuellement à la refroidir pour améliorer la fiabilité et à redémarrer le système dans un système d'exploitation malveillant et léger, un chargeur de démarrage ou, dans au moins un cas connu, un BIOS personnalisé, qui lit et vide la mémoire sur un non -moyen volatil.
L'attaque de démarrage à froid fonctionne parce que la mémoire informatique moderne de haute capacité, appelée DRAM, stocke les données dans des condensateurs qui doivent être rafraîchis à un taux élevé lorsqu'ils stockent une charge, ou ils ' Je perdrai leur charge. Ils sont généralement actualisés toutes les 64 ms pour plus de fiabilité, mais même sans alimentation, beaucoup d'entre eux conservent leurs données pendant une courte période.
Il existe aujourd'hui trois principaux types de mémoire couramment utilisés dans les serveurs: DDR2, DDR3 et DDR4. La DDR2 peut parfois conserver les données pendant 30 secondes ou plus sans alimentation. La DDR3 et la DDR4 perdront de l'énergie en quelques secondes, ce qui les rendra beaucoup plus difficiles à monter contre des attaques à démarrage à froid. De plus, la mémoire DDR3 et DDR4 brouillera leur contenu pour réduire les interférences électriques, mais l'algorithme qu'il utilise est un LFSR, qui n'est pas cryptographiquement sécurisé et est facile à casser.
Atténuer la première méthode est aussi simple que s'assurer que les modules DIMM ne peuvent pas être retirés. Cela peut être fait en utilisant correctement une résine époxy anti-effraction. S'il est utilisé correctement, toute tentative de suppression détruira la mémoire dans le processus. Cela peut ne pas être possible si vous utilisez un serveur qui ne vous appartient pas physiquement. Atténuer la deuxième méthode nécessite l'effacement de la mémoire de votre BIOS avant le démarrage. La désactivation du démarrage rapide peut parfois entraîner l'effacement de la mémoire dans le cadre du POST. La mémoire ECC nécessite également souvent d'être initialisée par le BIOS avant utilisation. Cependant, au moins une fois, une attaque de démarrage à froid de ce type impliquait une version personnalisée de démarrage à froid. BootGuard, une fonctionnalité sur de nombreux nouveaux systèmes Intel, empêchera l'installation de BIOS personnalisés, mais un adversaire particulièrement avancé pourra toujours le contourner.
Il existe encore une dernière méthode pour annuler le démarrage à froid attaque, qui fonctionne contre les deux types d'attaques de démarrage à froid, et qui consiste à ne jamais permettre à la clé de chiffrement d'entrer en contact avec la mémoire. C'est exactement ce que fait le patch du noyau TRESOR pour Linux, en plaçant les clés dans les registres de débogage x86. Cela ne rend pas votre ordinateur à l'abri de toutes les attaques impliquant un accès physique, cela empêche uniquement les attaques de démarrage à froid de lire vos clés de chiffrement. Les données de votre disque qui restent par exemple dans les tampons du système de fichiers seront toujours récupérables.
Lecture et écriture en mémoire à l'aide d'attaques DMA
Tout périphérique connecté au PCH (PCI, PCIe, LPC) a le potentiel de lire et d'écrire directement dans la mémoire via DMA, ou accès direct à la mémoire, des attaques, également appelées master bus mal (un périphérique qui est maître de bus est autorisé pour envoyer des requêtes DMA, entre autres). Le DMA est une technique qui permet aux périphériques de lire et d'écrire de manière asynchrone dans la mémoire, sans avoir à impliquer le processeur, pour de meilleures performances. Malheureusement, si un tel périphérique est détourné ou inséré de manière malveillante, il peut lire et écrire dans toute la mémoire et le processeur ne peut rien y faire. Le processeur peut dire si l'appareil a des capacités DMA, mais s'il est activé, le processeur fait confiance à l'appareil, lui faisant confiance pour ne pas le trahir.
Je connais trois types d'attaques DMA. Le premier est le branchement à chaud PCI / PCIe, qui consiste à placer un périphérique malveillant dans un emplacement sur la carte mère et à laisser le système d'exploitation le configurer automatiquement. Ceci est simple à atténuer, en désactivant le branchement à chaud. Cela peut nécessiter une modification de la configuration du noyau. Le deuxième type d'attaque consiste à détourner un périphérique de confiance existant qui est le maître de bus et à l'utiliser pour lire ou écrire dans la mémoire. Cela peut être fait soit en exploitant le micrologiciel exécuté sur l'appareil, soit en détournant le matériel via des interfaces de débogage exposées, en reflétant le micrologiciel et en déclenchant une réinitialisation à froid du processeur de l'appareil, etc. Le dernier type, qui est beaucoup moins connu, est une attaque sur le LPC. Le LPC est l'équivalent du bus ISA archaïque sur du matériel moderne. Il gère les anciens périphériques à faible vitesse. Cependant, il peut également être rendu maître de bus en affirmant l'interruption LDRQ #. Toutes les cartes mères ne l'exposent pas, et bien que ce soit purement anecdotique, un développeur Intel que j'ai rencontré a déclaré qu'il n'avait jamais vu un ordinateur portable exposant LDRQ #. Cela peut être différent pour les serveurs. Malheureusement, la fiche technique Intel PCH spécifie que le bit maître de bus du LPC est en lecture seule, forcé. Si votre système prend en charge LDRQ #, l'atténuation des attaques DMA basées sur LPC doit être effectuée d'une autre manière.
Il existe deux façons d'atténuer les attaques DMA. Le premier tire parti du fait que, alors que DMA fonctionne indépendamment du CPU, l'activation du DMA nécessite toujours que le CPU lui donne l'autorisation en activant le bit maître du bus. Un pilote, qui n'est qu'un logiciel, peut refuser un périphérique qui souhaite cette autorisation. Si le périphérique n'est pas autorisé, il ne peut pas lancer DMA. Par exemple, si vous n'utilisez pas le pilote Firewire ou que vous utilisez le pilote Firewire plus moderne dont le DMA est désactivé par défaut, le périphérique Firewire PCI aura DMA désactivé (le bit maître de bus sera désactivé). Cette technique a ses inconvénients, car certains appareils nécessitent un DMA pour fonctionner. Les cartes d'interface réseau, les cartes graphiques, etc. nécessitent DMA, ou elles seraient si lentes qu'elles seraient inutilisables. Bien que vous n'ayez pas à vous soucier d'un nouveau, malveillant étant branché, un exploit contre la carte, ou une attaque contre le matériel (le contrôlant à l'aide d'interfaces de débogage, par exemple) peut utiliser ce privilège contre l'hôte.
L'autre atténuation consiste à utiliser une fonctionnalité dans la plupart des processeurs modernes, l'IOMMU (la fonctionnalité est nommée VT-d sur les processeurs Intel). L'IOMMU est capable de filtrer efficacement tous les accès DMA, sans le désactiver purement et simplement. Cela s'appelle DMAR ou remappage DMA. La spécification ACPI spécifie un blob de données appelé la table DMAR qui est stockée dans le BIOS que l'IOMMU utilisera pour isoler les périphériques compatibles DMA individuels, redirigeant tout accès direct à la mémoire vers une zone de mémoire spécifique et sûre. Sur de nombreux systèmes Linux, vous devez l'activer en démarrant avec le paramètre intel_iommu = on
(pour Intel), ou amd_iommu = force
(pour AMD). Ces options ne sont pas activées par défaut car de nombreux BIOS ont une table DMAR cassée, empêchant le système de démarrer ou causant des problèmes. Vérifiez si votre système utilise l'IOMMU pour isoler les périphériques si dmesg | grep -e IOMMU -e DMAR
affiche la Technologie de virtualisation Intel (R) pour les E / S dirigées
(évidemment spécifique à Intel) dans la sortie, et plusieurs périphériques sont référencés.
Piratage du processeur lui-même à l'aide de JTAG
JTAG est un groupe de normes spécifiant des interfaces et des protocoles pour le débogage matériel. Un standard, intitulé IEEE 1149.1, permet de mettre un CPU dans un mode de débogage de bas niveau simplement en attachant une sonde JTAG sur un en-tête sur la carte mère. Les systèmes Intel utilisent un en-tête propriétaire modifié, appelé ITP-XDP. Si quelqu'un veut attaquer un serveur chiffré avec JTAG, il doit connecter la sonde à l'en-tête XDP. Même si l'en-tête n'est pas clairement visible, les traces seront toujours là, et seront toujours actives et viables. Dès que la sonde est connectée, tous les cœurs du processeur s'arrêteront, et l'attaquant pourra lire le contenu de tous les registres, lire toute la mémoire, écrire dans n'importe quel registre, écrire dans n'importe quelle mémoire, faire défiler l'instruction CPU par instruction, changer le pointeur d'instructions, réactiver et mettre en pause le processeur, et bien plus encore. En bref, JTAG permet à un attaquant de prendre le contrôle complet du CPU, le contrôlant comme une marionnette, et il ne peut rien y faire.
Il n'y a aucun moyen d'atténuer une attaque JTAG dans un logiciel. Essentiellement, toutes les cartes mères ont des en-têtes XDP. Un moyen possible de l'atténuer, si vous avez un accès physique au serveur et êtes autorisé à le modifier de manière permanente (par exemple colo, hébergement à la maison, etc.), vous pouvez utiliser une résine époxy forte et la placer sur l'en-tête XDP. Cette technique peut être encore améliorée en plaçant une épaisse plaque de métal sur l'époxy, empêchant les forets fins de casser des trous dans l'époxy. On m'a dit qu'il n'y avait pas de souci pour un attaquant de percer le fond, car il y a tellement de couches de traces dans une carte mère moderne que cela détruirait le système. Je ne sais pas si cela entraînerait l'arrêt du système ou empêcherait JTAG de fonctionner, il est donc préférable de mettre de l'époxy et une feuille de métal des deux côtés.
Exotique, attaques extrêmement difficiles ou théoriques
Il y a le problème bien connu des attaques par canal latéral via l'analyse de puissance et l'analyse thermique. Cela peut être possible lorsque le programme effectuant le chiffrement / déchiffrement n'utilise pas d'opérations à temps constant là où elles sont critiques, ce qui entraîne des retards détectables ou de grandes consommations d'énergie qui se produisent à des moments différents en fonction de la valeur de la clé. Il est peu probable que les pilotes de cryptographie modernes aient ce problème, et l'accélération matérielle comme AES-NI rend cela encore moins problématique. Les mesures d'atténuation incluent l'utilisation de chiffrements qui prennent en charge l'accélération matérielle, comme AES sur du matériel approprié, l'utilisation de chiffrements qui ont de petites boîtes S et peuvent être optimisés en utilisant le découpage de bits, comme Serpent, ou en utilisant la séparation rouge / noir pour un EMSEC approprié (recherchez le SDIP-27 OTAN pour les spécifications. En général, il vous suffit d'acheter un ordinateur approuvé.
Les analyseurs de bus logiques peuvent être connectés directement à toute trace ou fil électrique exposé, sans jamais avoir besoin de couper le circuit. C'est possible avec la DRAM, mais à mesure que les vitesses augmentent, cela devient de plus en plus difficile. PCIe utilise des techniques pour améliorer la vitesse qui entraînent des phénomènes électriques très étranges que les analyseurs logiques n'aiment pas du tout (une voie PCIe n'a pas une séparation nette entre hi et lo, car les données saignent dans les lignes adjacentes et les signaux électriques font écho dans les deux sens). C'est peut-être possible, mais ce serait difficile à faire. Si votre concentrateur racine PCI prend en charge AER, rapport d'erreurs, vous pouvez configurer votre système pour désactiver immédiatement le maître de bus de tout périphérique qui signale des erreurs corrigibles, plutôt que de continuer, comme c'est le cas par défaut. Cette technique rapide peut détecter une tentative d'insertion d'un analyseur de bus logique dans un périphérique PCIe. Parce qu'il s'agit d'une attaque tellement théorique et exotique qui peut très bien ne pas être possible de toute façon, et que l'atténuation n'est pas testée (simplement une idée qui est née lors d'une conversation que j'ai eue avec un chercheur), j'explique simplement le concept, pas le étapes pour le faire. Il est probable que vous n'ayez pas à vous soucier de la lecture des données PCIe de toute façon, car il est peu probable qu'elles contiennent la clé, mais je l'inclus par souci d'exhaustivité.
Enfin, et de manière irréaliste, un attaquant extrêmement avancé pourrait déclencher des bogues dans le CPU en exploitant les bizarreries de synchronisation et de puissance. Ces attaques (appelées attaques glitching) sont couramment utilisées pour exploiter de simples microcontrôleurs tels que les Atmel 8051 bon marché, mais ce sont de nombreux ordres de grandeur moins bien testés que les processeurs Intel. Le glitching peut impliquer le réglage de l'horloge ou des horloges à des valeurs invalides ou instables, la mise hors tension des spécifications, la violation des spécifications de synchronisation, etc. Dans les cas particulièrement avancés, le glitching peut impliquer une technique appelée injection de défaut laser, où le processeur est décapé (le haut est soigneusement dissous ou brûlés), et un laser contrôlé avec précision est utilisé pour déclencher une activité électrique dans des zones spécifiques, induisant des défauts. Le but final des pépins est de provoquer une erreur qui change l'état interne du périphérique en un état plus convivial pour les attaquants, comme celui où le maître de bus peut être activé, ou les restrictions IOMMU peuvent être rompues. Les exemples du monde réel avec les microcontrôleurs 8051 tentent souvent de désactiver les bits de verrouillage de sécurité, tels que le bit de lecture du micrologiciel. Ils réussissent presque toujours sur des appareils aussi simples.
Tout atténuer, du moins en théorie
Enfin, il existe une atténuation commerciale qui protège de tout sauf de l'attaque JTAG, et c'est PrivateCore vCage. C'est une solution de virtualisation qui crypte toute la mémoire et place le noyau dans le cache du processeur. Les attaques DMA sont fondamentalement empêchées et le TCB (Trusted Computing Base) est entièrement réduit au CPU lui-même, ce qui signifie que peu importe ce qui est détourné, seul le CPU doit être fiable. En théorie, même les attaques JTAG pourraient être vaincues si le système exécutait tout le code non approuvé dans une enclave SGX. Cela fonctionnerait car le mode sonde, le mode CPU dans lequel JTAG place le système, ne peut pas être utilisé dans le contexte d'une enclave SGX. Malheureusement, cette implémentation est une source fermée, et le service est très cher, donc c'est plus intéressant d'un point de vue académique.