@@ -19,14 +19,13 @@ s'en défendre, même si les fabricants de CPU y travaillent.
## Compilation des codes
Tous les codes devront être compilés comme suit:
Tous les codes devront être compilés comme suit:
```code bash
gcc -mach=native -o <binaire> -c <fichier.c>
gcc -march=native -o <binaire> <fichier.c>
```
## Utilisation du cache comme canal auxiliaire
Meltdown et Spectre utilisent le cache comme canal auxiliaire pour révéler un secret protégé. La technique utilisée est
dite FLUSH + RELOAD (vidage et rechargement). On va étudier cette technique en premier.
...
...
@@ -52,7 +51,7 @@ On suppose une fonction `victim` qui utilise le secret comme index pour accéder
supposé inaccessible. La technique qu'on utilise pour révéler le secret manipulé par `victim` est appelée FLUSH+RELOAD.
1. Vider complètement le tableau de la mémoire cache
2. Appeler la victime. Cette action provoque le chargement dans le cache d'une ligne qui dépend du secret
3. Recharger le tableau dans le cache et mesurer le temps de rechargement de chaque élément. Si le temps est court, l'élément était déjà dans le cache et c'est cet élément que la victime a utilisé : on connait alors le secret.
3. Recharger le tableau dans le cache et mesurer le temps de rechargement de chaque élément. Si le temps est court, l'élément était déjà dans le cache et c'est cet élément que la victime a utilisé : on connaît alors le secret.
* Complétez `flushreload.c`
* Pourquoi pas simplement `array[256]` ?
...
...
@@ -70,7 +69,7 @@ pour maximiser le taux d'utilisation de ses unités de calcul (et donc maximiser
1. Exécuter le programme (plusieurs fois). Qu'observez-vous ?
2. Ligne 67, remplacer par "`victim(i+20);`". Que se passe-t-il ? Pourquoi ? Remettez le code initial.
3. Commentez les lignes 66 et 71 (flush de size). Est-ce que l'attaque fonctionne toujours ? Pourquoi ?
3. Commentez les lignes 66 et 71 (flush de la variable size). Est-ce que l'attaque fonctionne toujours ? Pourquoi ?
4. Décommentez les lignes 66 et 71.
## Attaque 'Spectre'
...
...
@@ -83,7 +82,7 @@ Le secret est en dehors de la sandbox. L'accès au secret n'est possible qu'au
### Etape 4
1. Exécutez le programme et déterminez si vous êtes capable de déterminer la valeur secrète. Pourquoi le résultat n'est
1. Exécutez le programme et déterminez si vous êtes capable de trouver la valeur secrète. Pourquoi le résultat n'est
pas fiable ? Exécutez le programme un nombre suffisant de fois pour être sûr du secret.
### Etape 5 : amélioration de la fiabilité de l'attaque.
...
...
@@ -98,16 +97,4 @@ Le secret est en dehors de la sandbox. L'accès au secret n'est possible qu'au
### Etape 6 : détermination de tout le secret.
Modifiez `spectreattackimproved.c` pour qu'elle retourne tout le secret (toute la chaîne de caractère).
Modifiez `spectreattackimproved.c` pour qu'elle retourne tout le secret (toute la chaîne de caractère).