
Exemple d'utilisation de l'exploit « Spectre » révélé (CVE-2017-5753 et CVE-2017-5715)
Exemple d'utilisation de l'exploit "Spectre" révélé le 2 janvier 2018 (CVE-2017-5753 et CVE-2017-5715)
Spectre brise l'isolation entre différentes applications. Il permet à un attaquant de tromper des programmes sans erreur, qui suivent les meilleures pratiques, en leur faisant divulguer leurs secrets. En fait, les vérifications de sécurité desdites meilleures pratiques augmentent en réalité la surface d'attaque et peuvent rendre les applications plus sensibles à Spectre.
C, utilise les bibliothèques :
Nous plaçons le texte "The Magic Words are Squeamish Ossifrage." en mémoire, puis nous essayons de le lire en utilisant l'exploit. Si le système est vulnérable, vous verrez le même texte dans la sortie, lu depuis la mémoire.
Dans ce code, si les instructions compilées dans victim_function() étaient exécutées dans un ordre strict du programme, la fonction ne lirait que array1[0..15] puisque la taille de array1 = 16. Cependant, lorsqu'elles sont exécutées de manière spéculative, des lectures hors limites sont possibles. La fonction readMemoryByte() effectue plusieurs appels d'entraînement à victim_function() pour que le prédicteur de branche s'attende à des valeurs valides pour x, puis appelle avec un x hors limites. La branche conditionnelle se trompe, et l'exécution spéculative qui s'ensuit lit un octet secret en utilisant le x hors limites. Le code spéculatif lit ensuite array2[array1[x] * 512], divulguant la valeur de array1[x] dans l'état du cache. Pour compléter l'attaque, un simple flush+probe est utilisé pour identifier quelle ligne de cache dans array2 a été chargée, révélant le contenu de la mémoire. L'attaque est répétée plusieurs fois, de sorte que même si l'octet cible n'était initialement pas dans le cache, la première itération l'y amènera.
Le code non optimisé lit environ 10KB/second sur un i7 Surface Pro 3.