Conjunto de extensiones para la arquitectura del conjunto de instrucciones x86
Intel MPX ( Memory Protection Extensions ) es un conjunto de extensiones descontinuadas para la arquitectura del conjunto de instrucciones x86 . Con soporte para compiladores , bibliotecas de tiempo de ejecución y sistemas operativos , Intel MPX afirmaba mejorar la seguridad del software al verificar las referencias de puntero cuyas intenciones normales en tiempo de compilación se explotan maliciosamente en tiempo de ejecución debido a desbordamientos de búfer . En la práctica, se han descubierto demasiados fallos en el diseño para que sea útil, y el soporte se ha desaprobado o eliminado de la mayoría de los compiladores y sistemas operativos. Intel ha incluido MPX como eliminado en el hardware de 2019 y posteriores en la sección 2.5 de su Manual del desarrollador de software de arquitecturas Intel® 64 e IA-32, volumen 1. [1]
Extensiones
Intel MPX introduce nuevos registros de límites y nuevas extensiones de conjuntos de instrucciones que operan sobre estos registros. Además, hay un nuevo conjunto de "tablas de límites" que almacenan límites más allá de lo que cabe en los registros de límites. [2] [3] [4] [5] [6]
MPX utiliza cuatro nuevos registros de límites de 128 bits, cada uno BND0
de BND3
los cuales almacena un par de valores de límite inferior (LB) y límite superior (UB) de 64 bits de un búfer. El límite superior se almacena en forma de complemento a uno , y BNDMK
(crear límites) y BNDCU
(verificar límite superior) realizan la conversión. La arquitectura incluye dos registros de configuración BNDCFGx
( BNDCFGU
en el espacio de usuario y BNDCFGS
en modo kernel) y un registro de estado BNDSTATUS
, que proporciona una dirección de memoria y un código de error en caso de excepción. [7] [8]
La traducción de direcciones de dos niveles se utiliza para almacenar límites en la memoria. La capa superior consta de un directorio de límites (BD) creado al iniciar la aplicación. Cada entrada del BD está vacía o contiene un puntero a una tabla de límites (BT) creada dinámicamente, que a su vez contiene un conjunto de límites de puntero junto con las direcciones lineales de los punteros. Las instrucciones de carga de límites ( BNDLDX
) y almacenamiento ( BNDSTX
) realizan de forma transparente la traducción de direcciones y los límites de acceso en la entrada BT adecuada. [7] [8]
Intel MPX se introdujo como parte de la microarquitectura Skylake . [9]
La microarquitectura Intel Goldmont también es compatible con Intel MPX. [9]
Soporte de software
- glibc eliminó el soporte en la versión 2.35.
- GNU Compiler Collection (GCC) 5.0 agregó soporte para MPX. [10] En 2018, el soporte para estas extensiones disminuyó debido a las cargas de mantenimiento y a que los desarrolladores de Intel contribuían con parches de manera intermitente, lo que resultó en una propuesta para eliminar el soporte en GCC 9.0. [11] El soporte se eliminó en GCC 9.1. [12]
- El compilador Intel C++ (icc) 15.0 agregó soporte para Intel MPX. [10]
- El soporte de software a nivel de kernel para Intel MPX se fusionó con la línea principal del kernel de Linux en la versión 3.19 del kernel, que se lanzó el 8 de febrero de 2015. [13] [14] En 2018, Thomas Gleixner propuso eliminar el soporte de MPX del kernel de Linux 4.18. [15] La solicitud de incorporación de cambios con su eliminación se publicó en diciembre de 2018, durante el ciclo de desarrollo de la versión 4.20, [16] pero no fue aceptada. El segundo intento se realizó en julio de 2019. [17] El soporte de MPX se eliminó en la versión 5.6. [18]
- QEMU admitió MPX desde la versión 2.6 [19] y abandonó su soporte en la versión 4.0. [20]
- Microsoft Visual Studio 2015 Update 1 agregó soporte experimental para MPX. [21]
Análisis
Un estudio examinó una disección detallada entre capas de la pila del sistema MPX y la comparación con tres importantes mecanismos de protección de memoria basados en software ( AddressSanitizer , SAFECode y SoftBound) y presenta las siguientes conclusiones. [8]
- Aunque Intel MPX es un enfoque asistido por hardware especialmente diseñado con su propio conjunto de registros de hardware, no es más rápido que ninguno de los enfoques basados en software. Las nuevas instrucciones Intel MPX pueden causar una ralentización de hasta 4 veces en el peor de los casos, aunque las optimizaciones del compilador la amortizan y dan lugar a sobrecargas de tiempo de ejecución de aproximadamente el 50 % en promedio.
- A diferencia de otras soluciones basadas en software, Intel MPX no ofrece protección contra errores de seguridad de la memoria temporal.
- La lectura y escritura desde las tablas de límites doblemente indirectos no es segura para subprocesos.
- MPX no admite varios modismos comunes de programación en C / C++ , como miembros de matrices flexibles , referencias a un campo como desplazamiento de otro, etc.
- MPX entra en conflicto con otras extensiones ISA, lo que genera problemas de rendimiento y seguridad. Más específicamente, estos problemas surgen cuando Intel MPX se utiliza en combinación con otros mecanismos de protección basados en hardware, como Intel TSX e Intel SGX .
- Las instrucciones MPX implican una pérdida de rendimiento significativa (más del 15 %) incluso en CPU Intel sin soporte para MPX.
Además, una revisión concluyó que MPX no estaba listo para producción y que AddressSanitizer era una mejor opción. [8] Una revisión realizada por Kostya Serebryany en Google, desarrollador de AddressSanitizer, [22] tuvo hallazgos similares. [23]
Fusión de un reactor
Otro estudio [24] que explora el alcance de las vulnerabilidades de seguridad de Spectre y Meltdown descubrió que Meltdown puede utilizarse para eludir Intel MPX, utilizando la excepción de hardware Bound Range Exceeded (#BR). Según su publicación, los investigadores pudieron filtrar información a través de un canal encubierto Flush+Reload desde un acceso fuera de límites en una matriz protegida por el sistema MPX. Su prueba de concepto no se ha divulgado públicamente.
Véase también
Referencias
- ^ Manual del desarrollador de software de arquitecturas Intel® 64 e IA-32 Volumen 1: Arquitectura básica. Intel . Noviembre de 2020 . Consultado el 3 de marzo de 2021 .
- ^ "Extensiones ISA de Intel". Intel . Consultado el 4 de noviembre de 2013 .
- ^ "Introducción a las extensiones de protección de memoria de Intel". Intel . 16 de julio de 2013 . Consultado el 10 de septiembre de 2013 .
- ^ "Discusión sobre las extensiones de protección de memoria (MPX) de Intel y comparación con AddressSanitizer". code.google.com . Consultado el 4 de noviembre de 2013 .
- ^ "Compatibilidad con Intel® Memory Protection Extensions (Intel® MPX) en el compilador GCC". gcc.gnu.org . Consultado el 4 de noviembre de 2013 .
- ^ "Explicación de Intel MPX: almacenamiento de límites en la memoria". intel-mpx.github.io . Consultado el 6 de febrero de 2017 .
- ^ ab "Referencia de programación de extensiones del conjunto de instrucciones de la arquitectura Intel" (PDF) . Intel . Diciembre de 2013 . Consultado el 17 de enero de 2014 .
- ^ abcd Oleksenko, Oleksii; Kuvaiskii, Dmitrii; Bhatotia, Pramod; Felber, Pascal; Fetzer, Christof (2017). "Explicación de Intel MPX: un estudio empírico de Intel MPX y enfoques de verificación de límites basados en software". arXiv : 1702.00719 [cs.CR].
- ^ ab "Emulador de desarrollo de software de Intel". Intel . 15 de junio de 2012 . Consultado el 4 de noviembre de 2013 .
- ^ ab "Diseño de Intel MPX". Intel.
- ^ "Parece que GCC 9 eliminará la compatibilidad con Intel MPX". Phoronix . Consultado el 27 de abril de 2018 .
- ^ "Compatibilidad con Intel MPX eliminada de GCC 9 - Phoronix". www.phoronix.com .
- ^ "Kernel Linux 3.19, Sección 1.2. Soporte para las extensiones de protección de memoria Intel". kernelnewbies.org . 9 de febrero de 2015 . Consultado el 9 de febrero de 2015 .
- ^ Jonathan Corbet (29 de enero de 2014). "Compatibilidad con Intel MPX en Linux". LWN.net . Consultado el 9 de febrero de 2015 .
- ^ "El núcleo de Linux podría abandonar el soporte para extensiones de protección de memoria". Phoronix .
- ^ "[GIT PULL] x86: eliminar Intel MPX".
- ^ "[PATCH 0/3] [RFC] x86: iniciar el proceso de eliminación de MPX".
- ^ "El soporte para Intel MPX ha muerto con Linux 5.6 - Phoronix". www.phoronix.com .
- ^ "Registro de cambios/2.6".
- ^ "QEMU 4 llega con juguetes para los admiradores de Arm, los revolucionarios de RISC-V, los patriotas de POWER... ya se hacen una idea". The Register .
- ^ "Visual Studio 2015 Update 1: Nueva función experimental: MPX". Microsoft . 20 de enero de 2016.
- ^ Serebryany, Konstantin. "Konstantin Serebryany". Búsqueda de Google . Archivado desde el original el 2023-07-27 . Consultado el 2024-07-18 .
- ^ "AddressSanitizerIntelMemoryProtectionExtensions". GitHub . Archivado desde el original el 18 de julio de 2024 . Consultado el 4 de noviembre de 2013 .
- ^ Canela, Claudio; Van Bulck, Jo; Schwarz, Michael; Lipp, Moritz; von Berg, Benjamín; Ortner, Philipp; Piessens, Frank; Evtyushkin, Dmitry; Gruss, Daniel (2018). "Una evaluación sistemática de defensas y ataques de ejecución transitoria". arXiv : 1811.05441 [cs.CR].
Enlaces externos
- Referencia de programación de extensiones del conjunto de instrucciones de la arquitectura Intel (PDF) . Intel . Julio de 2013 . Consultado el 10 de enero de 2016 .
- Oleksenko, Oleksii; Kuvaiskii, Dmitrii; Bhatotia, Pramod; Felber, Pascal; Fetzer, Christof (2017). "Explicación de Intel MPX: un estudio empírico de Intel MPX y enfoques de verificación de límites basados en software". arXiv : 1702.00719 [cs.CR].Material complementario en línea en https://intel-mpx.github.io.
- "Introducción a las extensiones de protección de memoria de Intel". Intel . 16 de julio de 2013 . Consultado el 10 de septiembre de 2013 .
- "Extensiones Intel ISA". Intel . Consultado el 4 de noviembre de 2013 .
- "Compatibilidad con Intel® Memory Protection Extensions (Intel® MPX) en el compilador GCC". gcc.gnu.org . Consultado el 4 de noviembre de 2013 .
- Hansen, Dave (16 de marzo de 2016). «Intel® Memory Protection Extensions (Intel® MPX) for Linux» (Extensiones de protección de memoria Intel® (Intel® MPX) para Linux) . Consultado el 17 de mayo de 2018 .