¿Cómo accede realmente el canal lateral a los contenidos de la memoria del kernel en Meltdown?

2

En el documento Meltdown, menciona que puede identificar la dirección de memoria del kernel a la que se accede. La parte que no entiendo es cómo funciona el canal FLUSH + RELOAD para identificar cuál es el contenido de la dirección de memoria en las líneas de caché L1. ¿Cómo identifica los contenidos?

    
pregunta Dale 11.01.2018 - 13:36
fuente

2 respuestas

3

La parte del documento que le interesa es:

  

Según el valor de los datos en este ejemplo de juguete, se accede a una parte diferente de la caché cuando se ejecuta el acceso a la memoria fuera de orden. A medida que los datos se multiplican por 4096, los accesos de datos a la matriz de la sonda se dispersan sobre la matriz con una distancia de 4 kB (suponiendo un tipo de datos 1 B para la matriz de la sonda). Por lo tanto, hay un mapeo inyectivo del valor de los datos a una página de memoria, es decir, no hay dos valores diferentes de datos que den como resultado un acceso a la misma página. En consecuencia, si una línea de caché de una página se almacena en caché, conocemos el valor de los datos. La difusión en diferentes páginas elimina los falsos positivos debido al prefetcher, ya que el prefetcher no puede acceder a los datos a través de los límites de la página [14].

También, 5.1 paso 2.

En pocas palabras, el valor de los datos que desea conocer se determina byte a byte. El valor desconocido se multiplica por el tamaño de la página, por lo que cada valor de byte posible diferente activa la carga de una página diferente.

Luego puede medir qué página se cargó con el método FLUSH + RELOAD.

    
respondido por el M'vy 11.01.2018 - 16:23
fuente
3
  1. El atacante le pide a la CPU que haga algo que lleve mucho tiempo, como un poco de matemáticas complicadas. La ejecución real se detiene, por lo que los siguientes cientos de instrucciones se ejecutan de forma especulativa, sin cambios en el estado de la CPU visible hasta que la instrucción complicada haya finalizado.
  2. La ejecución especulativa se usa para leer un valor de memoria protegido en un registro de CPU. Los datos caen en caché y en un registro de ejecución especulativa, ninguno de los cuales puede ser leído por el atacante.
  3. Aún ejecutando el código de manera especulativa, el valor leído se usa para seleccionar una dirección en una parte de la memoria que el atacante puede leer y leer. Los datos vuelven a aparecer en el caché y en un registro de ejecución especulativa.
  4. La instrucción de bloqueo de la CPU termina de ejecutarse, y la CPU se da cuenta de que se equivocó acerca de qué instrucciones se ejecutarán después del bloqueo. Todos los resultados de la ejecución especulativa se descartan, aunque los cambios en lo que está almacenado en el caché no lo son.
  5. Parte de la memoria accesible al atacante ahora se almacena en el caché de datos. La lectura desde esa ubicación será más rápida que la lectura desde cualquier otra ubicación, y el atacante puede calcular al revés para determinar cuál debe haber sido el valor protegido para que la ejecución especulativa haya leído esa ubicación.

Tenga en cuenta que la modificación del caché no es el único canal lateral posible para Meltdown, es solo el que tiene la mejor relación señal / ruido.

    
respondido por el Mark 11.01.2018 - 22:58
fuente

Lea otras preguntas en las etiquetas