La prevención de acceso en modo supervisor ( SMAP ) es una característica de algunas implementaciones de CPU , como la microarquitectura Intel Broadwell , que permite a los programas en modo supervisor establecer opcionalmente asignaciones de memoria en el espacio de usuario, de modo que el acceso a dichas asignaciones desde el modo supervisor provoque una interrupción. Esto dificulta que los programas maliciosos engañen al núcleo para que utilice instrucciones o datos de un programa en el espacio de usuario. [ 1 ] [ 2 ]
Historia
La prevención de acceso en modo supervisor está diseñada para complementar la prevención de ejecución en modo supervisor (SMEP), que se introdujo anteriormente. SMEP se puede utilizar para evitar que el modo supervisor ejecute involuntariamente código del espacio de usuario. SMAP extiende esta protección a las operaciones de lectura y escritura. [ 2 ]
Beneficios
Sin la Prevención de Acceso en Modo Supervisor (SMAP), el código del supervisor suele tener acceso completo de lectura y escritura a las asignaciones de memoria del espacio de usuario (o tiene la capacidad de obtener acceso completo). Esto ha dado lugar al desarrollo de varias vulnerabilidades de seguridad, incluidas las de escalada de privilegios , que operan provocando que el kernel acceda a la memoria del espacio de usuario sin su intención. [ 3 ] Los sistemas operativos pueden bloquear estas vulnerabilidades utilizando SMAP para forzar accesos no deseados a la memoria del espacio de usuario y provocar fallos de página . Además, SMAP puede exponer código del kernel defectuoso que no sigue los procedimientos previstos para acceder a la memoria del espacio de usuario. [ 1 ]
Sin embargo, el uso de SMAP en un sistema operativo puede conducir a un mayor tamaño del núcleo y a accesos más lentos a la memoria del espacio de usuario desde el código supervisor, ya que SMAP debe deshabilitarse temporalmente cada vez que el código supervisor pretenda acceder a la memoria del espacio de usuario. [ 4 ]
Detalles técnicos
Los procesadores indican compatibilidad con la prevención de acceso en modo supervisor a través de la hoja CPUID de funciones extendidas .
SMAP se habilita cuando la paginación de memoria está activa y el bit SMAP en el registro de control CR4 está activado. SMAP se puede deshabilitar temporalmente para accesos explícitos a memoria activando el indicador EFLAGS.AC (Verificación de alineación). Las instrucciones stac(Establecer indicador AC) y clac(Borrar indicador AC) se pueden usar para establecer o borrar fácilmente el indicador. [ 5 ]
Cuando el bit SMAP en CR4 está activado, las lecturas y escrituras explícitas en páginas de modo usuario realizadas por código que se ejecuta con un nivel de privilegio inferior a 3 siempre darán lugar a un fallo de página si el indicador EFLAGS.AC no está activado. Las lecturas y escrituras implícitas (como las que se realizan en tablas de descriptores ) en páginas de modo usuario siempre provocarán un fallo de página si SMAP está habilitado, independientemente del valor de EFLAGS.AC. [ 5 ]
Soporte del sistema operativo
H. Peter Anvin implementó la compatibilidad del kernel de Linux con la Prevención de Acceso en Modo Supervisor . [ 1 ] Se integró en el kernel principal de Linux 3.7 (lanzado en diciembre de 2012) y está habilitado por defecto para los procesadores que admiten esta función. [ 4 ]
FreeBSD ha sido compatible con la prevención de ejecución en modo supervisor desde 2012 [ 6 ] y con la prevención de acceso en modo supervisor desde 2018. [ 7 ]
OpenBSD ha sido compatible con la Prevención de Acceso en Modo Supervisor y la relacionada Prevención de Ejecución en Modo Supervisor desde 2012, [ 8 ] siendo OpenBSD 5.3 la primera versión con soporte para la función habilitada. [ 9 ]
El soporte de NetBSD para la Prevención de Ejecución en Modo Supervisor (SMEP) fue implementado por Maxime Villard en diciembre de 2015. [ 10 ] El soporte para la Prevención de Acceso en Modo Supervisor (SMAP) también fue implementado por Maxime Villard en agosto de 2017. [ 11 ] NetBSD 8.0 fue la primera versión con ambas características soportadas y habilitadas. [ 12 ]
Jérôme Duval implementó el soporte de Haiku para la Prevención de Ejecución en Modo Supervisor (SMEP) en enero de 2018. [ 13 ]
macOS es compatible con SMAP al menos desde macOS 10.13, lanzado en 2017. [ 14 ]
Véase también
Referencias
- 1 2 3 Corbet, Jonathan (26-09-2012). "Prevención de acceso en modo supervisor" . LWN.net . Recuperado el 04-08-2017 .
- 1 2 Mulnix, David (22 de mayo de 2015). "Descripción técnica de la familia de productos de procesadores Intel Xeon D: Protección de acceso en modo supervisor (SMAP) 4" . Intel . Recuperado el 4 de agosto de 2017 .
- ↑ Corbet, Jonathan (2009-07-20). "Diversión con punteros NULL, parte 1" . LWN.net . Recuperado el 2017-08-04 .
- 1 2 Larabel, Michael (2012-10-02). "Intel SMAP llega para intentar mejorar la seguridad de Linux" . Phoronix . Recuperado el 2017-08-04 .
- 1 2 "Manual del desarrollador de software para arquitecturas Intel 64 e IA-32, Volumen 3A: Guía de programación del sistema, Parte 1" (PDF) . Intel. Julio de 2017. Recuperado el 4 de agosto de 2017 .
- ↑ Belousov, Konstantin (01/11/2012). "Revisión 242433" . Recuperado el 19/01/2018 .
- ↑ Belousov, Konstantin (29-07-2018). "Revisión 336876" . Recuperado el 30-07-2018 .
- ↑ Henderson, Stuart (26-03-2017). "Re: ¿OpenBSD tiene implementación de SMEP y SMAP? ¿O MPX?" . Recuperado el 04-08-2017 – vía marc.info .
- ↑ "OpenBSD 5.3" . OpenBSD . 1 de mayo de 2013. Consultado el 4 de agosto de 2017 .
- ↑ "Cambios significativos de NetBSD 7.0 a 8.0" . NetBSD . 12 de octubre de 2017. Consultado el 9 de enero de 2018 .
- ↑ Maxime Villard (23-08-2017). "amd64: soporte smap" . Consultado el 09-01-2018 .
- ↑ "Anuncio de NetBSD 8.0 (17 de julio de 2018)" . NetBSD . 17 de julio de 2018. Consultado el 29 de julio de 2018 .
- ↑ "kernel: soporte para Intel SMAP y SMEP en x86_64" . Haiku (sistema operativo) . 30 de enero de 2018. Consultado el 4 de septiembre de 2018 .
- ↑ "/osfmk/x86_64/idt64.s.auto.html" . Apple Inc. 25-09-2017 . Consultado el 19-09-2018 .
- Instrucciones X86
- Gestión de memoria X86
- Seguridad informática
- Intel