Qu'est ce qu'une résistance ? Comment calculer sa valeur ? Laquelle choisir ?

Introduction

Meltdown et Spectre exploitent des vulnérabilités critiques dans les processeurs modernes. Ces vulnérabilités matérielles permettent aux programmes de voler les données qui sont en cours de traitement sur l’ordinateur. Alors que les programmes ne sont généralement pas autorisés à lire les données d’autres programmes, un programme malveillant peut exploiter Meltdown et Spectre pour s’emparer de secrets stockés dans la mémoire d’autres programmes en cours d’exécution. Il peut s’agir de vos mots de passe stockés dans un gestionnaire de mots de passe ou un navigateur, de vos photos personnelles, de vos courriels, de vos messages instantanés et même de documents critiques pour l’entreprise.

Meltdown attacks

Meltdown brise l’isolation la plus fondamentale entre les applications utilisateur et le système d’exploitation. Cette attaque permet à un programme d’accéder à la mémoire, et donc aussi aux secrets, d’autres programmes et du système d’exploitation.

Spectre attacks

Spectre rompt l’isolement entre différentes applications. Il permet à un attaquant de tromper les programmes exempts d’erreurs, qui suivent les meilleures pratiques, et de les amener à divulguer leurs secrets. En fait, les contrôles de sécurité de ces meilleures pratiques augmentent la surface d’attaque et peuvent rendre les applications plus sensibles à Spectre.

Spectre est plus difficile à exploiter que Meltdown, mais il est également plus difficile à atténuer. Il est toutefois possible d’empêcher certains exploits connus basés sur Spectre grâce à des correctifs logiciels.

Prediction pour convaincre le CPU d’exécuter de manière spéculative du code qui ne doit pas être exécuté. Ceci permet de révéler des informations secrètes.
 

Mémoire

Mémoire : La mémoire idéal a pas de latence, est gratuite, avec una capacité et bande passante infinie.

DRAM :accès lent, haute densité, et nécessite un rafraichissement.

SRAM : Accès rapide, basse densité, coût important, pas de rafraichissement.

Plus la mémoire est grande, moins elle est rapide mais plus le coût par bit est faible.

Plus la mémoire est faible, plus elle est rapide mais plus le coût par bit est important.

Localité spatiale : si tu as accédé à une valeur dans un tableau il y a de grande chance que tu veuilles
accéder à la valeur juste après dans le tableau (à l’indice suivant par exemple)

Localité temporel : Les données/instructions référencées sont plus susceptibles d’être référencées à nouveau très prochainement dans une petite fenêtre de temps (par exemple, des boucles). Les données récemment consultées le seront à nouveau bientôt.

La mémoire est organisée d’une manière spécifique  : Les données sont chargées dans un ensemble spécifique en fonction de l’adresse. La ligne de cache est chargée d’une manière spécifique en fonction du remplacement politique.

Technique pour réduire pour l'empreinte de la mémoire

Librairie partagée : fichier qui peut-être partagé par plusieurs programmes.

donnée partagé
Dé-duplication : c’est une technique de stockage de données, consistant à factoriser des séquences de données identiques afin d’économiser l’espace utilisé.
Chaque fichier est découpé en une multitude de tronçons. À chacun de ces tronçons est associé un identifiant unique, ces identifiants étant stockés dans un index.
L’objectif de la déduplication est de ne stocker qu’une seule fois un même tronçon. Aussi, une nouvelle occurrence d’un tronçon déjà présent n’est pas à nouveau sauvegardée,
mais remplacée par un pointeur vers l’identifiant correspondant. Ceci permet de démarrer pluesieurs logiciels et de limiter les ressources utilisées si celle-ci sont les  mêmes entre les logiciels.

Last Level Cache

inclusive LLC : Le cache de dernier niveau (Last Level Cache, LLC) désigne le cache de plus haut niveau qui est généralement partagé par toutes les unités fonctionnelles
de la puce (par exemple, les cœurs de l’unité centrale, l’IGP et le DSP).
Le LLC inclusif est un sur-ensemble de L1, L2. Les données évincées de LLC sont évincées de L1, L2.

Le cache de dernier niveau (Last Level Cache, LLC) désigne le cache le plus élevé auquel les cœurs accèdent avant de récupérer les données en mémoire.
En général, le LLC est partagé par tous les cœurs. Le LLC peut-être le cache L3 partagé.

