Des attaques concrètes
Les attaques micro-architecturales (cache, Spectre)
Les attaques précédentes visaient du matériel qu'on tient dans la main. Les attaques micro-architecturales, elles, se font par logiciel, entre deux programmes qui partagent le même processeur — dans un serveur, un cloud, votre propre navigateur.
Le coupable : le cache partagé
Pour aller vite, un processeur garde les données récemment utilisées dans une petite mémoire très rapide, le cache. La conséquence est cruciale pour la sécurité :
- accéder à une donnée présente dans le cache est rapide ;
- accéder à une donnée absente oblige à aller en mémoire principale : c'est lent.
Ce simple écart de temps est un canal auxiliaire. Et comme le cache est partagé entre les programmes, un processus espion peut sonder ce qu'un autre a laissé.
Flush+Reload : espionner par le cache
La technique Flush+Reload exploite cet écart lorsqu'une zone mémoire est partagée (une bibliothèque commune, par exemple) :
espion cache partagé victime
1. flush -----------> [ ligne vidée ] |
2. attend calcule (accède ?)
3. reload ---------> [rapide ? lent ?] <---------|
accès RAPIDE -> la victime y a touché (rechargé)
accès LENT -> la victime n'y a pas touché
En observant quelles cases la victime consulte, l'espion déduit les données — donc des morceaux de clé, car les tables de calcul consultées dépendent du secret.
Spectre et Meltdown : l'exécution spéculative
En 2018, Spectre et Meltdown ont fait scandale : ils exploitent une optimisation présente dans presque tous les processeurs modernes, l'exécution spéculative.
Pour ne pas attendre, le processeur devine la suite d'un programme et exécute des instructions par avance. Si le pari est mauvais, il annule les résultats… mais les traces laissées dans le cache subsistent. Un attaquant provoque une lecture spéculative d'une mémoire interdite, puis récupère la valeur par Flush+Reload.
if (i < taille_tableau): # branche mal prédite
y = tableau2[ tableau1[i] * 256 ]
^ exécuté PAR SPÉCULATION même si i est hors limites
-> laisse dans le cache l'empreinte d'une donnée SECRÈTE
- Meltdown franchit la barrière entre programme et noyau du système.
- Spectre trompe un programme pour qu'il fuite ses propres données protégées.
Ces attaques cassent l'isolation : la garantie qu'un processus ne peut lire la mémoire d'un autre. Sur un cloud, un locataire pouvait en théorie espionner son voisin.
Les contre-mesures
Elles sont logicielles et matérielles, et souvent coûteuses :
- correctifs du système isolant la mémoire du noyau ;
- barrières empêchant certaines spéculations dans le code sensible ;
- nouveaux processeurs corrigeant le défaut au niveau du silicium ;
- code sans accès mémoire dépendant du secret (le temps constant, encore).
Le prix à payer est parfois une perte de performance : la sécurité contre ces fuites n'est pas gratuite.
En résumé
Les caches CPU partagés laissent fuir de l'information entre processus : Flush+Reload déduit les accès mémoire de la victime par le temps. Spectre et Meltdown (2018) détournent l'exécution spéculative pour lire de la mémoire interdite et cassent l'isolation. On s'en protège par des correctifs logiciels, des révisions matérielles et du code sans accès dépendant du secret — au prix de performances.

