SecurityInsider
Le blog des experts sécurité Wavestone

FOCUS : NetSpectre


FOCUS : NetSpectre


Origine et découverte de la faille

NetSpectre est une attaque destinée à extraire de l’information à travers le réseau. Deux attaques exploitables localement et basées sur le même principe avaient été rendues publiques en janvier 2018 et ont été un événement majeur pour la communauté de sécurité informatique. Ces attaques utilisent des vulnérabilités matérielles, rares et difficiles à corriger. Ces deux attaques s’appellent Meltdown et Spectre.
NetSpectre n’est autre que Spectre utilisable depuis une machine distante. Elle a été découverte en mars 2018 et dévoilée en juillet 2018 par une équipe de chercheurs suisses.

Fonctionnement de NetSpectre :

Avant d’expliquer NetSpectre, nous allons rappeler le fonctionnement des attaques Meltdown et Spectre.

Rappels sur les processeurs

Il est utile de rappeler quelques fonctionnalités liées aux processeurs. Pour améliorer les performances de calculs, trois techniques implémentées au niveau matériel existent : l’utilisation de mémoire cache, l'exécution out-of-order et l'exécution spéculative.
Tout d’abord, la mémoire cache est un type de mémoire utilisé pour accélérer l’accès à une zone mémoire mais qui dispose d’une taille restreinte. Située très proche des unités de calcul du processeur, elles améliorent grandement le temps de traitement des informations.
Ensuite, l'exécution out-of-order est une technique qui permet l'exécution des instructions en parallèle et donc d'accélérer les calculs. L'utilisation de cette technique entraîne l'exécution des instructions dans le désordre.
Enfin la troisième technique est l'exécution spéculative. Toujours dans l’optique d’optimiser le temps de traitement, le processeur va tenter de faire des choix par lui-même lorsqu’il arrive à des conditions dans les instructions. Les branches choisies lors de ces conditions sont enregistrées dans le BTB (Branch Target Buffer), permettant alors au processeur de deviner la branche à choisir lors de la prochaine apparition de la condition.
Ces trois techniques sont à l’origine des attaques Meltdown et Spectre.

Meltdown et Spectre

Meltdown exploite l'exécution out-of-order pour accéder à la mémoire du noyau, ce qui est normalement interdit. C’est en exploitant une vulnérabilité dans la parallélisation que l’attaque permet de récupérer des informations contenues dans l’espace d’adressage du noyau. L’attaque se découpe en deux parties : manipulation du cache puis récupération de données habituellement inaccessibles via les temps d'accès en utilisant des techniques telles que le flush-and-reload. Cette technique consiste à supprimer une entrée du cache correspondant à une adresse mémoire X accessible au processus. Ensuite, l'attaque vise choisir d'accéder ou non à l'adresse X en fonction d'une valeur Y d'une zone mémoire normalement interdite en lecture mais lue de manière spéculative par le processeur. Suivant le temps d'accès à l'adresse X, il est possible d'en déduire sa présence ou non dans le cache et donc de l'information sur la valeur Y de la zone interdite.

Spectre utilise l'exécution spéculative, et en particulier la prédiction de branche, pour lire des valeurs mémoire d’autres processus. L’idée de Spectre est d’entraîner le processeur à suivre un certain chemin lorsqu’une condition doit être vérifiée : c'est la prédiction de branche. L'attaque profite ensuite de cette prise de décision entraînée pour que le processeur prenne la branche voulue même si la condition n’est plus respectée. Ainsi, en cas de mauvaise prédiction, le code est tout de même exécuté et le cache modifié en conséquence. Ainsi il est possible de connaître des valeurs en mémoire d’un autre processus en exploitant les accès au cache.

NetSpectre

NetSpectre est la version "à distance" de Spectre. Contrairement à Spectre et Meltdown, elle ne se découpe pas en deux parties comme nous le verrons par la suite. De plus elle ne se base pas sur la technique d’exfiltration par canaux auxiliaires "flush and reload" mais sur "evict and reload", une différence que nous allons expliquer. Ces techniques permettent, on le rappelle, d'exfiltrer des données vers la mémoire cache et de déduire des valeurs inaccessibles via les temps d’accès. NetSpectre propose aussi une autre variante basée sur le jeu d’instructions AVX2, extension d’AVX (Advanced Vector Extensions) des processeurs Intel et AMD. AVX offre de nouvelles fonctionnalités, de nouvelles instructions et un nouveau schéma de codage dans le but d’améliorer les performances.

