SMEP / SMAP
¿Qué es SMEP / SMAP?
SMEP / SMAPSMEP y SMAP son funciones de CPU que impiden que el kernel ejecute o acceda a paginas de usuario, bloqueando tecnicas comunes de escalada local de privilegios.
Supervisor Mode Execution Prevention (SMEP) y Supervisor Mode Access Prevention (SMAP) son funciones x86-64 que Intel introdujo en Ivy Bridge (SMEP, 2012) y Broadwell (SMAP, ~2014–2015); ARM ofrece los equivalentes PXN (Privileged Execute Never) y PAN (Privileged Access Never). Ambas se habilitan mediante bits de registro de control (CR4.SMEP, CR4.SMAP).
SMEP hace que la CPU falle si el kernel ejecuta instrucciones desde una página mapeada en usuario, anulando la técnica clásica ret2usr, donde el atacante desviaba un fallo de flujo de control del kernel hacia shellcode mapeado en su propio proceso. SMAP lo extiende a cualquier lectura o escritura del kernel sobre memoria de usuario, de modo que un exploit no puede colocar una estructura falsa en espacio de usuario para que el kernel la desreferencie. Los accesos legítimos (en Linux copy_from_user/copy_to_user) ponen brevemente EFLAGS.AC con la instrucción STAC y lo limpian con CLAC para abrir una ventana controlada.
Los atacantes respondieron con ret2dir (Kemerlis et al., USENIX Security 2014), que abusa del mapeo directo physmap del kernel para alcanzar bytes controlados sin un puntero de usuario, y con cadenas ROP/solo-datos dentro de la memoria del kernel. SMEP/SMAP complementan —pero no sustituyen— a KASLR, KPTI, kCFI e Intel CET.
flowchart TD
K[Bug del kernel secuestra<br/>flujo de control / puntero] --> T{¿La página objetivo<br/>es de usuario?}
T -- "ejecutarla" --> S1{¿SMEP activo?}
S1 -- Sí --> F1["Fallo #PF → ataque bloqueado"]
S1 -- No --> E1[Se ejecuta shellcode ret2usr]
T -- "leer/escribir" --> S2{¿SMAP activo?}
S2 -- Sí --> W{¿Ventana STAC abierta?}
W -- No --> F2["Fallo #PF → ataque bloqueado"]
W -- Sí --> E2[copy_from_user controlado]
S2 -- No --> E3[Kernel desreferencia datos de usuario]
F1 --> B[El atacante pivota:<br/>ret2dir / ROP en kernel]
F2 --> B● Ejemplos
- 01
En una CPU con SMEP, un exploit del kernel falla con #PF al saltar a shellcode en espacio de usuario.
- 02
En Linux con SMAP, copy_from_user usa stac/clac para acceder a buffers de usuario.
● Preguntas frecuentes
¿Qué es SMEP / SMAP?
SMEP y SMAP son funciones de CPU que impiden que el kernel ejecute o acceda a paginas de usuario, bloqueando tecnicas comunes de escalada local de privilegios. Pertenece a la categoría de Seguridad de aplicaciones en ciberseguridad.
¿Qué significa SMEP / SMAP?
SMEP y SMAP son funciones de CPU que impiden que el kernel ejecute o acceda a paginas de usuario, bloqueando tecnicas comunes de escalada local de privilegios.
¿Cómo defenderse de SMEP / SMAP?
Las defensas contra SMEP / SMAP combinan habitualmente controles técnicos y prácticas operativas, como se detalla en la definición.
¿Cuáles son otros nombres para SMEP / SMAP?
Nombres alternativos comunes: SMEP, SMAP, PXN, PAN.