Professional Documents
Culture Documents
Paul Kocher 1, Daniel Genkin 2, Daniel Gruss 3, Werner Haas 4, Mike Hamburgo 5,
Moritz Lipp 3, Stefan Mangard 3, Thomas Prescher 4, Michael Schwarz 3, Yuval Yarom 6
1 Independiente
Abstracto 1. Introducción
Los procesadores modernos usan predicción de saltos y la ejecución
especulativa para maximizar el rendimiento. Por ejemplo, si el destino de una Los cálculos realizados por los dispositivos físicos a menudo dejan efectos
rama depende de un valor de memoria que se encuentra en proceso de ser secundarios observables más allá de las salidas inal NOM del cálculo. ataques
leído, las CPU intentarán adivinar el destino y tratar de ejecutar por delante. de canal lateral se centran en exploit- ing estos efectos secundarios con el fin
Cuando el valor de la memoria finalmente llega, la CPU ya sea descartes o de extraer información secreta lo contrario- no disponible. Desde su
compromete el cálculo especulativo. lógica especulativa es infiel en la forma en introducción en los últimos años 90 [25], muchos efectos físicos, tales como el
que se ejecuta, puede acceder a la memoria y los registros de la víctima, y consumo de energía [23, 24], la radiación electromagnética [31], o el ruido
puede realizar operaciones con efectos secundarios mensurables. acústico [17] se han aprovechado para extraer las claves criptográficas, así
como otros secretos .
Specter ataques implican la inducción de una víctima de la Mientras que los ataques de canal lateral física se pueden utilizar para extraer
especulación tivamente realizar operaciones que no ocurrirían durante información secreta de dispositivos complejos tales como ordenadores y teléfonos
la ejecución del programa correcto y que filtrarse la información móviles [15, 16], estos dispositivos se enfrentan a amenazas adicionales que no
confidencial de la víctima a través de un canal lateral a la adver- sario. requieren equipos de medi- ción externa, ya que ejecutar código de poten-
Este documento describe los ataques prácticos que combinan la cialmente desconocida orígenes. Mientras que algunos ataques basados en
metodología de los ataques de canal lateral, ataques de fallas, y la software explotan las vulnerabilidades de software (tales como tampón sobre
programación orientada a rendimiento que pueden leer la memoria vulnerabilidades OW o uso después de liberación fl) otras vulnerabilidades de
arbitraria del proceso de la víctima. En términos más generales, el hardware apalancamiento ataques de software con el fin de filtrar información
documento muestra que las implementaciones de ejecución sensible. Los ataques de este último tipo incluyen ataques que explotan
especulativa violan los supuestos de seguridad que sustentan microarquitecturales caché TIMING [9, 30, 29, 35, 21, 36, 28], predicción de
numerosos mecanismos de seguridad de software, incluyendo la bifurcación his- toria [7, 6], o rama Buffers objetivo [26, 11]) . Software- técnicas
separación de funcionamiento sis- proceso tem, análisis estático, basadas también se han utilizado para montar fallo en- tachuelas que alteran la
contenedores, just-in-time (JIT) de compilación y contramedidas para memoria física [22] o valores internos de la CPU [34].
* Después de informar de los resultados aquí, nos informaron de que nuestro trabajo se superpone en Eventualmente llega frommemory el procesador comprueba el cor-
parte, los resultados del trabajo independiente realizado en el Proyecto Cero de Google.
1
rectness de su estimación inicial. Si la suposición era incorrecta, el procesador datos ex filtración a través de canales encubiertas microarquitecturales. Más
descarta la (incorrecta) ejecución especulativa por revertir el estado de registro de especıficamente, con el fin de montar un ataque Specter, un atacante inicia
nuevo al punto check- almacenado, lo que resulta en un rendimiento comparable al mediante la localización de una secuencia de instrucciones dentro del espacio de
ralentí. En caso de que la suposición era correcta, sin embargo, se han direcciones del proceso que, cuando se ejecuta actúa como un transmisor de canal
comprometido los resultados ecution ex especulativos, produciendo un significante encubierto que pierde memoria la vic- de tim o se registra contenido. El atacante
no puede per- formance ganar como trabajo útil se llevó a cabo durante la demora. engaña a la CPU en forma especulativa y erróneamente ejecu- cuting esta
secuencia de instrucciones, se escapa de esta manera la información de la vic- de
Tim sobre el canal encubierto. Por último, la grapadora en- recupera la información
Desde una perspectiva de seguridad, ejecución especulativa in- volves ejecución de la víctima sobre el canal encubierto. Mientras que los cambios en el estado de la
de un programa de una manera posiblemente incorrectas. Sin embargo, como los CPU nominal resultante de esta ejecución especulativa errónea eventualmente son
procesadores están diseñados para revertir los resultados de una ejecución revertidos, los cambios en otras partes de la microarquitectura del la CPU (tales
especulativa incorrecta en su estado anterior para mantener la corrección, estos como contenido de la caché) pueden sobrevivir reversión estado nominal.
errores fueron previamente AS SUMED no tener implicaciones de seguridad.
se ejecutan transitorios especulativamente, somos capaces de filtrar información influyen en la ejecución especulativa errónea.
desde dentro del espacio de direcciones de memoria de la víctima. La explotación de saltos condicionales. Para explotar las ramas
condicionales, el atacante necesita el predictor de saltos a mispredict la
dirección de la rama, a continuación, el pro cesador debe ejecutar
Nos empíricamente demostrar la viabilidad de ataques Specter mediante el uso de especulativamente código que no sería ejecutado de otra forma que se
secuencias de instrucciones transitorias con el fin de filtrar información a través de escapa de la información solicitada por el atacante. Aquí está un ejemplo de
dominios de seguridad. código explotable:
Ataques con código nativo. Hemos creado un programa simple de tim Vic- que contiene
si (x <array1_size)
datos secretos dentro de su espacio de acceso a la memoria. A continuación, después
y = array2 [array1 [x] * 256];
de compilar el programa víctima se realizaron búsquedas en el binario resultante y
bibliotecas compartidas del sis- tema operativo de secuencias de instrucciones que se En este ejemplo, La variable X contiene attacker-
pueden utilizar para filtrar información desde el espacio de direcciones de la víctima. datos controlados. los Si declaración compila a una instrucción de salto, cuyo
Por último, escribimos un programa atacante que ex- ploits función de ejecución propósito es verificar que el valor de X está dentro de un rango legal, lo que
especulativa de la CPU con el fin de ejecutar las secuencias encontradas previamente garantiza que el acceso a la
como ins- trucciones transitorios. Usando esta técnica hemos sido capaces de leer el array1 es válida.
espacio de direcciones de memoria de toda la víctima, incluyendo los Crets Se- Para la hazaña, el primer atacante fi invoca el código en cuestión con
almacenados en su interior. entradas válidas, el entrenamiento del predictor de saltos esperar que el Si será
verdad. El atacante entonces invoca el código con un valor de X fuera de los
límites de array1
Ataques usando JavaScript. Además de violar los límites de aislamiento pro- ceso y con tamaño array1 sin caché. La CPU adivina que la comprobación de
utilizando código nativo, tachuelas Specter en- también se pueden utilizar para violar límites será verdad, la eje- especulativamente cutis de la lectura de array2
recinto de seguridad del navegador, montándolos a través de código JavaScript [array1 [x] * 256] utilizando los maliciosos X. La lectura de matriz2 carga
portátil. Se escribió un programa JavaScript que lee correctamente los datos del datos en la memoria caché en una dirección que depende de Array1 [x]
espacio de direcciones del proceso del explorador de ejecutarlo.
utilizando los maliciosos X. El cambio en el estado de caché no se revierte cuando
el procesador se da cuenta de que la ejecución especulativas era errónea, y puede
ser detectado por el adversario de encontrar un byte de la memoria de la víctima.
1.2 Nuestros Técnicas
Mediante la repetición con diferentes valores de X, esta construcción puede ser
En un nivel alto, un ataque Espectro viola los límites ción de memoria aisla- explotado para leer la memoria de la víctima.
mediante la combinación con la ejecución especulativa
2
La explotación de las ramas indirectos. A partir de la programación orientada otros. La familia fantasma de los ataques se documenta de- bajo
Regresar- (ROP) [33], en este método la tacker en- elige un artilugio del CVE-2017 a 5753 y CVE-2.017-5715.
espacio de direcciones de la víctima y influye en la víctima para ejecutar el
gadget especulativamente. A diferencia de la ROP, el atacante no se basa en
1.4 fusión
una vulnerabilidad en el código víctima. En su lugar, el atacante entrena el
Poder Target Buffer (BTB) a mispredict una rama de una instrucción de Meltdown [27] es un ataque de la microarquitectura relacionada que explota ejecución
bifurcación indirecta a la dirección del aparato, lo que resulta en una ejecución fuera de orden con el fin de perder memoria física del objetivo. Crisis es distinta de
especulativa del gadget. Si bien las instrucciones especulativamente ataques Specter en dos formas principales. En primer lugar, a diferencia de Spectre,
ejecutados son abandonados, sus efectos en la caché no se revierten. Estos Deshielo no utiliza predicción de saltos para alcanzar la ejecución especulativa. En su
efectos pueden ser utilizados por el gadget para filtrar información sensible. Se lugar, se basa en la observación de que cuando una instrucción provoca una trampa,
muestra cómo, con una cuidadosa selección de un gadget, este método puede siguiendo ins- trucciones que se ejecutaron fuera de orden son abortados. En
ser utilizado para leer la memoria arbitraria de la víctima. segundo lugar, Deshielo explota una vulnerabilidad de elevación de privilegios
instrucciones ejecutadas tivamente pueden pasar por alto pro- tección de memoria. La
Para mistrain la BTB, el atacante fi NDS la dirección virtual del gadget en el espacio de usuario. Este acceso provoca una trampa, pero antes de que se emita la
espacio de direcciones de la víctima, a continuación, realiza ramas indirectas a trampa, el código que sigue a la fuga de acceso a los contenidos de la memoria se
esta dirección. Esta formación se realiza desde el espacio de direcciones del accede a través de un canal de memoria caché.
2. Fondo
Otras variantes. Nuevos ataques pueden ser diseñados mediante la variación de En esta sección se describen algunos de los componentes turales microarchitec-
tanto el método de lograr ción ejecu- especulativo y el método utilizado para filtrar la de los procesadores modernos de alta velocidad, la forma en que mejoran el
información. ejem- plos de la antigua incluyen las instrucciones de devolución rendimiento, y cómo pueden filtrar información de los programas en ejecución.
mistraining o regresan de las interrupciones. Ejemplos de estos últimos incluyen la También describimos orientadas al retorno de programación (ROP) y 'aparatos'.
filtración de información a través de variaciones de temporización o por contención
erating ge- en unidades aritméticas.
3
la ejecución de la orden alcanza una bifurcación condicional instrucción ción cuya los datos se recuperan de la memoria caché L1 y utilizado. De lo contrario, en una error
dirección depende de precedente instrucciones cuya ejecución no se ha de caché, se repite el procedimiento para recuperar los datos de la caché de nivel
completado todavía. En tales casos, el procesador puede hacer ahorrar un puesto superior. Además, los datos se almacenan en la caché L1, en caso de que se necesita
de control que contiene su estado actual registro, hacer una predicción en cuanto de nuevo en un futuro próximo. procesadores Intel modernos normalmente tienen tres
al camino que seguirá el programa, y especulativamente ejecutar instrucciones a lo niveles de caché, con cada núcleo que tiene dedicados cachés L1 y L2 y todos los
largo del camino. Si la predicción resulta ser correcto, no se necesita el puesto de núcleos que comparten una memoria caché L3 común, también conocido como el
control y las instrucciones se retiró en el orden de la ejecución del programa. De lo último nivel de caché (LLC).
Para cerrar la brecha de velocidad entre el procesador más rápido y la memoria más descartar el desalojar a la línea que se sondeó posteriormente.
lenta, procesadores utilizan una jerarquía de cachés Suc cesivamente más pequeños
pero más rápidos. Los cachés dividen la memoria en trozos de tamaño fijo llamados líneas,
con tamaños de línea de iCal typ- ser 64 o 128 bytes. Cuando el procesador necesita
2.6 Programación Orientada Retorno
datos de la memoria, se fi cheques primeros si el L1 caché, en la parte superior de la
jerarquía, contiene una copia. En el caso de una acierto de caché, cuando los datos se Programación Orientada-retorno (ROP) [33] es una técnica para la explotación de tampón
encuentra en la caché, la sobre vulnerabilidades de fluencia. Los trabajos téc- nica por el encadenamiento de
4
aparatos que se encuentran en el código de la Vic- tim vulnerables. Más especí de direcciones de memoria en las líneas de caché siendo cual supervisa.
fi camente, el atacante fi NDS primera gad- utilizable se interpone en el binario
víctima. A continuación, utiliza un buffer sobre la vulnerabilidad de flujo para Specter ataques solamente asumen que especulativamente instrucciones eje-
escribir una secuencia de direcciones de aparatos en la pila del programa cuted pueden leer de la memoria que el proceso víctima podría acceder
víctima. Cada aparato realiza algún cálculo antes de ejecutar una instrucción de normalmente, por ejemplo, sin provocar un fallo de página o excepción. Por
retorno. La instrucción de retorno toma la dirección de retorno de la pila, y ejemplo, si un procesador, impediría la ejecución especulativa de instrucciones en
porque el atacante controlar esta dirección, la instrucción de retorno saltar pro- cesos usuario acceda a la memoria del núcleo, el ataque seguirá
efectivamente en la próxima gad- entrar en la cadena. funcionando. [12]. Como resultado, Spectre es ortogonal a abajo por fusión [27],
que explota escenarios donde algunos CPUs permitir la ejecución fuera de orden
de las instrucciones de uso para leer la memoria del núcleo.
3 Ataque general
4 La explotación de la rama condicional Mispre-
Specter ataques inducen una víctima para realizar especulativamente operaciones
dicción
que no se producirían durante la ejecución del programa correcto y que se filtran de
confidencial infor- mación a la víctima a través de un canal lateral al adversario. Nos
Considere el caso de que el código del listado 1 es parte de una función
Fi escriba primera de- variantes que aprovechan la rama condicional mispre-
(tal como una syscall kernel o biblioteca criptográfica) que recibe un
dicciones (Sección 4), a continuación, las variantes que aprovechan la dicción
entero sin signo X desde una fuente no fiable. El proceso que se ejecuta
mispre- de los objetivos de ramas indirectos (sección 5).
el código tiene acceso a una matriz de bytes sin signo array1 de tamaño
la memoria sensible mediante el suministro x = ( dirección de un byte secreto para leer) - ( dirección
de base de array1).
Durante la segunda fase, el procesador ejecuta la instrucción
Por desgracia, durante la ejecución especulativa, la rama dicional con- para la
especulativamente (s) que la transferencia confidencial informa- ción
comprobación de límites puede seguir el camino de polaridad inversa. Por ejemplo,
del contexto víctima en un canal lateral de la microarquitectura. Esto
supongamos que un adversario hace que el código se ejecute de forma que:
puede ser provocado por tener la solicitud tacker franco que la víctima
para realizar una acción (por ejemplo, a través de una syscall, socket,
archivo, etc.). En otros casos, de la tacker en- puede aprovechar la • El valor de X se elige maliciosamente (y fuera de la grada) tal que Array1
ejecución especulativa (mal) de su propio código con el fin de obtener [x] resuelve un byte secreto k en algún lugar de la memoria de la
información sensible desde el mismo proceso (por ejemplo, si el víctima;
código de ataque se recinto de seguridad por un intérprete, compilador
just-in-time o lenguaje 'seguro' y desea leer la memoria que no se • tamaño array1 y matriz2 no están presentes en la caché del cesador pro, pero k se
Esta fi guración caché con puede ocurrir naturalmente o puede ser creado por un
adversario, por ejemplo, mediante la simple lectura de una gran cantidad de memoria para
Para la fase final, se recupera los datos sensibles. Para los ataques Specter llenar la memoria caché con los UE Val- no relacionadas, y luego tener el kernel utilizar la
usando USH fl + recargar o desalojo + recargar, el proceso de recuperación consiste clave secreta en una operación gitimate le-. Si la estructura de la memoria caché es
5
o si la CPU proporciona una instrucción USH caché fl (por ejemplo, el 86 clflush la apoyar la ejecución especulativa [2], y la prueba inicial ha confirmado que los
instrucción), entonces el estado de memoria caché se puede lograr aún más fi procesadores ARM son impactados también.
ciente. ejecución especulativa puede proceder muy por delante del procesador
Cuando el código compilado por encima corre, el procesador comienza principal. Por ejemplo, en una superficie i7 Pro 3 (i7-4650U) que se utiliza
comparando el valor maliciosa de X en contra para la mayoría de las pruebas, el código en Ap- pendix A trabaja con hasta
array1 tamaño. Leyendo tamaño array1 se traduce en una falta de memoria 188 instrucciones simples in- serted en el código fuente entre el ' Si 'Declaración
caché, y el procesador se enfrenta a un retraso sustancial hasta que su valor y el Acceso a la línea array1 / matriz2.
dirección de matriz2 [ k * 256], a continuación, envía una solicitud para leer esta
dirección de la memoria (lo que resulta en otro error de caché). Mientras que la En este código, si las instrucciones compiladas en
lectura de matriz2 está pendiente, el valor de víctima función () fueron ejecutados en un orden estricto programa, la
función sólo leería array1 [ 0..15] desde tamaño array1 = 16. Sin embargo,
cuando se ejecuta especulativamente, fuera de los límites lecturas son
tamaño array1 finalmente llega de DRAM. El sor procesiones se da cuenta de posibles.
que su ejecución especulativa era errónea, y rebobina su estado de registro. los leer bytes de memoria () función hace varias llamadas a la
Sin embargo, en Sors procesiones reales, la lectura especulativa de matriz2 afecta formación víctima función () para hacer que el predictor de saltos
el estado de caché de una manera fi c dirección especí, donde la dirección esperar valores válidos para X, luego llama con un fuera de límites X. El
depende de k. salto condicional mis- predice, y la subsiguiente ejecución especulativa
lee un byte secreto utilizando los límites fuera de la X. El código
Para completar el ataque, el adversario simplemente tiene que detectar el especulativa entonces lee de array2 [array1 [x] * 512],
cambio en el estado de caché para recuperar el byte SE- CRET k. Esto es fácil si matriz2
es legible por el atacante ya que la siguiente lectura a matriz2 [ norte* 256] será filtrar el valor de Array1 [x] en el estado de caché.
rápido para n = k y lento para todos los demás norte ∈ 0..255. De lo contrario, un Para completar el ataque, un simple sonda + ras fl se utiliza para identificar
ataque-y-sonda de Londres [29] se puede inferir k por de- TECCIÓN el desalojo qué línea de caché en matriz2 se cargó, volver a veaing los contenidos de la
causado por la lectura desde matriz2. Alternativamente, el adversario puede llamar memoria. El ataque se repite veces erales SeV, por lo que incluso si el byte
inmediatamente a la función Tar conseguir de nuevo con un valor en la cancha X' y objetivo era inicialmente en caché un-, la primera iteración ponerla en la memoria
medi- seguro de cuánto tiempo tarda la segunda llamada. Si array1 [x '] caché.
El código no optimizado en el Apéndice A lee madamente aproximado de 10 KB
/ segundo en una superficie i7 Pro 3.
4.1 Discusión operaciones de bits) a un valor de en alcance, entonces en el índice de iteración nal
internet está situado a una dirección fuera de límites en simpleByteArray. La variable
Los experimentos se realizaron en múltiples arquitecturas de localJunk se utiliza para asegurar que las operaciones no se han optimizado, y el “| 0 ”Las
procesadores x86, incluyendo Intel Ivy Bridge (i7-3630QM), Intel operaciones actúan como pistas de optimización para el intérprete de JavaScript
Haswell (i7-4650U), Intel Skylake (especi fi cada Xeon en la nube de que los valores son números enteros.
6
1 Si (Índice <simpleByteArray.length) {
2 index = simpleByteArray [índice | 0];
3 index = (((índice * TABLE1_STRIDE) | 0) y (TABLE1_BYTES-1)) | 0;
4 localJunk ^ = probeTable [índice | 0] | 0;
5}
6 RSI andl, 0x1ffffff ; Y tranquiliza JIT que la próxima operación está en la cancha
7 RSI movzxbl, [RSI + r8 * 1] ; Leer de probeTable
8 RSI xorl, RDI ; XOR como resultado la lectura en localJunk
9 REX.W movq RDI, RSI ; Copiar localJunk en RDI
JIT de salida durante el desarrollo, se utilizó la herramienta de línea de cedido un temporizador de alta resolución que proporciona suf resolución fi ciente.
comandos D8. ajuste manual del código fuente de plomo ing hasta el fragmento
anterior se hizo para obtener el valor de
simpleByteArray.length en la memoria local (en lugar de almacenar en caché en
un registro o requiriendo múltiples instrucciones para ir a buscar). Ver Listado 3 5 Envenenamiento Ramas indirectos
para la salida de desmontaje resultante de D8 (que utiliza sintaxis conjunto de AT
& T). instrucciones de salto indirectos tienen la capacidad de saltar a más de
los clflush la instrucción no es accesible desde JavaScript, por lo caché fl dos posibles direcciones de destino. Por ejemplo, las instrucciones x86
ushing se llevó a cabo mediante la lectura de una serie de direcciones a intervalos pueden saltar a una dirección en un registro ( “ eax JMP “), Una dirección
de 4096 bytes de una gran variedad. Debido a la memoria y con caché fi guración en una posición de memoria (” JMP [EAX] ”O“ JMP dword ptr [0x12345678] “),
en procesadores Intel, una serie de ~ 2000 tales lecturas (ing Dependiendo del O una dirección de la pila (” retirado “). ramas indirectos también se admiten
tamaño de la caché del procesador) eran adecuadas desalojar a los datos de las en ARM (por ejemplo, “ MOV PC, R14 “), MIPS (por ejemplo,“ jr $ ra “),
memorias caché del procesador de direcciones que tienen el mismo valor en bits RISC-V (por ejemplo,“ jalr x0, x1,0 “), y otros procesadores.
de dirección 11-6 [38].
Los resultados filtrados se transmiten a través del estado de caché probeTable Si la determinación de la dirección de destino se de- organizada debido a un
[ norte* 4096] para norte ∈ 0..255, por lo que cada intento comienza con un pase fl fallo de caché y el predictor de saltos ha sido mistrained con destinos
maliciosos, ejecución especulativa puede continuar en un lugar elegido por el
ushing que consiste en una serie de lecturas a partir de probeTable [ norte* 4096] utilizando
los valores de n> 256. El caché parece tener varios modos para decidir qué ad- versario. Como resultado, la ejecución especulativa puede rected misdi- a
dirección para desalojar, por lo que para fomentar un modo (menos utilizado lugares que nunca se le ocurrirían durante la ejecución del programa de imate
recientemente) LRU, se utilizaron dos índices, donde el segundo perdía la primera legit-. Si la ejecución especulativa puede dejar efectos secundarios
de varias operaciones. El parámetro de longitud (por ejemplo, [ ebp-0xE0] en el mensurables, esto es extremadamente Power-ful para los atacantes, por
desmontaje) tiene que ser desalojado también. A pesar de que su dirección es ejemplo, la exposición de la memoria víctima, incluso en ausencia de un error
conocida un-, pero sólo hay 64 posibles desplazamientos de 64 bytes rel ativa al de predicción de bifurcación condicional explotable.
límite de 4096 bytes, por lo que los 64 fueron juzgados posibilidades para hallar el
que funciona.
Consideremos el caso en que un atacante tratando de leer la memoria de
la víctima controla los valores de dos registros (denotado R1 y R2) cuando se
JavaScript no proporciona acceso a la rdtscp ins- trucción, y Chrome degrada produce una rama indirecta. Este es un escenario común; funciones que
intencionalmente La exactitud de orientación de su temporizador de alta manipulan los datos recibidos externamente rutinariamente hacen llamadas a
resolución para disuadir temporización en- tachuelas usando performance.now () [ 1]. funciones, mientras que los registros contienen valores que un atacante puede
Sin embargo, la característica de Trabajadores de Web HTML5 hace que sea fácil con- trol. (A menudo estos valores son ignorados por la función; los registros
de CRE comió un hilo separado que disminuye repetidamente un valor en una son empujados en la pila en el comienzo de la función llamada y restaurados al
posición de memoria compartida [18, 32]. Este enfoque final.)
7
Suponiendo que la CPU límites ejecución especulativa de instrucciones predictor para crear una entrada cuya fi temente ics mim- suf la historia de
ejecutables en la memoria de la víctima, el adversario a continuación, tiene la víctima previo a la rama de destino, y cuyo destino es la predicción de
que encontrar un 'aparato', cuya ejecución especulativa perderá memoria la dirección virtual del gadget.
elegido. Por ejemplo, un un aparato tal estaría formado por dos instrucciones Se observaron varias de hardware y del sistema operativo correspondiente
(que no necesariamente necesitan ser adyacentes) donde la primera añade (o opciones implemen- tación, incluyendo:
XORs, resta, etc.) la memoria PAR- TICULARES abordado por R1 en registro
• ejecución especulativa se observó sólo cuando la dirección de destino
R2, seguido de cualquier instrucción que tiene acceso a la memoria en la
del salto era ejecutable por el hilo de la víctima, por lo aparatos tiene
dirección en R2. En este caso, el aparato proporciona el control atacante (a
que estar presente en las regiones memo- ria ejecutables por la víctima.
través de R1) sobre las que la dirección a la fuga y el control (a través de R2)
sobre cómo la memoria perdida se asigna a una dirección que consigue leído
por la segunda instrucción. (El ejemplo tación aplica- en Windows describe
• Cuando múltiples aplicaciones de Windows comparten la misma DLL,
con más detalle un ejemplo proceso de lectura de memoria utilizando un
normalmente se carga una sola copia y (excepto para las páginas que son
aparato tal.)
modi fi como se describe a continuación) se asigna a la misma dirección
virtual para todos los procesos que utilizan la DLL. Aunque sea por un muy
simple aplicación de Windows, las páginas DLL ejecutables en el conjunto de
Numerosos otros escenarios de explotación son posibles,
traba- jando incluyen varios megabytes de código ejecutable, lo que
dependiendo del estado en que se conoce o controlado por el
proporciona un amplio espacio para buscar aparatos.
adversario, donde la información buscada por reside el adversario (por
ejemplo, registros, pila, memoria, etc.), la capacidad del adversario para
controlar especulativa ejecución, qué instrucción secuencias están • Por tanto historymatching y las predicciones, el predictor de saltos
disponibles para formar aparatos, y qué canales puede filtrarse sólo aparece a prestar atención a la rama direcciones virtuales desti-
información de opera- ciones especulativas. Por ejemplo, una función no. La dirección de origen de la instrucción de realizar el salto,
criptográfica que re- convierte un valor secreto en un registro puede direcciones físicas, el tiempo y el ID del proceso no parece importar.
llegar a ser explotable si el atacante simplemente puede inducir
ejecución especulativa en una instrucción que trae a la memoria caché
• El algoritmo que rastrea y partidos saltan histología Ries aparece para
en la dirección especificada en el registro. Del mismo modo, aunque el
utilizar sólo los bajos bits de la dirección virtual (que se reducen aún
ejemplo anterior se supone que el atacante controla dos registros (R1 y
más por función hash simple). Como resultado, un adversario hace no tienen
R2), atacante el control de un solo ister REG, el valor en la pila,
que ser capaces de incluso ejecutar código en cualquiera de las
direcciones de memoria que contienen instrucción de salto de la víctima.
ASLR también puede ser compensada, ya bits superiores se ignoran y
los bits 15..0 no parecen ser aleatorios con ASLR en Win32 o Win64.
En muchos sentidos, la explotación es similar a la programación orientada
Regresar- (ROP), excepto que el software escrito correctamente- es vulnerable,
aparatos están limitadas en su duración, pero no tienen por qué terminan de forma
inadecuada (ya que el CPUwill finalmente reconocer el error especulativa), y
• El predictor de saltos aprende de saltos a destinos ilegales. A pesar de
aparatos deben datos infiltrado ex a través de canales laterales, más que de forma
que una excepción se activa en el proceso del atacante, esto puede ser
explícita. Aún así, la ejecución especulativa puede realizar secuencias complejas
capturado fácilmente (por ejemplo, utilizando trata de atraparlo en C ++).
com- de instrucciones, incluyendo la lectura de la pila, la realización de la
El predictor de saltos a continuación, hacer predicciones que envían otro procesos
aritmética, de ramificación (incluyendo varias veces), y la memoria de lectura.
al destino ilegal.
Pruebas, sobre todo en una superficie Pro basados en Haswell 3, con fi rmaron que
• código DLL y regiones constantes de datos pueden ser leídos y
el código que se ejecuta en una hiper-hilo de procesadores Intel x86 puede mistrain
clflush 'Ed por cualquier proceso mediante el DLL, haciéndolos conveniente
el predictor de saltos de código que se ejecuta en la misma CPU de una manera
para su uso como áreas de tabla en fl ataques sonda Ushuaia-y-.
diferente hiper-hilo. Las pruebas en Skylake indicaron adicionalmente rama
mistraining historia entre procesos en el mismo CPU virtual (que probablemente se
produce en Haswell también). • regiones DLL pueden ser escritos por las aplicaciones. Se utiliza un mecanismo de
contra copia en escritura, por lo que estos cationes modificadores son accesibles
El predictor de saltos mantiene una caché que se asigna a las solamente con el proceso que realiza el catión modificado. Aún así, la formación mis-
historias de salto a salto destinos previstos, por lo mistraining cessful predictor de saltos esta simpli fi ca porque esto permite que aparatos para regresar
8
durante mistraining, independientemente de lo que las instrucciones siguen el ejecución especulativa de este gadget con attacker- controlada EBX y edi
gadget. permite a un adversario para leer la memoria de la víctima. Si el
adversario elige EBX =
Aunque la prueba se realizó con aplica- ciones de 32 bits en Windows 8, los
metro - 0x13BE13BD - EDX, dónde EDX = 3 para el programa de ejemplo (como se
modos de 64 bits y otras versiones de Windows y Linux bibliotecas compartidas son
determina mediante la ejecución en un depurador), la instrucción primera lee el valor
propensos a trabajar de manera similar. las pruebas en modo kernel no se ha
de 32 bits de dirección metro y añade esto a edi. ( En la víctima, el AG de transporte
realizado, pero la combinación de dirección de truncamiento / hash en el ajuste de la
fl pasa a ser clara, por lo que no se añade ningún equipaje adicional.) Desde edi
historia y la capacidad de formación a través de saltos a tinations des- ilegales
sugieren que los ataques contra el modo de núcleo puede ser posible. El efecto
También está controlado por el atacante, ejecución especulativa de la
sobre otros tipos de saltos, como terrupts de entrada y de interrumpir las
segunda instrucción va a leer (y traer a la memoria caché) de la memoria
devoluciones, también se desconoce.
cuya dirección es la suma del valor de 32 bits cargado de dirección metro y
el atacante-elegido
edi. Por lo tanto, el atacante puede asignar el 2 32 Los valores posibles de memoria
5.2 Ejemplo de Aplicación en Windows en regiones más pequeñas, que luego pueden ser analizados a través de
ras-y-sonda para resolver bytes de memoria. Por ejem- plo, si los bytes en m + 2 y m
Como prueba de concepto-, un sencillo programa estaba escrito que genera una
+ 3 son conocidos, el valor en edi puede cancelar su contribución y el mapa de la
clave aleatoria y luego hace un bucle en el finito que llama Sueño (0), cargas los
segunda lectura a una región de 64 KB, que se puede probar fácilmente a través
primeros bytes de un fi le (por ejemplo, como una cabecera), las llamadas funciones
de-y-sonda ras fl.
de cifrado de Windows para com- PUTE el hash SHA-1 de (tecla || cabecera), e
imprime el hash cada vez que cambia de cabecera. Cuando este programa se
La operación elegido para mistraining rama fue la primera instrucción de
compila con la optimización, la llamada a Dormir() y se enviaran con los datos
la Dormir() función, que es un salto de la forma “ JMP PTR DWORD ds:
contenidos en los registros fi l EBX y edi. se tomó ningún esfuerzo espe- cial para
[76AE0078h] ”(Donde tanto la ubicación del destino de salto y el destino en sí
hacer esto; como se señaló anteriormente, las llamadas ción fun- con valores
cambian por arranque debido a un ASLR). Esta instrucción de salto fue
adversario-elegido en los registros son comunes, aunque la especificidad cs (tales
elegido porque parecía que el proceso de ataque podría clflush la dirección
como qué valores pera AP- en el que se registra) a menudo determinado por
de destino, al- aunque (como se señala más adelante) esto no funcionó.
optimizaciones Piler com- y culto fi por lo tanto dif de predecir a partir de código
Además, a diferencia de una instrucción de retorno, no hubo ciones opera-
fuente. El programa de prueba no incluyó ninguna operación ushing miem- ORY fl u
adyacentes podrían un-desalojar a la dirección de retorno (por ejemplo,
otras adaptaciones para ayudar al atacante.
mediante el acceso a la pila) y limitar la ejecución especulativa.
9
Dormir() saltará a la dirección de dispositivo (mistrain- ing del predictor de ulative ejecución. futuros procesadores (o procesadores existentes con diferente
• Hilo (s) se pusieron en marcha a mistrain dictor la rama pre. Estos de ciones mitiga-.
encontró durante un proceso de formación inicial (véase más adelante). medir el tiempo de las operaciones que dependen del estado de la memoria
Los hilos mistraining ejecutan un bucle que empuja las direcciones caché. Esta técnica se puede adaptar para utilizar Spectre como sigue.
asignadas en la pila de tal manera que un iniciador retirado Resultados de Considere el código:
instrucciones en el procesador que realizan una serie de instrucciones de
devolución en la región memo- ria, luego se ramifica a la dirección de si (falsos pero mispredicts como verdadero)
aparato, entonces (a causa de la retirado colocado allí) volver leer array1 [R1] leer [R2]
inmediatamente vuelve al bucle. Para fomentar hyperthreading de la
rosca mistraining y la víctima, el desalojo y los hilos de sondeo puesto su
CPU fi nidad de compartir un núcleo (que mantienen ocupado), dejando a Supongamos registro R1 contiene un valor secreto. Si la memoria
la víctima y mistraining hilos para compartir el resto de los núcleos. especulativamente ejecutado leer de array1 [R1] es un acierto de caché, entonces
nada va a ir en el bus de la memoria y la lectura de [ R2] iniciará rápidamente. Si la
lectura de array1 [R1] es un fallo de caché, entonces la segunda lectura puede
llevar más tiempo, resultando en diferentes momentos para el Vic- tim hilo.
Además, otros componentes en el sistema que puede acceder a la memoria (tales
• Durante la fase inicial de conseguir la rama predicción tor mistraining de
como otros procesadores) pueden ser capaces de la presencia de la actividad en el
trabajo, la víctima se suministra con una entrada que, cuando la víctima
bus de memoria o de otros efectos de la memoria de lectura (por ejemplo,
llamadas Sleep (), [ebx +
cambiando la dirección de fila DRAM seleccionar). Observamos que este ataque, a
3 h + 13 SER 13 BDH] leerá un lugar DLL se conoce y cuyo valor edi se
diferencia de los que hemos puesto en marcha, podría funcionar incluso si la
elige de manera que la operación ond sec- apuntará a otra
ejecución especulativa no modifica el contenido de la caché. Todo lo que se
ubicación que se puede controlar fácilmente. Con estos ajustes, la
requiere es que el estado de la memoria caché AF efec- la sincronización de
secuencia de entrenamiento rama se ajusta para compensar
código especulativamente ejecutado o alguna otra propiedad que en última
ASLR de la víctima.
instancia se convierte es visible para el atacante.
• Por último, una vez que se encuentra una secuencia de salto mímica eficaz,
el atacante puede leer a través del espacio vestido de Ad- de la víctima para
localizar y leer las regiones de datos víctima para localizar valores (que El tiempo de instrucción. vulnerabilidades Specter no nece- sariamente
pueden moverse debido a ASLR) por con- arrastre los valores de EBX y edi y necesitan involucrar cachés. Instrucciones de cuyos ing TIMING depende de
los valores de los operandos pueden tener fugas formación in- en los
el uso de fl ush- y-sonda en la región DLL seleccionado anteriormente. El
operandos [8]. En el siguiente ejemplo, el multiplicador es ocupado por la
ataque completado permite la lectura de la memoria del proceso víctima.
ejecución especulativa de multiplican R1, R2. El momento en que cuando el
multiplicador esté disponible para multiplican R3, R4 ( ya sea para la ejecución
fuera de orden o después de que se reconoció la predicción errónea) podría ser
afectada por la temporización de la primera multiplicación, revelar información
ataques Hasta ahora hemos demostrado que los cambios de apalancamiento en el estado
de la memoria caché que se producen durante espec- si (falsos pero mispredicts como verdadero)
10
multiplican R1, R2 Esto es diferente de garantizar que la ejecución especulativa no ocurrirá o filtrar
multiplican R3, R4 información. Como resultado, las instrucciones ción serializa- pueden no ser una
contramedida eficaz en todos los procesadores o con fi guraciones del sistema.
Contención en el registro del archivo. Supongamos que la CPU tiene un registro fi l Además, de las tres instrucciones de números de serie en modo de usuario
con un número finito de registros disponibles para el almacenamiento de los enumerados por Intel, sólo se cpuid Se puede utilizar en código normal, y se de-
puestos de control para la ejecución especulativa. En el siguiente ejemplo, si condición stroys muchos registros. los mfence y lfence ( pero no
puede detectar este punto de control, por ejemplo, si espec- la ejecución de código destruyen el contenido del registro. Su comportamiento con respecto a la ejecución
en ulative hyperthreads se reduce debido a la escasez de almacenamiento, esto especulativa no es de- fi nida, sin embargo, por lo que puede que no funcione en
revela información acerca de todas las CPUs o Systematic TEM con fi guración. 1 Las pruebas en las CPU no es de
R1. trabajar, ellos tendrían que ser muy largo ya que la ejecución especulativa se
Aprovechando efectos observables arbitrarias. Prácticamente cualquier efecto software. Podría ser posible desactivar el hyperthreading y el estado de
observable de código especulativamente ejecutado se puede aprovechar para filtrar predicción de saltos USH fl durante cambios de contexto, aunque no parece
información sensible. haber ningún método de fi nida arquitectónicamente-de para hacer esto [14].
Considere el ejemplo de la Lista 1, donde la operación después de que el Esto también no puede hacer frente a todos los casos, como cambiar()
operación observable dependerá del estado de caché matriz2. (Esta situación es probable que ocurra en los intérpretes y analizadores).
Además, la aplicabilidad de ejecución especulativa siguiente otras formas de
saltos, tales como los implicados en manejo de interrupciones, también son
si (x <array1_size) { actualmente desconocido y tienden a variar entre procesadores.
y = array2 [array1 [x] * 256]; // hacer algo mediante Y que es
observable // cuando se ejecuta especulativamente} La practicidad de equis microcódigo Fi para Sors procesiones existentes es
también desconocido. Es posible que un parche podría dis- ejecución especulativa
capaz de prevenir o miem- especulativa ORY lee, pero esto traería una reducción
del rendimiento significativo. Amortiguando las acciones iniciadas memoria
especulativamente-trans por separado de la memoria caché hasta que se confirma
7 opciones de mitigación
la ejecución especulativa no es una contramedida su fi ciente, ya que el tiempo de
La vulnerabilidad de bifurcación condicional puede mitigarse si la ejecución ejecución especulativa también puede revelar información. Por ejemplo, si la
especulativa se puede detener en potentially- rutas de ejecución sensibles. En ejecución especulativa utiliza un valor sensible para formar la dirección para una
los procesadores x86 de Intel, “instrucciones rializing Se-” parecen hacer esto lectura de memoria,
11
el estado de caché de lectura que afectará a la fecha de la próxima operación termeasures descritos en la sección anterior puede ayudar a limitar hazañas
especulativa. Si el tiempo de funciona- miento que se puede inferir, por ejemplo, prácticos en el corto plazo, actualmente no hay manera de saber si una
porque afecta a un recurso tal como un bus o ALU utilizado por otros hilos, la construcción código particular es, o no es, seguro a través de los procesadores
memo- ria se vea comprometida. En términos más generales, las medidas de hoy en día - mucho menos futuros diseños.
posibles contramedidas limitadas a la memoria caché es probable que sean insu
fi ciente, ya que hay otras maneras de que la ejecución especulativa puede filtrar Una gran cantidad de trabajo por delante. la seguridad del software depende
información. Por ejemplo, el momento de efec- tos de contención del bus de fundamentalmente de tener una clara com- prensión común entre los
memoria, DRAM dirección de fila estado de selección, disponibilidad de registros desarrolladores de software y hardware en cuanto a qué información de la CPU
virtuales, ALU tividad AC, y el estado del predictor de saltos en sí deben ser son puestas en práctica (y no son) permite exponer de cómputos. Como resul-
considerados. Por supuesto, la ejecución especulativa también afectará canales tado, las soluciones a largo plazo, será necesario que se actualicen las
laterales convencionales, tales como el poder y la EM. arquitecturas del conjunto de instrucciones para incluir una orientación clara
acerca de las propiedades de seguridad del procesador, y la CPU imple- tendrá
que ser actualizado para cumplir mentaciones.
Como resultado, cualquier software o microcódigo countermea- seguro intentos En términos más generales, hay un equilibrio entre la seguridad y el rendimiento.
deben ser vistos como medidas provisionales en espera de más investigaciones. Las vulnerabilidades en este documento, así como muchos otros, se derivan de un
enfoque de muchos años en la industria de la tecnología en maximizar el
rendimiento. Como resultado, los procesadores, los compiladores, controladores de
dispositivos, sistemas operativos, y numerosos otros componentes críticos han
8 Conclusiones y trabajo futuro
evolucionado capas de composición de optimizaciones complejas que introducen
riesgos de seguridad. A medida que los costos de la subida inseguridad, estas
técnicas de aislamiento de software están muy ampliamente de- pleados bajo una
opciones de diseño deben ser revisados, y en muchos casos se requerirá
variedad de nombres, incluyendo ING sandbox-, la separación de procesos,
implementaciones alternativas optimizados para la se- guridad.
contenedores, seguridad de memoria, código de prueba de carga. Un supuesto la
seguridad fundamental que sustenta todo esto es que la CPU fielmente software,
incluyendo sus controles de seguridad. la ejecución especulativa por desgracia
viola este supuesto en formas que permiten a los adversarios a violar el secreto
(pero no la integridad) de la memoria y el contenido del registro. Como resul- tado, 9 Agradecimientos
una amplia gama de enfoques de aislamiento de software son impactados.
Además, las contramedidas existentes para almacenar en caché los ataques Este trabajo se superpone parcialmente con el trabajo independiente por parte de Google
instrucciones de 'oficialmente' ejecutados, no los efectos debidos a la ejecución Nos gustaría dar las gracias a Intel para su manipu- manipulan de profesional de
especulativa, y están también afectados. este tema a través de una línea de comunicación clara y tiempo- que conecta todos los
aspectos de la CPU víctima y soft- ware y la capacidad del adversario para Daniel Gruss, Moritz Lipp, Stefan Mangard y Michael Schwarz
interactuar con la víctima. Mientras que los ataques basados en la red son fueron apoyados por el Consejo Europeo Re (ERC) busca bajo hori-
concebibles, situaciones donde un atacante puede ejecutar código en la misma CPU zon 2020 (acuerdo de subvención n 681402) programa de
como la víctima plantean el riesgo primario. En estos casos, explota- ción puede ser investigación y de innovación de la Unión Europea.
sencillo, mientras que otros ataques pueden depen- derá en minucias tales como
opciones elegidas por el compilador de la víctima en la asignación de registros y la Daniel Genkin fue apoyado por NSF premios
memoria. herramientas de fuzzing probabilidades pueden ser adaptados por los # 1514261 y # 1652259, premio de asistencia fi nanciera
adversarios a fi nd habilidades vulnerabilidad en el software actual. 70NANB15H328 del Departamento de Com- merce, Instituto Nacional
de Estándares y tec- nología, la 2017-2018 Rothschild beca
posdoctoral, y la Agencia de Investigación de Proyectos Avanzados de
Como el ataque implica efectos hard- ware actualmente indocumentados, Defensa (DARPA) bajo el contrato # FA8650- 16-C-7622.
explotabilidad de un programa de software determinado puede variar entre los
procesadores. Por ejemplo, algunas pruebas del cambio de dirección de rama
indirecta trabajaron en Skylake pero no en Haswell. AMD afirma que sus referencias
procesadores Ryzen tienen “una red neuronal de inteligencia arti fi cial que aprende
[1] Seguridad: Chrome proporciona temporizadores de alta resolución que permiten
a prede- cir qué vía una aplicación futura se toman sobre la base de carreras
ataques de canal lateral de caché. https://bugs.chromium.org/p/ de cromo / temas /
pasadas” [3, 5], lo que implica incluso el comportamiento ulative espec- más detalle? id = 508166.
complejo. Como resultado, mientras que el paliativo Con- [2] Manual de Cortex-A9 de referencia técnica, r4p1 Revisión, Sección
11.4.1, 2012.
12
[3] AMD lleva el cómputo de un nuevo horizonte con procesadores Ryzen, [20] G RUSS, D., S PREITZER, R., Y M ANGARD, S. Cache ataques placa tem-: Automatización
2016. https://www.amd.com/en-us/press-releases/ Páginas / de los ataques a las memorias caché de nivel última incluido. En USENIX Simposio de
AMD-takes-computing-2016dec13.aspx. Seguridad ( 2015), USENIX Asociación, pp. 897-912. [21] G ULLASCH, D., B ANGERTER, E.,
[4] Intel 64 y manual desarrollador de software arquitecturas-32 IA, vol Y K RENN, juegos S. Cache - con lo que los ataques de caché basados en el acceso de
3: Guía del programador del sistema, sección 8.3, 2016. [5] La tecnología AMD AES a la práctica. En 2011 Simposio IEEE sobre Seguridad y Privacidad ( Mayo 2011),
SenseMI - predicción de red neural. promocional IEEE Computer Society Press, pp. 490-505. [22] K IM, Y., D ALY, R., K IM, J., F ALLIN, C., L
entrevista en video con Robert Hallock de AMD, 2017. https: EE, JH, L EE,
//www.youtube.com/watch?v=uZRih6APtiQ.
[6] Un CIIC ¸ MEZ, O., G UERON, S., Y S Eifert, J.-P. Las nuevas vulnerabilidades en
OpenSSL predicción de saltos y contramedidas software necesario. En 11ª Conferencia D., W ILKERSON, C., L AI, K., Y M UTLU, O. Dar la vuelta-
los bits de ping en la memoria sin acceder a ellos: Un estudio tal experimentación de
Internacional IMA en tografía Cryp- y Codificación ( De diciembre de 2007), SD
errores de perturbación DRAM, 2014. https: //
Galbraith, Ed., Vol. 4887 de Lecture Notes in Computer Science, Springer, Heidelberg,
users.ece.cmu.edu/~yoonguk/papers/kim-isca14.pdf.
pp. 185-203. [7] A CIIC ¸ MEZ, O., K OC ¸, C ETIN K AYA., Y S Eifert, J.-P. Pre dicting claves
secretas a través de la predicción de saltos. En Temas en la criptología [23] K ocre, P., J de AFFE, J., Y J ONU, B. Diferencial análi- sis de energía. En CRYPTO
1999 ( 1999), Springer, pp. 388-397.
[24] K ocre, P., J de AFFE, J., J ONU, B., Y R OHATGI, ción P. introducción al diferencial de
- CT-RSA 2007 ( Feb. 2007), M. Abe, Ed., Vol. 4377 de Lecture Notes in Computer
análisis de potencia. Journal of criptográfico En- gineering 1, 1 (2011), 5-27. [25] K
Science, Springer, Heidelberg, pp. 225-242. [8] Un NDRYSCO, M., K OHLBRENNER, D., M
ocre, ataques de temporización de PC en implementaciones de di fi e- Hellman, RSA,
OWERY, K., J HALA,
DSS, y otros sistemas.
R., L Erner, S., Y S Hacham, H. En subnormales punto flotante y la sincronización
En CRYPTO 1996
anormal. En 2015 Simposio IEEE sobre Seguridad y Privacidad ( De mayo de 2015),
(1996), Springer, pp. 104-113. [26] L EE, S., S HIH, M., G ERA, P., K IM, T., K IM, H.,
IEEE Computer Society Press, pp. 623-
639. Y
P EINADO, M. Inferir fi de control de grano fino flujo dentro SGX enclaves con
[9] B ERNSTEIN, ataques a AES DJ Cache-sincronización. http:
sombreado rama. En posium 26 USENIX de Seguridad sim-, USENIX de Seguridad
//cr.yp.to/papers.html#cachetiming, 2005.
2017, Vancouver, BC, Canadá, 16-18 de agosto de 2017. ( 2017), pp. 557-574.
[10] B HATTACHARYA, S., M AURICE, C., Y B Hasin, S HIVAM
ABD M UKHOPADHYAY, RE. ataque de plantilla en ciego
[27] L IPP, M., S CHWARZ, M., G RUSS, D., P Rescher, T., H AAS,
multiplicación escalar con llamadas ioctl-perf asíncronos. logía Cryp- ePrint Archivo,
W., M ANGARD, S., K ocre, P., G Enkin, D., Y amplitud del movimiento activo, Y., Y H
Informe 2017/968, 2017. http: //
Amburg, M. Meltdown. Sin publicar, 2018.
eprint.iacr.org/2017/968.
[28] L IU, F., Y amplitud del movimiento activo, Y., G MI, Q., H EISER, G., Y L EE, RB de caché de nivel Última
[11] E VTYUSHKIN, D., P ONOMAREV, DV, Y UN BU
ataques de canal lateral son prácticos. En IEEE sim- posium sobre seguridad y privacidad (S & P)
GRAMO HAZALEH, nótese bien Saltar por encima de ASLR: Rama de atacar
predictores para eludir ASLR. En MICRO ( 2016), IEEE Computer Society, pp. 1-13. 2015 ( 2015), IEEE.
[12] F OGH, A. Resultado negativo: La lectura de la memoria del núcleo desde el [29] O Svik, DA, S Hamir, A., Y T ROMER, E. ataques de caché y contramedidas: El caso de
modo de usuario, 2017. https://cyber.wtf/2017/07/28/negativeresult-reading-kernel-memory-from-user-mode/.
AES. En Temas en la criptología
- CT-RSA 2006 ( De febrero de 2006), D. Pointcheval, Ed., Vol. 3860 de
Lecture Notes in Computer Science, Springer, Heidelberg, pp. 1-
20.
[13] G MI, Q., Y amplitud del movimiento activo, Y., C OCK, D., Y H EISER, G. Una encuesta de
ataques puntuales microarquitectura y las contramedidas en el hardware temporal con-. J. [30] P ERCIVAL, C. caché que faltan para la diversión y fi nes. http: //
criptográfico Ingeniería ( 2016). www.daemonology.net/papers/htt.pdf, 2005.
[14] G MI, Q., Y amplitud del movimiento activo, Y., Y H EISER, G. Su procesador fugas de información - y [31] Q UISQUATER, J.-J., Y S AMYDE, D. electromagnética análi- sis (EMA): Medidas y
no hay nada que pueda hacer al respecto. Corr abs / 1612.04474 ( 2017). contramedidas para tarjetas inteligentes. En
E-Smart 2001 ( 2001), pp. 200-210.
[15] G Enkin, D., P ACHMANOV, L., P IPMAN, I., S Hamir, A., Y [32] S CHWARZ, M., M AURICE, C, G RUSS, D., Y M ANGARD, S. temporizadores fantásticos y
T ROMER, E. ataques de extracción tecla física del PC. Commun. ACM 59, 6 (2016), dónde hallar ellos: de alta resolución microar- ataques chitectural en JavaScript.
70-79. [16] G Enkin, D., P ACHMANOV, L., P IPMAN, I., T ROMER, E., Y En Conferencia Internacional
en criptografía y seguridad de datos financieros ( 2017), Springer, pp. 247-267. [33]
Y amplitud del movimiento activo, Y. ECDSA extracción clave de los dispositivos móviles a través de los S Hacham, H. La geometría de carne inocente en el hueso: el retorno-en-libc sin
canales secundarios físicos no intrusivos. En Conferencia ACM sobre llamadas de función (en el 86). En ACM CCS 07: 14ª Conferencia de Informática y
Informática y Comunicaciones de Seguridad CCS 2016 ( Oct. 2016), pp. 1626-1638. Comunicaciones de Seguridad
[17] G Enkin, D., S Hamir, A., Y T ROMER, ex- tracción clave RSA E. través de
criptoanálisis acústico bajo ancho de banda. En CRYPTO 2014 (Oct. 2007), P. Ning, SDC di Vimercati, y PF Syverson, Eds., ACM Press, pp.
OS, H., Y G UITA Simposio de Seguridad, 2017. [35] T Sunoo, Y., S AITO, T., S Uzaki, T., S HIGERI, M., Y
FRIDA, C. ASLR en la línea: ataques de caché prácticos sobre la MMU, 2017. http://www.cs.vu.nl/~giuffrida/papers/
ANC-ndss-2017.pdf.
13
[36] Y amplitud del movimiento activo, Y., Y F ALKNER, K. FLUSH + Actualizar: Una alta resolución, de
poco ruido, L3 cache ataque de canal lateral. En USENIX Simposio de Seguridad ( 2014),
USENIX Asociación, pp. 719-732.
[37] Y amplitud del movimiento activo, Y., Y F ALKNER, K. F LUSH + R ELOAD: Una alta reso-
lución, de poco ruido, caché L3 ataque de canal lateral. En USENIX segu- ridad
Simposio 2014 ( 2014), USENIXAssociation, pp. 719-732.
[38] Y amplitud del movimiento activo, Y., G MI, P., L UI, HUIR, RB, Y H EISER, G. Mapeo de la
memoria caché de nivel último de Intel. Criptología ePrint Archivo, Informe 2015/905,
2015. http://eprint.iacr.org/2015/905.
14
Un espectro ejemplo de implementación
1# incluir <stdio.h>
2# incluir <stdlib.h>
3# incluir <stdint.h>
#4 ifdef _MSC_VER
5# incluir <intrin.hy> / * Para rdtscp y clflush * /
6# Optimizar pragma ( "GT" ,en)
7# más
#8 incluir <x86intrin.h> / * Para rdtscp y clflush * /
9# terminara si
10 11 / ************************************************* *******************
12 código víctima.
13 ************************************************** ****************** /
25 si (x <array1_size) {
26 temp & = array2 [array1 [x] * 512];
27 }
28} 29 30 31 / ************************************************* *******************
32 código de análisis
33 ************************************************** ****************** /
64 / * Llame a la víctima! * /
sesenta y cinco victim_function (x);
15
66 }
67
68 / * Tiempo lee. Fin se mezcla suavemente hacia arriba para evitar la predicción zancada * /
69 for (i = 0; i <256; i ++) {
70 mix_i = ((i * 167) + 13) y 255;
71 addr = & array2 [mix_i * 512];
72 time1 = __rdtscp (y no deseado); / * * LEER TEMPORIZADOR /
100 size_t malicious_x = ( size_t )(secreto-( carbonizarse *) Array1); / * Por defecto para malicious_x * /
101 En t i, SCORE [2], len = 40;
102 valor uint8_t [2];
103
Listado 4: Una memoria de lectura demostración del uso de un ataque Spectre en x86.
dieciséis