Intel Software Guard Extensions (Intel SGX) son un conjunto de instrucciones de CPU que permiten que una aplicación cree enclaves : áreas en el espacio de direcciones virtuales que están protegidas contra la lectura y escritura desde fuera de esta área por parte de otros procesos, incluido el kernel del sistema operativo . Intel SGX brinda la integridad y confidencialidad de la informática de alta seguridad realizada en sistemas donde los procesos privilegiados (kernel, hipervisor , etc.) se consideran poco confiables.
El Intel SGX está diseñado para la informática remota segura, la navegación web segura y la protección de los derechos de autor . Otras aplicaciones prácticas de esta tecnología incluyen garantizar la confidencialidad de los algoritmos propietarios y las claves de cifrado.
Las extensiones Intel SGX llegaron en 2015 con la sexta generación de microprocesadores Intel basados en la microarquitectura Skylake . Comenzando con Skylake, el procesador tiene un nuevo módulo de hardware llamado Motor de cifrado de memoria (MEE), que permite el cifrado automático de los datos transferidos desde el procesador al área de memoria del enclave. Esto hizo posible abandonar el supuesto de confiabilidad de la RAM y limitar el perímetro de seguridad a un procesador central, lo que hizo posible la creación de SGX [1] .
En 2016, se presentó la segunda versión de la tecnología SGX, denominada SGX2. Extendió el conjunto de instrucciones SGX1 con administración de memoria de enclave dinámico. SGX1 impuso restricciones con respecto a la asignación de memoria y la reutilización de la memoria del enclave: el desarrollador debía asignar toda la memoria al crear una instancia del enclave. SGX2 introdujo nuevas instrucciones y modelos de programación para expandir el soporte para la administración de memoria de enclave dinámico [2] .
Solo se admite en los procesadores Intel Core 7000, 8000, 9000 y 10000 (la tecnología SGX se eliminó en los procesadores Core de 11 y 12 generaciones), así como en los procesadores de servidor Intel Xeon Scalabale de 3ra generación . Los procesadores AMD no son compatibles con SGX. [3]
En primer lugar, la tecnología SGX se creó para habilitar la informática remota segura: ejecutar software en una computadora remota propiedad de una parte no confiable, con algunas garantías de integridad y confidencialidad. En general, la informática remota segura es un problema sin resolver. El cifrado completamente homomórfico resuelve el problema para una familia limitada de cálculos, pero tiene una sobrecarga de rendimiento poco práctica [4] .
Las extensiones Intel SGX resuelven el problema de la informática remota segura mediante el uso de hardware confiable en la computadora remota. La autenticidad del equipo se establece durante el proceso de certificación. El hardware de confianza crea un "área segura" y el usuario del servicio informático remoto puede cargar el código y los datos necesarios en esta "área". El hardware confiable protege la confidencialidad y la integridad de los datos mientras realiza cálculos sobre ellos [5] .
El desarrollo de Intel SGX siguió 8 objetivos principales [6] :
SGX asigna un área de memoria llamada Memoria reservada del procesador (PRM). El procesador protege el PRM de todos los accesos a la memoria que no sean de enclave, incluido el acceso al kernel, al hipervisor y al modo de administración del sistema (SMM), así como al acceso DMA desde los periféricos [5] [7] .
PRM contiene Enclave Page Cache (EPC), que consta de páginas de 4 kilobytes que almacenan código y datos de enclave. El software del sistema no confiable es responsable de asignar páginas EPC a los enclaves. La CPU realiza un seguimiento del estado de cada página de EPC en los metadatos de caché de página de enclave (EPCM) para garantizar que cada página de EPC pertenezca a un solo enclave [7] .
El código fuente y los datos en el enclave son cargados por un software del sistema que no es de confianza. Durante la fase de inicio, el software del sistema solicita a la CPU que copie datos de la memoria no protegida (fuera del PRM) a las páginas de EPC y asigna las páginas al enclave que se está instalando. De ello se deduce que el estado inicial del enclave es conocido por el software del sistema [5] [7] .
Después de cargar todas las páginas del enclave en el EPC, el software del sistema le pide a la CPU que marque el enclave como inicializado, luego de lo cual el software de la aplicación puede ejecutar el código dentro del enclave. Después de inicializar el enclave, se prohíbe el método de carga descrito anteriormente [5] [7] .
Mientras se carga el enclave, se calcula un hash criptográfico en función de su contenido. Una vez inicializado el enclave, se completa el proceso de hash y el hash resultante se convierte en el hash de medición del enclave [8] .
La parte remota puede pasar por un proceso de certificación para asegurarse de que se está comunicando con un enclave que tiene un determinado hash de verificación y se ejecuta en un entorno seguro [9] .
Un hilo de ejecución puede ingresar al enclave solo a través de instrucciones especiales de la CPU, que son similares al mecanismo para cambiar del modo usuario al modo kernel. La ejecución del enclave siempre ocurre en modo protegido, en el anillo 3 , y usa la traducción de direcciones establecida por el kernel del sistema operativo y el hipervisor [5] [7] .
Para evitar la fuga de datos confidenciales, la CPU no atiende interrupciones (como fallas de página ) ni salidas de máquinas virtuales (vmexit) mientras se ejecuta el código del enclave. En su lugar, la CPU primero realiza una salida de enclave asíncrona (AEX) para cambiar del código de enclave al código de anillo 3 y luego realiza una interrupción o una salida de máquina virtual. La CPU realiza un AEX, almacena su estado en un área predefinida dentro del enclave y transfiere el control a una instrucción predefinida fuera del enclave, reemplazando los registros de la CPU con valores sintéticos [5] [7] .
La asignación de páginas EPC para enclaves se delega al kernel del sistema operativo (o hipervisor). El sistema operativo comunica sus decisiones de asignación de memoria a la implementación SGX a través de instrucciones especiales de CPU de anillo 0. El sistema operativo también puede cambiar páginas EPC a RAM no confiable y luego volver a cargarlas usando instrucciones especiales del procesador [5] .
SGX utiliza el motor de cifrado de memoria (MEE) para garantizar la confidencialidad, la integridad y la actualización de las páginas EPC cargadas mientras se almacenan en una memoria que no es de confianza [5] . MME funciona como una extensión de la unidad de gestión de memoria y cifra automáticamente todos los datos transferidos desde el procesador a la memoria [10] .
El diseño de aplicaciones con Intel SGX requiere que la aplicación se divida en dos componentes [9] :
Un bean confiable debe limitarse solo a los datos que necesitan la mayor protección y las operaciones que necesitan interactuar con ellos. Un enclave grande con una interfaz compleja no solo consume más memoria protegida, sino que también aumenta la superficie de ataque. Los enclaves también deben tener una interacción mínima entre los componentes de confianza. Aunque los enclaves pueden llamar a funciones en un componente que no es de confianza (usando una instrucción especial), la restricción de dichas llamadas fortalecerá el enclave frente a los ataques [9] [8] .
En la arquitectura Intel SGX, la atestación es el proceso de autenticación de enclave. Hay dos mecanismos de atestación [9] :
La atestación local es útil cuando una aplicación tiene más de un enclave que debe funcionar en conjunto, o cuando dos aplicaciones deben comunicarse entre enclaves [9] .
En el proceso de certificación entre dos enclaves, cada enclave primero debe asegurarse de que el otro sea confiable. Un enclave se autentica en otro enclave de destino mediante la instrucción EREPORT. Esta instrucción SGX crea un informe de atestación (REPORT) que asocia criptográficamente un mensaje de enclave con una identidad basada en el hash de enclave y en certificados. El enlace criptográfico se realiza mediante una etiqueta especial calculada mediante una clave simétrica que solo está disponible para el enclave de destino y la implementación de SGX [5] .
Luego, los enclaves pueden establecer una sesión segura utilizando el protocolo Diffie-Hellman para intercambiar la clave de sesión. Esta clave de sesión se puede utilizar para cifrar los datos que se compartirán entre dos enclaves [9] .
Dado que un enclave no puede acceder al espacio de memoria protegido de otro enclave, incluso si pertenecen a la misma aplicación, todos los punteros deben ser desreferenciados y los datos deben pasarse directamente entre enclaves [9] .
El proceso de certificación es el siguiente. Un procesador habilitado para SGX calcula un hash del código y los datos en cada enclave. El software dentro del enclave inicia el proceso de cálculo de la firma de atestación SGX, que incluye el hash del enclave y el mensaje del enclave [8] .
La primitiva criptográfica utilizada en la firma de atestación SGX es demasiado compleja para implementarla en hardware, por lo que el proceso de firma lo realiza un Enclave de cotización privilegiado proporcionado por Intel con acceso a la clave de atestación SGX, una clave asimétrica de hardware única para cada plataforma. La clave de atestación SGX no existe en el momento en que se creó el procesador. Se emite más tarde, utilizando el Enclave de aprovisionamiento proporcionado por Intel [5] .
Debido a que la firma se calcula en Quoting Enclave, existe la necesidad de un canal de comunicación seguro entre el enclave que se somete a la validación del software y Quoting Enclave. Este problema se resuelve utilizando el mecanismo de atestación local [5] .
Si el servidor remoto determina que el enclave se ha creado correctamente y se ejecuta en un procesador compatible con Intel SGX genuino, ahora puede confiar en el enclave y pasarle secretos a través de un canal confiable [9] .
En la computación remota, los contenidos del enclave son descargados por el software del sistema a la computadora y, por lo tanto, no deben contener secretos en claro. Después de la inicialización, hay un proceso de atestación en el que el enclave se autentica en un servidor remoto. Después de una autenticación exitosa, se espera que el servidor remoto revele algunos secretos al enclave a través de un canal de comunicación seguro. El diseño de Intel SGX intenta garantizar que el hash calculado durante el proceso de certificación refleje con precisión el contenido cargado en el enclave [8] .
SGX también ofrece un sistema de identificación basado en certificados. Se utiliza para intercambiar secretos entre enclaves que tienen certificados emitidos por la misma autoridad certificadora. El proceso de intercambio implica cifrar secretos antes de pasarlos a un software de sistema no confiable, que luego los transfiere a otro enclave [5] [8] .
El mismo mecanismo se puede usar para almacenar en caché los secretos obtenidos durante el proceso de atestación en medios de almacenamiento no confiables administrados por el software del sistema. Este almacenamiento en caché puede reducir el número de procesos de atestación en un sistema distribuido [5] .
El 27 de marzo de 2017, investigadores de la Universidad Tecnológica de Graz desarrollaron un prototipo capaz de obtener claves RSA de enclaves SGX que se ejecutan en el mismo sistema [11] [12] mediante un ataque cronometrado en cinco minutos . Una contramedida contra este tipo de ataque fue presentada y publicada por Daniel Gruss et al. en el Simposio de Seguridad de USENIX en 2017 [13] . Entre otras contramedidas publicadas el 28 de septiembre de 2017 se encontraba la utilidad DR.SGX. Se afirma que DR.SGX tiene un rendimiento superior y es mucho más fácil de implementar que otras soluciones propuestas [14] .
El grupo LSDS del Imperial College London demostró que una vulnerabilidad de seguridad especulativa de Spectre podría adaptarse para atacar el enclave [15] . El ataque Foreshadow , descubierto en agosto de 2018, combina la ejecución especulativa y el desbordamiento del búfer para eludir SGX [16] .
El 8 de febrero de 2019, investigadores de la Universidad Tecnológica de Graz publicaron resultados de investigación que mostraban que, en algunos casos, es posible ejecutar código malicioso desde el propio enclave [17] . El documento afirma que debido a la naturaleza confidencial y protegida del enclave, el software antivirus no puede detectar ni eliminar el malware que reside en él. Sin embargo, dado que las soluciones antivirus modernas monitorean las llamadas al sistema y las interacciones de las aplicaciones con el sistema operativo, debería ser posible identificar enclaves maliciosos por su comportamiento. Intel emitió una declaración que indica que este ataque estaba fuera del modelo de amenazas SGX, que no podían garantizar que el código ejecutado por el usuario provenga de fuentes confiables e instó a los consumidores a usar solo código confiable [18] .
Investigadores de la Universidad de Graz en Austria han descubierto una nueva vulnerabilidad peligrosa basada en la medición del voltaje de la CPU que permite extraer claves AES y RSA de un enclave SGX seguro. Esta característica ha estado presente en todos los procesadores Intel desde Sandy Bridge , en el que las funciones de northbridge han sido reemplazadas por completo por un agente del sistema integrado en la matriz del procesador. La vulnerabilidad explota la capacidad del sistema RAPL (Running Average Power Limit), que no requiere acceso privilegiado, para obtener estimaciones detalladas del consumo de energía del núcleo, el agente del sistema y la DRAM [19] . Para combatir la vulnerabilidad, Intel lanzó un parche de microcódigo (INTEL-SA-0389 [20] ).