Desde Linux Darkcrizt  

SQUIP, un nuevo ataque que afecta a procesadores AMD y conduce a la fuga de datos

 

Un grupo de investigadores de la Universidad Tecnológica de Graz (Austria), anteriormente conocido por desarrollar los ataques MDS, NetSpectre, Throwhammer y ZombieLoad, ha revelado un nuevo ataque de canal lateral (CVE-2021-46778) en la cola del programador del procesador AMD utilizada para programar la ejecución de instrucciones en diferentes unidades de ejecución de la CPU.

El ataque, llamado SQUIP, permite determinar los datos utilizados en los cálculos en otro proceso o máquina virtual u organizar un canal de comunicación oculto entre procesos o máquinas virtuales que permite intercambiar datos sin pasar por los mecanismos de control de acceso al sistema.

Las CPU de AMD basadas en microarquitecturas Zen de 1.ª, 2.ª y 3.ª generación (AMD Ryzen 2000-5000, AMD Ryzen Threadripper, AMD Athlon 3000, AMD EPYC) se ven afectadas cuando se utiliza la tecnología Simultaneous Multithreading (SMT).

Las CPU modernas utilizan un diseño superescalar, donde se ejecutan múltiples instrucciones simultáneamente para maximizar la actuación. Estas CPU procesan instrucciones en una canalización a través de varias etapas: (1) buscar, (2) decodificar, (3) programar/ejecutar y (4) retirar.

El ataque se basa en evaluar el nivel de ocurrencia de contención (contention level) en diferentes colas del planificador y se realiza a través de la medición de retrasos al iniciar operaciones de verificación realizadas en otro hilo SMT en la misma CPU física. Para analizar el contenido se utilizó el método Prime+Probe, que implica llenar la cola con un conjunto de valores de referencia y determinar los cambios midiendo el tiempo de acceso a los mismos al momento de la recarga.

La etapa de programar/ejecutar puede procesar instrucciones desordenadas para maximizar la instrucción paralelismo de niveles. Describimos brevemente cada una de estas etapas:

-Buscar. La CPU busca la siguiente instrucción a ejecutar de la caché L1i. 
-Decodificar. Para permitir una ejecución eficiente, las instrucciones obtenidas (operaciones macro) se decodifican en una o varias microoperaciones más simples (µops) y se colocan en una cola µop. Estos µops son alimentados en el backend, donde se programan y ejecutan.
-Programar/Ejecutar. El(los) programador(es) rastrea(n) qué µops estan listos para su ejecución (tener entradas disponibles) y dinámicamente los programa (de manera desordenada) a las unidades de ejecución disponibles. Un núcleo de CPU tiene múltiples unidades de ejecución y puede tener múltiples unidades aritméticas y lógicas (ALU), ramas de unidades de ejecución (BRU), unidades de generación de direcciones (AGU).

Durante el experimento, los investigadores pudieron recrear por completo la clave RSA privada de 4096 bits utilizada para crear firmas digitales utilizando la biblioteca criptográfica mbedTLS 3.0, que utiliza el algoritmo de Montgomery para elevar un número a un módulo de potencia. Se necesitaron 50.500 rastros para determinar la clave.

El tiempo total de ataque tomó 38 minutos. Se demuestran variantes de ataque que proporcionan una fuga entre diferentes procesos y máquinas virtuales controladas por el hipervisor KVM. También se muestra que el método se puede utilizar para organizar la transferencia de datos encubierta entre máquinas virtuales a una velocidad de 0,89 Mbit/s y entre procesos a una velocidad de 2,70 Mbit/s con una tasa de error inferior al 0,8 %.

El núcleo de la CPU se divide en múltiples núcleos lógicos o subprocesos, ejecutando flujos de instrucciones independientes pero compartiendo recursos como el caché L1i. µops de estos hilos tambien comparten las unidades de ejecución dinámicamente para permitir un mayor total utilización. La partición de diferentes partes del núcleo.
se realiza mediante el intercambio competitivo. Las arquitecturas AMD Zen permiten dos hilos
por núcleo. Estos hilos pueden ser de un solo programa o de diferentes programas, según lo gestionado por el sistema operativo.

Los procesadores Intel no son susceptibles a ataques, ya que utilizan una única cola de programación, mientras que los procesadores AMD vulnerables utilizan colas independientes para cada unidad de ejecución.

Como solución para bloquear la fuga de información, AMD recomendó que los desarrolladores utilicen algoritmos que siempre realicen cálculos matemáticos en tiempo constante, independientemente de la naturaleza de los datos que se procesen, y que también eviten la bifurcación basada en datos secretos.

Finalmente si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.

Leave A Comment

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.