
Un marco de ataque práctico para el control preciso de la ejecución en enclave.
SGX-Step es un marco de trabajo de código abierto para facilitar la investigación de ataques de canal lateral en procesadores Intel x86 en general y en plataformas Intel SGX en particular. SGX-Step consiste en un controlador del kernel de Linux adversarial y una pequeña biblioteca de sistema operativo en espacio de usuario que permite configurar entradas de tabla de páginas no confiables y/o interrupciones del temporizador APIC x86 completamente desde el espacio de usuario. SGX-Step se ha utilizado en nuestra propia investigación, así como por investigadores independientes, para habilitar varios ataques de ejecución de enclave nuevos y mejorados que recopilan observaciones de canal lateral con una resolución temporal máxima (es decir, interrumpiendo el enclave víctima después de cada instrucción individual).
Licencia. SGX-Step es software libre, licenciado bajo GPLv3. El logotipo de SGX-Step se deriva de la icónica serie de fotografías de dominio público "Sallie Gardner at a Gallop" de Eadweard Muybridge, la cual, al igual que nuestro objetivo de ejecución paso a paso del enclave, descompone la dinámica del galope del caballo en una serie de fotogramas individuales para revelar las propiedades generales de la marcha equina.
| Versión de SGX-Step | Características del changelog |
|---|---|
| v1.5.0 | Correcciones de estabilización (KPTI, mapeo ISR del kernel); puerto Gramine (experimental); soporte IPI. |
| v1.4.0 | Puertas de interrupción/llamada privilegiadas (Plundervolt). |
| v1.3.0 | Soporte de ejecución transitoria (Foreshadow). |
| v1.2.0 | Manejo de interrupciones en espacio de usuario y filtrado determinista de paso cero (Nemesis). |
| v1.1.0 | Soporte IA32. |
| v1.0.0 | Manipulación de tabla de páginas en espacio de usuario y ejecución paso a paso del temporizador APIC. |
Publicaciones. SGX-Step ha sido empleado por varios grupos de investigación independientes y ha permitido una nueva línea de ataques SGX de alta resolución. Se incluye una lista completa actualizada de proyectos conocidos que utilizan SGX-Step al final de este README. Una copia del artículo original está disponible aquí.``` @inproceedings{vanbulck2017sgxstep, title = {{SGX-Step}: A Practical Attack Framework for Precise Enclave Execution Control}, author = {Van Bulck, Jo and Piessens, Frank and Strackx, Raoul}, booktitle = {2nd Workshop on System Software for Trusted Execution {(SysTEX)}}, publisher = {{ACM}}, pages = {4:1--4:6}, month = Oct, year = 2017, }
**Demo.** El directorio [app/memcmp](https://github.com/jovanbulck/sgx-step/blob/master/app/memcmp) contiene una pequeña aplicación demo que
ilustra el poder de los ataques con SGX-Step al ejecutar paso a paso un enclave de ejemplo
que contiene una lógica de comparación de contraseñas `memcmp` sutil y no constante en tiempo.
A diferencia de los ataques de temporización tradicionales, notoriamente ruidosos, SGX-Step puede
determinísticamente forzar la contraseña carácter por carácter en tiempo _lineal_:

## Visión general
Crucial para el diseño de SGX-Step, a diferencia de propuestas anteriores de desalojo de enclaves,
es la creación de mapas de memoria virtual en espacio de usuario para ubicaciones de memoria física que
contienen entradas de tabla de páginas, así como para los registros de configuración de E/S mapeada en
memoria del APIC local y la Tabla de Descriptores de Interrupciones (IDT) de x86. Esto permite que un
proceso anfitrión no confiable y controlado por el atacante pueda fácilmente (i) rastrear o modificar
las entradas de tabla de páginas del enclave, (ii) configurar la fuente de interrupción del temporizador
del APIC local en modo de un solo disparo/periódico, (iii) disparar interrupciones entre procesadores,
y (iv) registrar manejadores de interrupción personalizados completamente _dentro_ del espacio de usuario.

La figura anterior resume la secuencia de pasos hardware y software al interrumpir y reanudar un enclave
SGX a través de nuestro marco de trabajo.
1. La interrupción del temporizador del APIC local llega dentro de una instrucción enclavada.
2. El procesador ejecuta el procedimiento AEX que almacena de forma segura el contexto de ejecución
en el marco SSA del enclave, inicializa los registros de la CPU y redirige al manejador de interrupción
(en espacio de usuario) registrado en la IDT.
3. En este punto, cualquier código espía específico del ataque puede conectarse fácilmente.
4. La biblioteca regresa al trampolín AEP en espacio de usuario. Modificamos el entorno de ejecución
no confiable del SDK SGX oficial para permitir el registro sencillo de un stub AEP personalizado.
Además, para permitir una evaluación precisa de nuestro enfoque en enclaves de depuración de referencia
controlados por el atacante, SGX-Step puede _opcionalmente_ ser instrumentado para recuperar el puntero
de instrucción almacenado del marco SSA del enclave interrumpido (usando la interfaz `/proc/self/mem`
de Linux y la instrucción `EDBGRD`).
5. A continuación, configuramos el temporizador del APIC local para la siguiente interrupción escribiendo
en el registro de E/S mapeado en memoria de conteo inicial, justo antes de ejecutar (6) `ERESUME`.
## Resumen del código fuente
Este repositorio está organizado de la siguiente manera:```
.
├── app -- Collection of sample client applications using SGX-Step to
│ attack different victim enclave scenarios.
├── doc -- Papers and reference material.
├── kernel -- Minimal dynamically loadable Linux kernel driver to export
│ physical memory to user space and bootstrap `libsgxstep`.
├── libsgxstep -- Small user-space operating system library that implements the
│ actual SGX-Step functionality, including x86 page-table and
│ APIC timer manipulations.
└── sdk -- Bindings to use SGX-Step with different SGX SDKs and libOSs.
SGX-Step es un marco de control de ejecución universal que permite la intercalación precisa de instrucciones del enclave víctima con código atacante arbitrario. Algunos de los principales casos de uso del framework SGX-Step se resumen en la siguiente figura (consulte también la parte inferior de este README para obtener una lista actualizada de publicaciones que utilizan SGX-Step).
