Un problème avec l'exécution prédictive fait qu'une donnée qui ne devrait pas pouvoir être lue se retrouve dans un cache du processeur.
En fait, l'erreur, c'est de s'accrocher à croire que le fait que la valeur interdite puisse se retrouver dans le cache a une quelconque importance. Ça n'en a aucune, d'autant plus que dès que la prédiction se révèlera fausse, toute donnée changée (cache compris) est remise à l'état initial.
Par contre, on a eu accès à la vraie valeur (lors de l'exécution prédictive), et à partir de cette valeur, on a pu construire un index pour une donnée utilisateur et cet index est légal et connu! C'est ça la ruse! On a transformée une valeur inconnue en un index connu! Et bien sûr, on a effectué une lecture à cet index qui sera notre seule donnée légale en cache.
Alors si cet index est connu, quel intérêt? En fait je me corrige: on a transformé une valeur inconnue en 2 index connus! C'est la raison pour laquelle cette attaque va lire les données bit par bit (car on obtient une réponse binaire).
Et on va simplement comparer la vitesse de lecture de ces 2 index. Note bien qu'on s'en fout toujours autant de la valeur réelle de ces 2 index. On veut juste savoir lequel est le plus rapide à lire (c'est à dire lequel est en cache), ce qui nous permet de déterminer si le bit est à 0 ou 1.
Puis on passe au bit suivant.
Film d'animation libre en CC by-sa/Art Libre, fait avec GIMP et autre logiciels libres: ZeMarmot [ http://film.zemarmot.net ]
[^] # Re: Comment le cache peut être lu ?
Posté par Jehan (site web personnel, Mastodon) . En réponse à la dépêche Deux failles critiques : Meltdown et Spectre. Évalué à 7.
En version simplifié!
En fait, l'erreur, c'est de s'accrocher à croire que le fait que la valeur interdite puisse se retrouver dans le cache a une quelconque importance. Ça n'en a aucune, d'autant plus que dès que la prédiction se révèlera fausse, toute donnée changée (cache compris) est remise à l'état initial.
Par contre, on a eu accès à la vraie valeur (lors de l'exécution prédictive), et à partir de cette valeur, on a pu construire un index pour une donnée utilisateur et cet index est légal et connu! C'est ça la ruse! On a transformée une valeur inconnue en un index connu! Et bien sûr, on a effectué une lecture à cet index qui sera notre seule donnée légale en cache.
Alors si cet index est connu, quel intérêt? En fait je me corrige: on a transformé une valeur inconnue en 2 index connus! C'est la raison pour laquelle cette attaque va lire les données bit par bit (car on obtient une réponse binaire).
Et on va simplement comparer la vitesse de lecture de ces 2 index. Note bien qu'on s'en fout toujours autant de la valeur réelle de ces 2 index. On veut juste savoir lequel est le plus rapide à lire (c'est à dire lequel est en cache), ce qui nous permet de déterminer si le bit est à 0 ou 1.
Puis on passe au bit suivant.
Film d'animation libre en CC by-sa/Art Libre, fait avec GIMP et autre logiciels libres: ZeMarmot [ http://film.zemarmot.net ]