Principios de los ataques de caché

19

Hay muchas publicaciones científicas que tratan con ataques de caché. Más recientemente, se publicó el ataque CacheBleed que explota los conflictos del banco de caché en la arquitectura de Intel Sandy Bridge. La mayoría de los ataques de tiempo utilizan un enfoque similar:

  1. El atacante llena la caché con los mismos datos aleatorios que controla.
  2. El atacante espera mientras su víctima está haciendo algún cálculo (por ejemplo, cifrado).
  3. El atacante continúa la ejecución y mide el tiempo para cargar cada conjunto de sus datos que está escrito en el caché en el paso 1. Si la víctima ha accedido a algunos conjuntos de caché, habrá desalojado algunas de las líneas del atacante, que el atacante observa como mayor latencia de acceso a la memoria para esas líneas.

Al hacerlo, el atacante puede averiguar a qué conjunto de caché o incluso a qué línea de caché accedió la víctima.

La mayoría de los documentos que he leído concluyen automáticamente que el atacante tiene la posibilidad de deducir los datos (por ejemplo, una clave privada segura) que se escribieron en estas ubicaciones de caché. Esto es lo que no entiendo:

Si sé que la víctima V accedió a una determinada posición de caché, ¿cómo obtengo sus datos? Muchas direcciones de memoria se asignan a la misma posición de caché e incluso si tuviera la dirección de memoria completa, dudo que el atacante pueda realizar un DMA.

Como referencia, puedes tomar el ataque CacheBleed recientemente publicado. >     

pregunta null 05.06.2016 - 10:07
fuente

2 respuestas

4

Aparentemente, este tema suscita gran interés para muchos de ustedes. Después de haber investigado un poco más, presenté el ataque de CacheBleed a un grupo de científicos el mes pasado. Ahora, me gustaría compartir mis resultados con usted y responder realmente mi propia pregunta.

Los tres pasos anteriores del ataque genérico de Prime + Probe son correctos. Sin embargo, falta el paso decisivo, es decir, cómo deducir la clave secreta. El atacante no puede realizar un DMA y no puede leer los datos guardados en las líneas de caché. Esto es muy importante de entender, porque de lo contrario, el ataque completo sería mucho más fácil.

El atacante solo sabe a qué línea de caché se accedió midiendo los retrasos. Además, sabe cómo se implementa RSA y qué algoritmos se están utilizando. OpenSSL utiliza un algoritmo de exponenciación de ventana fija para calcular el mensaje m

m = c^d mod p

Necesitamos entender cómo funciona este algoritmo de exponenciación. El Manual de criptografía aplicada de Menezes, van Oorschot y Vanstone sugiere el siguiente pseudo código:

No confunda la clave secreta d y el exponente e en el algoritmo anterior. Como solo estamos interesados en el paso de descifrado, e no es la clave pública sino el secreto. Así, d = e en nuestro caso. El punto interesante es la multiplicación en 3.2 . Utiliza el multiplicador precomputado g_j que en realidad acelera la exponenciación. Sin embargo, su selección depende de la clave secreta.

Si el atacante conoce el índice del multiplicador actual, es decir, qué multiplicador se usa, conoce algunos bits de la clave secreta. El valor del multiplicador es sin interés .

OpenSSL utiliza la llamada técnica de dispersión-recolección para evitar ataques de caché en la granularidad de la línea de caché. Es predecible dónde se almacenan los multiplicadores. En total hay 32 multiplicadores. Por esa razón, cada uno necesita 5 bits para ser identificado de forma única. Los dos bits más significativos seleccionan la línea de caché, mientras que los tres bits menos significativos identifican el contenedor. Cada línea de caché consta de ocho bandejas.

El atacante puede deducir a qué bin se accedió durante una operación de descifrado. Esto revela tres bits del índice del multiplicador utilizado y, por lo tanto, en parte la clave privada. Los dos bits faltantes se pueden calcular debido a las redundancias en las claves RSA.

Para resumir, no se realiza DMA, el atacante no lee los datos del caché. El factor crucial es que la posición del caché en parte revela la clave secreta. Esto se debe a los accesos a la memoria dependientes del secreto. Ataques similares como en AES hacen uso de la posición de caché también. Los datos reales no son de interés, pero la posición revela datos sensibles.

    
respondido por el null 20.10.2016 - 16:40
fuente
0

Este ataque es similar al Flush + Reload, pero el tuyo usa el relleno de caché en lugar de los flushes para forzar el desalojo del caché.

Consulte las partes 3 y 4 de este documento: enlace

Básicamente, debido a cómo funciona la exponenciación modular, al saber el tiempo entre cada acceso en la memoria a la clave privada, puede deducir la clave.

Un largo retraso entre dos accesos significa una multiplicación que es un 1.

Un breve retraso entre dos accesos significa un cambio binario que es un 0.

Luego los sumas todos, y tienes una representación bastante cercana de la clave. Pruebe varias veces y agregue un poco de magia estadística, y terminará con la clave.

Si alguien quiere vulgarizar más el papel, siéntase libre de editar esta respuesta.

    
respondido por el Nate 23.08.2016 - 17:08
fuente

Lea otras preguntas en las etiquetas