Si le cache L3 partagé est inclusif cela signifie qu’il conserve des copies de toutes les lignes de cache qui étaient extraites dans les caches L1 et L2 de tous les cœurs.
Si le cache L3 n’est pas inclusif ; il contient principalement les lignes de cache qui ont été évincées des caches L2 des cœurs.
Le L3 réarchitecturé joue un rôle dans la prise en charge d’un mouvement efficace des données vers les registres. Le cache L3 n’étant pas inclusif,
il contient en grande partie des données qui ne sont présentes dans aucun L2. Cela étend effectivement la capacité totale de cache par socket à la somme de L2 et L3.

La contrepartie de cette capacité de cache élargie est une stratégie de recherche plus complexe pour les données mises en cache.
Dans les processeurs Intel précédents, les lignes de cache qui ne se trouvaient pas dans le L3 inclus ne se trouvaient pas non plus dans les caches de numéro inférieur.
Ainsi, une absence dans le L3 déclenchait automatiquement une extraction de la mémoire, et aucune autre recherche n’était nécessaire.
Mais dans Skylake et Cascade Lake, un « filtre snoop » distinct doit tenir un catalogue de toutes les lignes de cache présentes dans les caches L2 des cœurs,
ainsi que dans le L3, afin d’éviter les recherches inutiles dans la mémoire principale.
Le LLC est inclusif dans notre cas. Divided in slice.


Un programme peut optimiser l’utilisation d’un cache en x86 :
– Prefetch: Peut suggérer au CPU de mettre la donnée dans le cache ou de charger la donnée (load data)
– Clflush: Permet de vider les caches
Prefetch: can suggest CPU to load data
– Clflush: throw out data from all caches

Attaque sur les caches

Un cache peut-être espionné par un attaquant, notamment celui-ci peut espionner des parties du cache en ayant accès au temps que met le cache si c’est un cache hit ou un cache miss, le total de temps d’accès du cache, le nombre total de cycle. L’attaquant peut aussi remplacer des parties du cache afin de savoir ce que l’utilisateur utilise.

Le cache peut aussi peut-être espionné en regardant le temps d’accès à une donnée et l’observation d’un patern c’est à dire savoir quand une donnée va être dans le cache et quand elle ne le sera plus.

Caractéristique d'un cache mémoire

 
Cache L1i L1d L2 L3
taille du cache 32 KB 32 KB 256 KB 3 MB
Taille de chaque ligne 64 B 64 B 64 B 64 B
nombre de voie 8 8 8 12
nombre de sets 64 64 512 4096
inclusif non non non oui

L’exécution de logiciels sur le matériel sous-jacent est un problème :
            – Le matériel partagé est vulnérable
            – Les informations de timing peuvent révéler beaucoup de choses sur un programme victime.

Quizz

Avantage et bénéfice de partagé une donnée ?

Les caches inclusifs sont bons pour les performances mais quel sont leurs failles?

Quel est l’accès le plus rapide à la donnée : cache hit ou cache miss ?

Quand on a un cache miss, d’ou vient la donnée ?

Comment un temps pré-déterminée pour une information dans un processeur peut-être une faille de sécurité ?

Comment la déduplication aide l’optimisation de l’espace mémoire ?

Combien de level un cache d’un processeur intel a ?

Quel est la différence entre un cache mémoire et la DRAM ?

Spectre bénéficie de quelle technique d'optimisation des performances ?
Qu'est-ce que l'exécution dans le désordre ?
En quoi le succès et l'échec d'un cache permet à l'attaquant de faire son attaque ?
 

2. it’s leaks informations.
3. fatest to access data : cache hit
4. Cache miss : access from memory
5. We can know where the data is coming from
6. De-duplication : does it help to reduce time

Les différentes attaques sur un cache

Dans cette partie on va voir les différentes attaques sur les caches :

1.Exploitation des différents temps d’accès de la mémoire cache,

2.Attaquant qui surveille les lignes du cache mais pas le contenu,

3. Connaître les différents temps d’accès entre cache hit et cache miss.

 

1. Différence entre le temps d'accès d'un cache miss ou un cache hit

