Meltdown et Spectre: les nouvelles failles de nos processeurs

 

Meltdown: « Rogue Data Cache Load »

 

La faille Meltdown touche la mémoire cache L1 et permet de lire des secteurs de mémoire normalement non

accessible par un autre programme.
Les puces Intel semblent être les seules concernées.

Pour rappel, la mémoire cache L1 contient des données fréquemment utilisées et accessibles rapidement.

L’exploitation est possible en abusant le système d’exécution spéculatif du processeur. En effet, l’exécution des instructions par le processeur n’est pas linéaire afin de gagner en performance.
Grâce à l’algoritme de Tomasulo, le système trie les instructions dans le pipe afin de permettre plusieurs micro instructions de plusieurs processus de s’executer sans avoir à attendre que la fin des instructions
du premier processus soit terminé. Si deux instructions sont en concurrence, la seconde sera exécutée en mode spéculatif et stocké dans le cache L1 pour être reprise ensuite. On appel cela l’éxecution Out-of-order.

; rcx = kernel address
; rbx = probe array
mov al, byte [rcx]
shl rax, 0xc
mov rbx, qword [rbx + rax]

  1. Pour mettre en oeuvre cette attaque, il faut une première instruction qui nous demande de déplacer les donnée d’une adresse kernel protégée dans une adresse accessible.
    Le contenu de cet espace mémoire sera lu mais comme l’accès est protégé, cela provoquera une exception et donc une interruption qui sera traduite
    en ajoutant un flag d’interruption.
    Dans l’exemple, nous déplaçons les byte de rcx dans al (octet faibles de rax).
  2. Puis, nous poussons la contenu de rax de 12 octet vers la gauche.
  3. Ensuite, on récupère la valeur (en utilisant le décalage comme paramètre) pour la copier dans rbx qui peut ensuite être lu.

Cet exemple explique seulement la faille Meltdown, mais pour être mise en oeuvre en situation réelle, il nous faut encore utiliser une technique basée sur le temps d’accès (race condition) au registre pour être sur que les instruction suivant le flag ont bien été exécutées en mode spéculatif.
De plus, il nous faudra créer une boucle itérative si l’on veux faire un dump complet de la mémoire et pas seulement un seul secteur.

 

Spectre

 

Cette attaque est aussi basée sur le système d’exécution spéculatif mais touche les puces Intel, ARM et AMD.
Elle permet de casser la frontière entre les applications lancée sur la machine cible. Elle ne permet pas d’avoir accès à l’intégralité de la mémoire tel qu’il est théoriquement possible avec Meltdown.

Lorsque le mode spéculatif est utilisé, les micro instructions sont exécutées dans le désordres et c’est le processeur qui tente de prédire quelle sera l’instruction suivante à exécuter.
Spectre permet de tromper le processeur afin de lui faire afficher les informations concernant une autre application ou l’application elle-même dans le cas d’une attaque du naviguateur par JavaScript.
Une autre variante permet de déborder de l’espace allouer au programme attaquant pour lire l’espace mémoire suivant.
Pour fonctionner, l’attaquant devra utiliser utiliser un code spécifique à l’architecture de la cible ou utiliser un intépreteur déjà disponible (JIT, eBPF)

En cas de recherche de mot de passe, il faudra être capable de reconnaitre ce qui est un mot de passe et pas un simple mot clé, et savoir à quelle application le relié (c’est bien de savoir que Dauph1 est un mot de passe mais encore faut-il savoir où l’utiliser) ou, dans le cas de Spectre, connaître l’adresse mémoire où seront enregistrées les informations.

 

Conclusion

 

Puisque cette faille touche le kernel, il faut donc que le programme contenant les données à dérober soit en exécution ou que certaines de ses données soit toujours présente dans le cache au moment de l’attaque.
Il faudra aussi de bonne connaissance en forensic et en assembleur pour analyser les données récupérées.
Autant dire que la complexité de ces attaques fait qu’elles ne sont pas accessibles au premier venu.
Ces deux failles sont pour l’instant seulement valable localement, ce qui veux dire qu’il faut de toute façon un vecteur pour infecter la machine cible. Une fois la machine cible infiltrée, il est plus simple pour un attaquant lambda
d’utiliser un exploit d’élévation de privilège pour avoir accès à toute les mémoires et pas seulement la mémoire de travail.
Malgré la complexité et la difficulté à élaborer une outil permettant d’affecter toute les architectures, Spectre peut être la base pour élaborer des attaques très puissantes (spécialement sur des machines virtuelles qui utilisent beaucoup de mémoires virtuelles pour fonctionner, Spectre peut même s’attaquer à l’hyperviseur),
si l’on dispose des moyens suffisants pour mettre en oeuvre et approfondir d’autre variantes. L’un des grand avantages de l’utilisation des ces attaques est qu’elle sont complètement invisible par la machine cible. C’est d’ailleurs pour cela qu’il est impossible de dire si ces failles ont déjà été exploitées.

Afin de se protéger de Meltdown, il existe des patch et mise à jour permettant de diminuer la probabilité de résultat pour l’attaquant (seulement au niveau logiciel).
Pour Spectre, il n’est pas possible de combler la faille, mais un bon antivirus à jour devrait bloquer le code malicieux avant sont déploiement sur la machine cible.
Vous trouverez ci-dessous un lien vers les patch et advisory

 

 

Tomasulo : https://fr.wikipedia.org/wiki/Algorithme_de_Tomasulo
Advisory and patch : https://www.bleepingcomputer.com/news/security/list-of-meltdown-and-spectre-vulnerability-advisories-patches-and-updates/
Meltdown : https://meltdownattack.com/meltdown.pdf
Google Zero Project : https://googleprojectzero.blogspot.ch/2018/01/reading-privileged-memory-with-side.html
Spectre : https://spectreattack.com/spectre.pdf
PoC Spectre : https://gist.github.com/ErikAugust/724d4a969fb2c6ae1bbd7b2a9e3d4bb6
PoC Meltdown : https://github.com/paboldin/meltdown-exploit/blob/master/meltdown.c

Categories: Informatique

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

3 × cinq =

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.