|

Cómo funciona el ataque al enclave SGX

A lo largo de los años de evolución caótica, el conjunto de instrucciones del ensamblador x86-64 ha generado las combinaciones más extrañas. Hoy veremos un enfoque creativo para usar las instrucciones de TSX desde enclaves internos: ubicaciones de memoria protegidas. El resultado es una hazaña de trabajo quele permite ejecutar cualquier código con los privilegios de la aplicación host.

Como saben, el código ejecutado en el enclave está seriamente limitado en su funcionalidad. Es aún más interesante saber que incluso en tales condiciones, el código del enclave puede brindar muchas sorpresas. Con un enfoque creativo, por supuesto.

Entonces, ¿qué no está disponible para nosotros en el enclave? No podemos hacer llamadas al sistema. No podemos realizar operaciones de E / S. No conocemos la dirección base del segmento de código de la aplicación host. No podemos ir al código de la aplicación host con jmpcall. No tenemos idea de la estructura del espacio de direcciones que guía la aplicación host (por ejemplo, qué páginas se promocionan o qué tipo de datos se colocan en estas páginas). Ni siquiera podemos pedirle al sistema operativo que nos proporcione una memoria para la aplicación host (por ejemplo, a través de proc/pid/maps).

Los intentos ingenuos de leer un área de memoria arbitraria ciega de la aplicación host tarde o temprano conducen a la terminación forzada del programa enclave (y más temprano que tarde). Esto sucede cuando el área de espacio de direcciones virtuales solicitada por el enclave es inaccesible para la aplicación host. Es ridículo incluso tartamudear sobre la posibilidad de escribir «algo propio».

Por lo tanto, generalmente se acepta que el enclave solo puede servir la aplicación host y que el enclave no puede tomar su propia iniciativa, incluida la maliciosa. Por lo tanto, para los creadores de virus, no representa un valor práctico. Esta suposición apresurada se ha convertido en una de las razones por las cuales la protección del enclave es asimétrica: el código de la aplicación host no puede acceder a su memoria, mientras que el código del enclave puede leer y escribir en cualquier dirección de memoria de la aplicación host.

Por lo tanto, si sucede que un enclave malicioso logra realizar llamadas arbitrarias del sistema en nombre de la aplicación host, ejecutar código arbitrario, escanear memoria y encontrar cadenas ROP abusivas en él, podrá tomar el control completo de la aplicación host en modo sigiloso . Podrá no solo robar y cifrar archivos de usuario, sino también actuar en su nombre. Por ejemplo, envíe correos electrónicos de phishing o realice ataques DoS. En este caso, incluso los mecanismos de protección más avanzados, como los canarios de pila y la desinfección de direcciones, no tendrán poder.

En este artículo, mostraré varios trucos mediante los cuales los villanos superan estas limitaciones y usan SGX en sus propios intereses egoístas al realizar ataques ROP. Esto se hace para ejecutar código arbitrario disfrazado como un proceso de aplicación de host (similar al proceso de vaciado, que a menudo es utilizado por el malware), o para enmascarar un malware ya preparado, para deshacerse del acoso de los antivirus y otros mecanismos de protección.

Publicaciones Similares

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *