
2 janvier 2018 (CVE-2017-5753 et CVE-2017-5715) "Spectre" Spectre exploit
2 janvier 2018 (CVE-2017-5753 et CVE-2017-5715) Exemple d'exploitation de la vulnérabilité Spectre (« Ghost »)
Nous plaçons le texte « The Magic Words are Squeamish Ossifrage. » en mémoire, puis nous essayons de le lire en exploitant la vulnérabilité. Si le système est vulnérable, vous verrez le même texte sur la sortie standard.
Dans ce code, si les instructions de compilation dans victim_function() sont exécutées dans un ordre strictement programmatique, la fonction ne lit que dans array1[0..15] car array1 size = 16. Cependant, il est possible que le temps d'exécution dépasse le temps de lecture. La fonction read_memory_byte() effectue plusieurs appels d'entraînement à victim_function() afin que le prédicteur de branche s'attende à une valeur valide de x, puis appelle x hors limites. La branche conditionnelle ne peut pas être prédite et l'exécution spéculative ultérieure lit un octet mystère en utilisant x hors limites. Ensuite, le code prédit lit à partir de array2[array1[x] * 512], divulguant la valeur de array1[x] dans le cache. Pour terminer l'attaque, un simple flush+reload est utilisé pour identifier dans quelle ligne de cache se trouve array2, révélant le contenu de la mémoire. L'attaque est répétée plusieurs fois, donc même si l'octet cible n'était pas initialement dans le cache, la première itération l'y amène. Sur un i7 Surface Pro 3, le code optimisé lit à environ 10 Ko/s.