Contrairement à Spectre, NetSpectre ne contrôle aucun binaire sur la machine cible et ne peut donc accéder ni à la mémoire ni au cache. Pour faire face à ce problème, l’idée est d’envoyer un grand nombre de paquets à une victime possédant une interface réseau accessible. Ces paquets ont pour but de provoquer continuellement un mauvais apprentissage du processeur pour contrôler la prédiction de branche.
Cet entraînement se fait par l’envoi de paquets valides et non valides à la cible. Ces paquets doivent contenir deux parties exécutables appelés "gadgets" : leak gadget et transmit gadget. Ces gadgets sont des morceaux de code présents dans des pilotes réseau ou encore l’implémentation des piles et services réseau présents dans la majorité des équipements réseau et serveurs.
Le leak gadget permet d’effectuer une exécution spéculative exploitable alors que le transmit gadget a pour objectif de dévoiler les différences des états micro-architecturaux à travers le réseau. Un état architectural ou micro-architectural est l’ensemble des états des registres du processeur ou des unités d'exécution.

Comme vu ci-dessus, il existe deux variantes du mode fonctionnement de NetSpectre. Ces deux variantes sont les deux types de canaux auxiliaires utilisés par NetSpectre.
La première est très similaire à Spectre : elle se base aussi sur l'exécution spéculative pour mettre des données en cache. Cependant elle n’utilise pas une technique "flush and reload" mais une technique "evict and reload". Le principe reste le même sauf qu’au lieu de supprimer une entrée du cache, il s'agit de la remplacer par nouvelle entrée.
La seconde est totalement nouvelle et n’utilise pas le cache. Elle se base sur le comportement des instructions AVX2 qui sont plus performantes mais consomment beaucoup d’énergie. Le fonctionnement de l'attaque est assez complexe mais il offre un gain de performance notable par rapport à la première variante. En effet les débits maximums annoncés sont de 15 bits par heure pour la variante "evict and reload" et 60 bits par heure pour la variante AVX2.

NetSpectre permet donc de lire des informations depuis la mémoire distante grâce à la mesure du temps de traitement des gadgets. Cependant le temps de réponse étant soumis aux contraintes des réseaux (bruit et latence), il est difficile d’avoir des informations précises. Pour remédier à ce problème, les chercheurs multiplient de façon conséquente le nombre de requêtes pour chaque opération. Ainsi le calcul de la moyenne du temps de réponse permet tout de même d’obtenir un résultat exploitable.
La mise en place d’une telle attaque est d’un niveau de complexité très avancé et nécessite de connaître la zone mémoire que l’on souhaite exfiltrer. Si elle est maîtrisée, elle peut se révéler d’une efficacité redoutable même si elle peut, théoriquement, être détectée assez facilement.

Impacts de NetSpectre

NetSpectre pourrait permettre à un attaquant d’extraire jusqu’à 15 bits par heure dans le cas de la variante utilisant le cache et jusqu’à 60 bits par heure dans le cas de la variante se basant sur AVX2. Même si ces débits sont très faibles, ils permettent néanmoins l’extraction de secrets tels que des clefs de chiffrement, des mots de passe ou autres clefs de sécurité dans un temps raisonnable. A l’heure actuelle, aucune attaque NetSpectre n’a été détectée ou revendiquée.

Détection et protection

L’utilisation de l’ASLR (Address Space Layout Randomization) peut être un moyen de ralentir une attaque de ce type. En effet les adresses d’objets ou de régions mémoires devenant aléatoires, un attaquant ne peut alors plus prédire directement les adresses visées. Cependant les auteurs proposent un moyen de contourner cette protection.
Contrairement à Meltdown et à la première variante de NetSpectre, la seconde variante de NetSpectre ne peut pas être patchée car elle ne se base pas sur une vulnérabilité. Cependant la détection d’une telle attaque semble assez aisée puisqu’elle nécessite un grand nombre de communications et l’utilisation de paquet très spécifiques.

Pierre-Henri COLONEL

Sources

https://www.sstic.org/2017/presentation/2017_invite_1/
https://spectreattack.com/spectre.pdf
https://misc0110.net/web/files/netspectre.pdf
https://www.securityinsider-wavestone.com/2018/01/meltdown-spectre-attaques-par-canaux-auxilliaires.html
https://eprint.iacr.org/2013/448.pdf

Aucun commentaire:

Enregistrer un commentaire