¿cómo encaja el ataque del canal lateral de la memoria caché de la CPU en el fondo de la vulnerabilidad de Meltdown? [duplicar]

1

NOTA: Sé que hay preguntas similares, a saber, this , pero esa respuesta es solo una extracción del artículo original, que no aclaró el ataque. Además, a partir de las respuestas puedo ver que hay una discusión significativa en marcha, por lo que seguiré publicando esta pregunta hasta que aparezca una nueva sugerencia de duplicado.

En algunas publicaciones, he visto una descripción vaga como:

  

la vulnerabilidad de Meltdown usa el caché como un canal lateral para filtrar la información encontrada durante el paso dos. Durante el ataque, para utilizar el caché como un canal lateral, el atacante debe generar una cantidad significativa de fallos de caché por cada golpe de caché, ya que las diferencias de tiempo entre la falta de caché y el golpe de caché se utilizan para recopilar los datos.

¿Puede alguien describir cómo los datos sensibles que el atacante quería saber se determinan byte a byte? ¿Y cómo el tamaño de página (4096) juega un papel crucial aquí?

    
pregunta Sajuuk 15.01.2018 - 14:47
fuente

1 respuesta

1

¡Hay un XKCD para eso! .

Una página es la unidad de datos más pequeña para la administración de memoria en un sistema operativo de memoria virtual. Eso significa que cuando los datos se mueven dentro y fuera de los cachés, se mueven en porciones de al menos 1 página.

En el caso más simple, supongamos que el atacante está interesado en un solo byte de memoria. Digamos que este byte está en la dirección 0. El atacante configura una matriz que tiene 256 páginas. Permite llamar a esta matriz "page_array". Luego engañan al procesador para que realice lo siguiente:

1. load address 0 into register[X]
2. load the byte at page_array[PAGE_SIZE * register[x]] into register[y].
   // PAGE_SIZE would usually be 4096

La CPU se da cuenta de su error y deshace todo lo anterior. Pero mientras tanto, la página que contiene page_array [PAGE_SIZE * register [x]] se ha recuperado y se encuentra en el caché. es decir, si el valor fuera 1 esperaría -

  • bytes en page_array [0 a 4095] es poco probable que estén en el caché.
  • bytes en page_array [4096 a 8191] para que puedan estar en el caché.
  • bytes en page_array [8192+] es poco probable que estén en el caché.

Al sincronizar el acceso a page_array [PAGE_SIZE * i] para i en el rango de 0 a 255, las páginas que se cargan más rápido casi seguramente están en el caché. La diferencia es lo suficientemente grande como para que al seleccionar un umbral adecuado pueda discernir de manera confiable entre un golpe y un fallo.

Al repetir el mismo proceso varias veces y tomar medidas especiales para eliminar la matriz de la memoria caché antes de indexar en ella, un actor malintencionado puede alcanzar un punto en el que tenga el valor correcto con una probabilidad estadística muy alta.

    
respondido por el Hector 15.01.2018 - 16:33
fuente

Lea otras preguntas en las etiquetas