Ataque a Intel SGX para extraer datos confidenciales o ejecutar código en un enclave

Investigadores de la Universidad de Ciencia y Tecnología de Defensa del Ejército Popular de Liberación de China, la Universidad Nacional de Singapur y ETH Zurich han desarrollado un nuevo método de ataque contra enclaves aislados Intel SGX (Software Guard eXtensions). El ataque se denominó SmashEx y fue causado por problemas de reingreso en el manejo de excepciones durante el funcionamiento de los componentes de tiempo de ejecución para Intel SGX. El método de ataque propuesto permite, si se tiene control sobre el sistema operativo, determinar los datos confidenciales que se encuentran en el enclave, u organizar la copia del código propio en la memoria del enclave y su ejecución.

Se prepararon prototipos de explotación para enclaves de tiempo de ejecución basados ​​en Intel SGX SDK (CVE-2021-0186) y Microsoft Open Enclave (CVE-2021-33767). En el primer caso se demostró la capacidad de extraer la clave RSA utilizada en el servidor web para HTTPS, y en el segundo se pudo determinar el contenido obtenido por la utilidad cURL corriendo dentro del enclave. La vulnerabilidad ya se solucionó mediante programación en las versiones Intel SGX SDK 2.13 y Open Enclave 0.17.1. Además de Intel SGX SDK y Microsoft Open Enclave, la vulnerabilidad también aparece en Google Asylo SDK, EdgelessRT, Apache Teaclave, Rust SGX SDK, SGX-LKL, CoSMIX y Veracruz.

Recordemos que la tecnología SGX (Software Guard Extensions) apareció en los procesadores Intel Core de sexta generación (Skylake) y ofrece una serie de instrucciones que permiten que las aplicaciones a nivel de usuario asignen áreas de memoria cerradas, enclaves cuyos contenidos no pueden ser leídos y modificados ni siquiera por el usuario. kernel y código ejecutado en modo ring0, SMM y VMM. Es imposible transferir el control al código en el enclave utilizando funciones de salto tradicionales y manipulaciones con registros y la pila: se utilizan nuevas instrucciones especialmente creadas ENTER, EEXIT y ERESUME para transferir el control al enclave, que realizan verificaciones de autorización. En este caso, el código colocado en el enclave puede usar los métodos de llamada clásicos para llamar a funciones dentro del enclave y una instrucción especial para llamar a funciones externas. El cifrado de memoria de enclave se utiliza para proteger contra ataques de hardware como la conexión DRAM.

Ataque a Intel SGX para extraer datos confidenciales o ejecutar código en un enclave

El problema es que la tecnología SGX permite que el sistema operativo interrumpa la ejecución del enclave lanzando una excepción de hardware, y los enclaves no implementan correctamente las primitivas para el manejo atómico de tales excepciones. A diferencia del kernel del sistema operativo y las aplicaciones normales, el código dentro de los enclaves no tiene acceso a primitivas para organizar acciones atómicas durante el manejo de excepciones generadas de forma asíncrona. Sin las primitivas atómicas especificadas, el enclave puede interrumpirse y volver a ejecutarse en cualquier momento, incluso en momentos en que se están ejecutando secciones críticas en el enclave y se encuentra en un estado inseguro (por ejemplo, cuando los registros de la CPU no se guardan/restauran) .

Ataque a Intel SGX para extraer datos confidenciales o ejecutar código en un enclave

Para un funcionamiento normal, la tecnología SGX le permite interrumpir la ejecución del enclave con excepciones de hardware configurables. Esta característica permite que los tiempos de ejecución del enclave implementen el manejo de señales o excepciones dentro del enclave, pero también puede introducir errores de reingreso. El ataque SmashEx se basa en la explotación de fallas en el SDK debido a que la situación de recuperación del controlador de excepciones no se maneja adecuadamente. Es importante que para explotar la vulnerabilidad, el atacante debe poder interrumpir la ejecución del enclave, es decir. debe controlar el funcionamiento del entorno del sistema.

Después de lanzar una excepción, el atacante obtiene una pequeña ventana de tiempo durante la cual es posible interceptar el flujo de ejecución mediante la manipulación de los parámetros de entrada. En particular, si tiene acceso al sistema (entorno fuera del enclave), puede crear una nueva excepción inmediatamente después de ejecutar la instrucción para ingresar al enclave (EENTER), que devolverá el control al sistema en la etapa en que la configuración de la pila para el enclave aún no se ha completado, en el que Este número almacena el estado de los registros de la CPU.

Luego, el sistema puede devolver el control al enclave, pero dado que la pila del enclave no estaba configurada en el momento de la interrupción, el enclave se ejecutará con la pila que reside en la memoria del sistema, que se puede usar para aplicar la programación orientada al retorno ( ROP) técnicas. programación orientada). Al usar la técnica ROP, el atacante no intenta colocar su código en la memoria, sino que opera en las piezas de instrucciones de la máquina que ya están disponibles en las bibliotecas cargadas, finalizando con una instrucción de retorno de control (por regla general, estas son las terminaciones de la biblioteca). funciones). El funcionamiento del exploit se reduce a construir una cadena de llamadas a bloques similares (“gadgets”) para obtener la funcionalidad deseada.

Ataque a Intel SGX para extraer datos confidenciales o ejecutar código en un enclave
Ataque a Intel SGX para extraer datos confidenciales o ejecutar código en un enclave


Fuente: opennet.ru

Añadir un comentario