Patch Spectre-Meltdown : 10 CPU testés sur 11 jeux

Utiliser l’inexploitable

Meltdown et Spectre sont des failles exploitables par canal auxiliaire, lesquelles sont incroyablement difficiles à contrer. Une attaque par canal auxiliaire consiste à observer les caractéristiques d’un ordinateur, qu’il s’agisse du timing de certaines opérations ou même des séquences de bruit et lumière, puis utiliser les informations obtenues pour voler des données.

Naturellement, tout commence par les données. Un CPU charge les données depuis la mémoire principale vers ses registres en demandant les contenus d’une adresse virtuelle, laquelle est à son tour associée à une adresse physique. Tout en remplissant cette requête, le processeur vérifie les autorisations de cette adresse, lesquelles indiquent si le processus est en mesure d’accéder à l’adresse mémoire ou bien si le noyau du système d’exploitation est le seul à pouvoir l’atteindre. Le système accorde ou refuse les accès en conséquence. L’industrie estimait que cette technique permettait de répartir la mémoire de manière sécurisée dans des zones protégées, d’où le fait que les systèmes d’exploitation projettent automatiquement l’intégralité du noyau dans l’espace virtuel adressable de l’agencement mémoire au sein de l’espace utilisateur. Ceci veut dire que le processeur peut essayer d’atteindre toutes les adresses virtuelles si nécessaire, mais il expose alors l’intégralité de ces adresses virtuelles à l’espace utilisateur.

Le problème vient de l’exécution spéculative, un aspect de l’exécution dans le désordre qui vise à exploiter les ressources processeur de manière optimale. Les cœurs de processeur en pipeline traitent les instructions par phases, comme la récupération (fetch) d’instructions, le décodage d’instructions, l’exécution, l’accès mémoire et l’écriture différée (write-back) dans le registre. Les processeurs actuels divisent chacune de ces phases fondamentales en une vingtaine étapes, ce qui facilite leur montée en fréquence.

Les processeurs s’appuient sur de nombreux pipelines permettant un traitement parallèle des instructions, d’où le fait que l’on voie ci-dessous quatre couleurs différentes passer en simultané par les quatre étapes. Les branches d’instructions peuvent conduire le pipeline à passer à une autre séquence d’instructions, ce qui peut engendrer un blocage : en attendant les commandes de la mémoire, ce dernier ne traite pas de données durant plusieurs cycles.

Afin d’éviter cette situation, l’unité de prédiction de branche parie sur la branche qui sera prise par le processeur, spéculation qui est donc faite avant que le processeur ne traite l’instruction. Le CPU récupère alors l’instruction pour la branche prédite et l’exécute. On supprime ainsi la latence induite par l’arrêt du pipeline compte tenu du branchement, de même que le fait de récupérer l’instruction suivante depuis la mémoire.

Suivant l’emplacement de l’adresse (cache L1, L2, L3, DRAM), la récupération des données depuis la mémoire nécessite entre une dizaine et une centaine de nanosecondes. Ce temps de traitement est long par rapport aux latences des cycles processeur, lesquelles sont inférieures à la nanoseconde. Le fait d’avoir des instructions déjà prêtes accélère donc considérablement les opérations. Le processeur exécute les instructions de manière prédictive, sans savoir si cela est nécessaire, tout en sachant que la plupart des opérations sont utiles vu que les prédicteurs de branchement ont souvent un taux de succès supérieur à 90 %. Dans le cas d’une mauvaise prédiction, le processeur rejette tout simplement l’instruction et libère le pipeline.

Les chercheurs de Google ont trouvé une petite faiblesse dans la manière dont le système gère les accès au cache mémoire durant les exécutions spéculatives. Les contrôles de sécurité normaux assurant une séparation entre l’espace utilisateur et la mémoire du noyau ne sont pas suffisamment rapides lorsque les exécutions spéculatives accèdent à la mémoire cache. En conséquence, le processeur peut momentanément chercher et traiter de manière spéculative des données à partir d’une mémoire cache à laquelle il ne devrait pas pouvoir accéder. Le système finit par refuser les accès et les données sont rejetées, mais ce processus est trop lent, au point de constituer une vulnérabilité exploitable. Meltdown abuse de la prédiction de branchement pour exécuter un code contre le cache tout en mesurant le temps nécessaire à cela. Ceci lui permet de déterminer quelles données sont gardées en mémoire comme on peut le voir dans la courte vidéo ci-dessous.

Spectre Meltdown

Dans le cas de Meltdown, un pirate peut lire mots de passe, clés de chiffrement ou autres données depuis la mémoire protégée. Ces données pourraient également servir à prendre le contrôle du système, rendant ainsi toutes autres formes de protection inutiles. Le principal problème pour les centres de données est que l’exploitation de cette faille permet à un programme résident sur l’une des machines virtuelles d'accéder à la mémoire d’une autre machine virtuelle. En clair, un pirate pourrait louer un espace sur un cloud public et récupérer les données d’autres machines virtuelles sur le même serveur.

Cette vulnérabilité est exploitable par l’intermédiaire de JavaScript : il suffirait de visiter un site web néfaste pour rendre sa configuration vulnérable. Si les développeurs de navigateurs ont mis à jour leurs produits de manière à réduire la granularité temporelle, rien n’empêche les pirates d’utiliser un code normal via un malware ou d’autres moyens pour lancer une attaque.

A ce stade, les patches OS pour Meltdown consistent à ajouter une couche de contrôles durant les accès aux adresses mémoire. Cela plombe la latence des appels système et ralentit donc les performances lorsque les programmes émettent des appels au noyau. En revanche, les programmes qui tendent à se maintenir au niveau de l’espace utilisateur sont moins sérieusement touchés. Notons par ailleurs que les processeurs Intel sortis après Broadwell bénéficient de PCID (Post-Context Identifiers), ce qui leur permet de limiter les dégâts par rapport aux architectures précédentes.

Spectre est encore plus vicieux dans la mesure où cette faille peut exploiter un éventail bien plus large des capacités du moteur de branchement prédictif, afin d’accéder à la mémoire noyau ou aux données d’autres programmes. Certains chercheurs affirment que la correction intégrale de cette faille pourrait nécessiter une révision fondamentale de toutes les architectures processeur. Il est donc possible qu’il faille vivre avec des déclinaisons de cette faille dans un avenir prévisible. Fort heureusement, il est particulièrement difficile d’exploiter cette faille vu les connaissances nécessaires au niveau du processeur et des programmes cible. Intel comme les autres acteurs ont commencé à proposer des correctifs pour les variantes actuelles de Spectre, mais il est possible que l’on assiste au jeu du chat et de la souris dès lors que de nouvelles évolutions de Spectre verront le jour.

Posez une question dans la catégorie Les news : vos réactions du forum
Cette page n'accepte plus de commentaires
3 commentaires
Commenter depuis le forum
    Votre commentaire
  • Slashic
    Ce test aurait gagné en valeur à proposer des CPU de génération antérieure à Sky/Kaby lake.
  • Lleweilyn
    Article intéressant, merci pour le partage.
    Attendons la suite des tests sur des CPUs plus anciens !
  • pch57000
    ne pas oublier la "root cause" : faire plus de fric en n'intégrant pas les sécurités prévues et supposées faire partie physiquement du CPU, suivant le standard défini par... Intel !!!