La empresa Intel una actualización de microcódigo que elimina (CVE-2019-14607), a través de manipulaciones con el mecanismo de control dinámico de voltaje y frecuencia en el CPU iniciar la corrupción de los datos en celdas de memoria, incluso en áreas utilizadas para cálculos en enclaves aislados de Intel SGX. Este ataque ha sido denominado Plundervolt y potencialmente permite a un usuario local elevar sus privilegios en el sistema, provocar un fallo en el servicio y acceder a datos confidenciales.
El ataque representa un peligro únicamente en el contexto de manipulaciones en los cálculos dentro de los enclaves SGX, ya que requiere privilegios de root en el sistema para llevarse a cabo. En el caso más simple, un atacante puede provocar distorsiones en la información procesada en el enclave, pero en escenarios más complejos no se descarta la posibilidad de recrear claves privadas almacenadas en el enclave, utilizadas para la cifrado con algoritmos RSA-CRT y AES-NI. La técnica también puede usarse para generar errores en algoritmos inicialmente correctos, provocando la aparición de vulnerabilidades al manejar memoria, por ejemplo, al facilitar el acceso a áreas fuera del búfer asignado.
Código de prototipo para llevar a cabo el ataque en GitHub
La esencia del método es crear condiciones que generen distorsiones imprevistas en los datos durante los cálculos en SGX, a las cuales no protege el uso de cifrado y autenticación de memoria en el enclave. Para introducir distorsiones, fue posible utilizar interfaces de programación estándar para gestionar la frecuencia y el voltaje, normalmente aplicadas para reducir el consumo energético durante el inactivo del sistema y activar el máximo rendimiento durante operaciones intensivas. Las características de frecuencia y voltaje abarcan todo el chip, afectando también la ejecución de cálculos en el enclave aislado.
Al modificar el voltaje, se pueden crear condiciones donde no hay suficiente carga para regenerar una celda de memoria dentro del CPU, lo que lleva a un cambio en su valor. La principal diferencia respecto al ataque es lo que RowHammer permite modificar el contenido de bits individuales en la memoria DRAM al leer cíclicamente datos de celdas adyacentes, mientras que Plundervolt permite alterar bits dentro de la CPU cuando los datos ya han sido cargados desde la memoria para realizar cálculos. Esta característica permite eludir los mecanismos de control de integridad y cifrado de datos en memoria utilizados en SGX, ya que los valores en memoria permanecen correctos, pero pueden distorsionarse durante las operaciones, antes de que el resultado se escriba en la memoria.
Si este valor modificado se utiliza en el proceso de multiplicación durante el cifrado, la salida resultante será un texto cifrado incorrecto. Al tener la capacidad de llamar a un manejador en SGX para cifrar sus datos, un atacante puede, al provocar fallos, acumular estadísticas sobre cómo cambia el texto cifrado en la salida y, en cuestión de minutos, recuperar el valor de la clave almacenada en el enclave. El texto original en la entrada y el texto cifrado correcto en la salida son conocidos, la clave no cambia, y la salida de un texto cifrado incorrecto indica que algún bit se ha distorsionado a un valor opuesto.
Al analizar los pares acumulados de valores correctos y distorsionados de textos cifrados obtenidos en diferentes fallos, a través de métodos de análisis diferencial de fallos (DFA, ) se puede las claves probables utilizadas para el cifrado simétrico AES, y luego, analizando las intersecciones de claves en diferentes conjuntos, determinar la clave buscada.

El problema afecta a varios modelos de procesadores Intel, incluidos los CPU Intel Core de 6
a 10 generación, así como la quinta y sexta generación de Xeon E3, las primeras y segundas generaciones de Intel Xeon Scalable, Xeon D,
Xeon W y Xeon E.
Recordemos que la tecnología SGX () apareció en los procesadores Intel Core de sexta generación (Skylake) y una serie de instrucciones que permiten a las aplicaciones de nivel de usuario acceder a áreas de memoria cerradas — enclaves, cuyo contenido no puede ser leído o modificado ni siquiera por el núcleo y el código que se ejecuta en los modos ring0, SMM y VMM. No es posible transferir el control al código dentro del enclave mediante funciones de transición convencionales y manipulaciones con registros y pilas; para transferir el control al enclave se utiliza una nueva instrucción especialmente creada que realiza una verificación de privilegios. Además, el código colocado en el enclave puede utilizar métodos de llamada clásicos para acceder a funciones dentro del enclave y una instrucción especial para llamar a funciones externas. Para protegerse de ataques de hardware, como la conexión al módulo DRAM, se aplica cifrado en la memoria del enclave.
Fuente: opennet.ru
