Meltdown utilise le fait que effectivement le micro-code peut faire l’accès à la mémoire avant que l'IT se déclenche (et interdise effectivement l'utilisation/visualisation de cette adresse), mais il la laisse qd même dans le cache (même si personne ne pourra en lire la valeur directement).
Mais le mal est fait car si on veut réutiliser cette adresse, le proc la prendra dans son cache et donc plus vite qu'une autre s'il devait aller la chercher en mémoire centrale.
L'astuce est d'utiliser cette adresse mémoire de manière détournée (dans un adressage indirecte par exemple).
On va dire pour mieux comprendre que l'on a droit de lire au-dessus de 0x500, mais pas entre 0x200 et 0x300. Et on veut pourtant connaître ce qui est contenue en 0x200 (supposons la valeur 10)
Il y a donc un premier programme qui va demander d'accéder par indirection à la mémoire en 0x500 + [la valeur contenue en mémoire 0x200]
Ce programme va être interrompu car on a pas le droit d'accéder en 0x200, mais il aura bien accéder à cette mémoire (en 0x510) et aura mis son contenu dans le cache...
Et ensuite un second programme qui lui va comparer les temps d’accès des mémoires de 0x500 à 0x600 (par exemple)
et par une mesure de leurs temps d’accès, on saura que l’accès à 0x510 est plus rapide, donc 0x200 contenait la valeur 10...
C'est le principe, bien sur il faut prendre en compte les tailles des pages and co...
[^] # Re: Comment une faille peut-elle toucher plusieurs processeurs de plusieurs fondeurs ?
Posté par BlueDian . En réponse à la dépêche Deux failles critiques : Meltdown et Spectre. Évalué à 10.
Re,
Je viens de comprendre grâce à wikipedia.
Meltdown utilise le fait que effectivement le micro-code peut faire l’accès à la mémoire avant que l'IT se déclenche (et interdise effectivement l'utilisation/visualisation de cette adresse), mais il la laisse qd même dans le cache (même si personne ne pourra en lire la valeur directement).
Mais le mal est fait car si on veut réutiliser cette adresse, le proc la prendra dans son cache et donc plus vite qu'une autre s'il devait aller la chercher en mémoire centrale.
L'astuce est d'utiliser cette adresse mémoire de manière détournée (dans un adressage indirecte par exemple).
On va dire pour mieux comprendre que l'on a droit de lire au-dessus de 0x500, mais pas entre 0x200 et 0x300. Et on veut pourtant connaître ce qui est contenue en 0x200 (supposons la valeur 10)
Il y a donc un premier programme qui va demander d'accéder par indirection à la mémoire en 0x500 + [la valeur contenue en mémoire 0x200]
Ce programme va être interrompu car on a pas le droit d'accéder en 0x200, mais il aura bien accéder à cette mémoire (en 0x510) et aura mis son contenu dans le cache...
Et ensuite un second programme qui lui va comparer les temps d’accès des mémoires de 0x500 à 0x600 (par exemple)
et par une mesure de leurs temps d’accès, on saura que l’accès à 0x510 est plus rapide, donc 0x200 contenait la valeur 10...
C'est le principe, bien sur il faut prendre en compte les tailles des pages and co...