Dans cette partie on va voir comment exploiter les différents temps d’accès de la mémoire cache, l’attaqunt qui surveille les lignes du cache mais pas le contenu, connaître les différents temps d’accès entre cache hit et cache miss.

Pour cela on va créer un histogramme avec les différents accès au cache :

Pour différencier les caches miss des caches hits, vous pouvez différencier la différence de temps entre les deux caches miss ou cache hit. Une manière d’avoir plus de cache miss est d’ajouter des isntructions flush qui permettent de vider le cacher et donc d’avoir que des caches miss

2. Mesurer des temps court

  1. Instruction Rdtsc : horodatage précis du cycle
  2. instructions de sérialisation
  3. clôtures comme mfence

Pour utiliser les temps d’accès, l’attaquant peut surveiller les différents processus et voir quand l’utilisateur en utilise un. Néanmoins l’attaquant ne peut voir le contenu du processus.

L’attaquant peut aussi cartographier la librairie partagée, ce qui permet à l’attaquant d’espionner l’adressage du cache (pour savoir quelle donnée se trouve à quel endroit).

3. Attaque par canaux auxiliaires sur les processeurs x86 : partage et inclusion

On va voir ici différent type d’attaque utilisant le partage de donnée ou de librairie ou bien l’inclusion de cache.

  1. Flush + Reload

Dans flush+Reload, l’attaquant va d’abord vider le cache de l’utilisateur avec la fonction flush puis va ensuite remplir le cache avec des données piégés avec la fonction reload afin de pouvoir piégé la victime et l’espionner.

Voici les différentes étapes d’une attaque flush + reload :

1. L’attaquant cartographie la librairie partagée

2. L’attaquant vide le cache contenu la libarie partagée

3. L’utilisateur lance le programme piégé

4. L’attaquant relance la donnée

5. L’attaquant regarde les différences de temps entre la donnée piégé et celle non piégé.

2. Flush + Flush

Dans Flush+Flush l’attaquant va d’abord vider le cache de l’utilisateur avec la fonction flush puis va ensuite remplir le cache avec des données piégés avec la fonction reload afin de pouvoir piégé la victime. L’attaquant vide alors une nouvelle fois le cache puis il mesure le temps d’accès à la donné lors du cache miss et du cache hit.

 

  1. L’attaquant espionne la librairie partagée ( cache hit)
  2. L’attaquant efface la ligne du cahce contenant la ligne de la librairie partagé
  3. La victime charge la donnée piégée ( elle a un cache miss)
  4. L’attaquant espionne de nouveau la donnée
  5. L’attaquant compare les deux temps d’accès pour détecter les caches hits et cache miss.

3. Prime + Probe

Ici avec l’attaque Prime+Probe l’attaquant remplit d’abord le cache. La victime va ensuite vider le cache tandis que l’attaquant va la surveiller pour savoir si la victime a accedé à la donéne et déterminée si le temps d’accès d’un cahce hit et d’un cache miss.

  1. L’attaquant remplit les lignes du cache
  2. La victime vide le cache pendant son utilisation
  3. L’attaquant sonde la donnée pour savoir si elle a été accédé ou non
  4. L’attaquant peut obtenir les différents temps d’accès du cache hit et cache miss;

Si on flush le cache à chaque fois on efface ce qu’il y a dedans et donc la data sera toujours dans la mémoire
On utilise the flush and reload pour se protéger des hackers : on efface la donnée dans le cache puis on la remet de façon à tromper le hacker
Flush+flush : on efface le cache, on laisse la victime utiliser le cache puis on le ré efface.
Prime+probe : don’t use cryptosystem. Le hacker sait ce que l’on utilise car il remplace une ligne du cache et il va essayer de récupérer cette partie
du cache après et si c’est plus long alors c’est que l’utilisateur a modifié la data et on a un cache miss.

Spectre et meltdown :
de duplication :au lieu d’avoir deux adresse avec la même data on a une seule fois la data partagé (shared library)
Le cache est en ligne.
Si on ajoute du bruit, l’attaquant va avoir beaucoup plus de mal à reconnaître les vraies informations de la victime.

Conclusion

Les mémoires caches sont un moyen pour les attaquants d’obtenir des informations. Néanmoins des solutions peuvent être mise en place pour contrer ces attaques :

  • Chaque accès à la mémoire devrait prendre le même temps
  • Les composants ne doivent pas être partagés