Aislamiento de tablas de páginas del núcleo
El aislamiento de tablas de páginas del núcleo (KPTI, por sus siglas en inglés, antes conocido como KAISER)[1][2] es una característica del núcleo Linux que mitiga la vulnerabilidad Meltdown (que afecta principalmente a las CPUs x86 de Intel)[3] y mejora la resistencia del núcleo ante intentos de eludir la aleatorización de la disposición del espacio de direcciones del núcleo (KASLR). Funciona aislando mejor las memorias del espacio de usuario y del espacio del kernel.[4][5] KPTI se integró en la versión 4.15 del núcleo Linux,[6] y también se incorporó como backport a los núcleos Linux 4.4.11 y 4.9.75.[7][8] Windows[9] y macOS[10] también han recibido actualizaciones similares. KPTI no soluciona la vulnerabilidad Spectre.[11]
Antecedentes de KAISER
Los parches de KPTI se basaron en KAISER (Kernel Address Isolation to have Side-channels Efficiently Removed;[5] en español, "Aislamiento de Direcciones del Núcleo para Eliminar Eficientemente los Canales Laterales"), publicado en junio de 2017, antes de que se conociera Meltdown. KAISER mejoraba KASLR, una mitigación de 2014 para un problema mucho menos grave.
En 2014, el núcleo Linux adoptó la aleatorización de la disposición del espacio de direcciones del núcleo (KASLR),[12] que dificulta la explotación de otras vulnerabilidades del kernel[13] y que depende de que las direcciones de memoria del núcleo permanezcan ocultas al espacio de usuario.[14] Sin embargo, a pesar de que esto prohíbe el acceso a estas direcciones de memoria del núcleo, existen varios ataques de canal lateral viables en los procesadores actuales que pueden revelar la ubicación de esta memoria, permitiendo eludir la protección de KASLR.[5][15][16][17]
Mientras que KASLR simplemente impide la fuga de datos referentes a la ubicación de las direcciones de memoria, KAISER además impide la fuga de información contenida en esa memoria, cubriendo, por lo tanto, el caso de Meltdown.[18]
En 2017, KAISER solucionó estos problemas de KASLR eliminando el origen de la fuga de direcciones.[19]
KPTI y la Vulnerabilidad Meltdown
KPTI está basado en KAISER. Sin KPTI, cuando se ejecuta código en el espacio de usuario (es decir, aplicaciones), Linux mantiene toda la memoria del kernel en las tablas de páginas, aunque protegida. La ventaja es que cuando la aplicación realiza una llamada al sistema o se recibe una interrupción, las tablas de páginas del núcleo siempre están presentes, evitando la sobrecarga asociada con la mayoría de los cambios de contexto (limpieza del TLB, intercambio de tablas de páginas, etc.).[4]
En enero de 2018, se hizo pública la vulnerabilidad Meltdown, que afecta a las CPUs Intel x86 y ARM Cortex-A75.[20][21] Esta vulnerabilidad era mucho más grave que la elusión de KASLR que KAISER pretendía originalmente solucionar: se descubrió que el propio *contenido* de la memoria del kernel podía quedar expuesto, no solo la ubicación de las direcciones de memoria. Los parches de KAISER se adaptaron para corregir el problema de Meltdown y se renombraron como KPTI.
KPTI (basado en KAISER) previene Meltdown al impedir que las ubicaciones protegidas se mapeen al espacio de usuario.
Actualmente no hay constancia de que los procesadores AMD x86 se vean afectados por Meltdown, por lo que no necesitan KPTI para mitigar el problema.[11][22] Sin embargo, los procesadores AMD sí son susceptibles a la elusión de KASLR cuando KPTI está desactivado.
Implementación
KPTI corrige estas fugas de información separando completamente las tablas de páginas del espacio de usuario de las del espacio del núcleo. En los procesadores que soportan los identificadores de contexto de proceso (PCID), se puede evitar la limpieza del TLB,[4] pero incluso entonces, esto supone una pérdida significativa de rendimiento, particularmente en tareas con muchas llamadas al sistema o interrupciones.[23]
La sobrecarga de trabajo se estableció en un 0.28% según los autores originales de KAISER;[5] un desarrollador de Linux la estimó en aproximadamente un 5% para la mayoría de las tareas típicas, y hasta un 30% en ciertos casos, incluso con la optimización de PCID;[4] en el caso de la base de datos PostgreSQL, el impacto en pruebas de solo lectura en un procesador Intel Skylake fue del 7 al 17% (o del 16 al 23% sin PCID),[24] mientras que una evaluación completa de pruebas de referencia arrojó una caída de rendimiento de entre el 13 y el 19% (Coffee Lake frente a Broadwell-E).[25] Phoronix ha realizado muchas pruebas de referencia[26][27][28] en las que Redis perdía un 6-7% de rendimiento[25] mientras que la compilación del núcleo Linux se ralentizaba en un 5% en Haswell.[29]
KPTI puede desactivarse parcialmente con la opción "nopti" de arranque del núcleo. También se han añadido medios para desactivar KPTI en caso de que futuros procesadores corrijan las fugas de información descritas.[1]
Referencias
- ↑ a b Corbet, Jonathan (20 de diciembre de 2017). «The current state of kernel page-table isolation». LWN.net (en inglés).
- ↑ Cimpanu, Catalin (3 de enero de 2018). «OS Makers Preparing Patches for Secret Intel CPU Security Bug». Bleeping Computer (en inglés estadounidense).
- ↑ «Spectre, Meltdown: Critical CPU Security Flaws Explained - ExtremeTech». ExtremeTech (en inglés estadounidense). 4 de enero de 2018. Consultado el 5 de enero de 2018.
- ↑ a b c d Corbet, Jonathan (15 de noviembre de 2017). «KAISER: hiding the kernel from user space». LWN.net (en inglés).
- ↑ a b c d Gruss, Daniel; Lipp, Moritz; Schwarz, Michael; Fellner, Richard; Maurice, Clémentine; Mangard, Stefan (24 de junio de 2017). KASLR is Dead: Long Live KASLR. Engineering Secure Software and Systems 2017 (en inglés).
- ↑ Corbet, Jonathan (20 de diciembre de 2017). «Kernel page-table isolation merged». LWN.net (en inglés).
- ↑ Kroah-Hartman, Greg (2 de enero de 2018). «Linux 4.14.11 Changelog». kernel.org (en inglés).
- ↑ Kroah-Hartman, Greg (5 de enero de 2018). «Linux 4.9.75 Changelog». kernel.org (en inglés).
- ↑ Alex Ionescu [@aionescu] (14 de noviembre de 2017). «Windows 17035 Kernel ASLR/VA Isolation In Practice» (tuit) (en inglés) – vía X/Twitter.
- ↑ «Apple has already partially implemented fix in macOS for 'KPTI' Intel CPU security flaw». AppleInsider (en inglés estadounidense). Consultado el 3 de enero de 2018.
- ↑ a b Coldewey, Devin (4 de enero de 2018). «Kernel panic! What are Meltdown and Spectre, the bugs affecting nearly every computer and device?». TechCrunch (en inglés).
- ↑ «Linux kernel 3.14, Section 1.7. Kernel address space randomization». kernelnewbies.org (en inglés). 30 de marzo de 2014. Consultado el 2 de abril de 2014.
- ↑ Bhattacharjee, Abhishek; Lustig, Daniel (29 de septiembre de 2017). Architectural and Operating System Support for Virtual Memory (en inglés). Morgan & Claypool Publishers. p. 56. ISBN 9781627059336.
- ↑ Kerner, Sean Michael (3 de enero de 2018). «KPTI Intel Chip Flaw Exposes Security Risks». eWEEK (en inglés estadounidense).
- ↑ Jang, Yeongjin; Lee, Sangho; Kim, Taesoo (2016). «Breaking Kernel Address Space Layout Randomization with Intel TSX». 2016 ACM SIGSAC Conference on Computer and Communications Security. CCS '16 (en inglés) (New York, NY, USA: ACM): 380-392. ISBN 9781450341394. doi:10.1145/2976749.2978321.
- ↑ Gruss, Daniel; Maurice, Clémentine; Fogh, Anders; Lipp, Moritz; Mangard, Stefan (2016). «Prefetch Side-Channel Attacks: Bypassing SMAP and Kernel ASLR». 2016 ACM SIGSAC Conference on Computer and Communications Security. CCS '16 (en inglés) (New York, NY, USA: ACM): 368-379. ISBN 9781450341394. doi:10.1145/2976749.2978356.
- ↑ Hund, R.; Willems, C.; Holz, T. (Mayo de 2013). «Practical Timing Side Channel Attacks against Kernel Space ASLR». 2013 IEEE Symposium on Security and Privacy (en inglés): 191-205. doi:10.1109/sp.2013.23.
- ↑ «Meltdown» (en inglés).
- ↑ «KASLR is Dead: Long Live KASLR» (en inglés).
- ↑ «Spectre, Meltdown: Critical CPU Security Flaws Explained - ExtremeTech». ExtremeTech (en inglés estadounidense). 4 de enero de 2018. Consultado el 5 de enero de 2018.
- ↑ Coldewey, Devin (4 de enero de 2018). «Kernel panic! What are Meltdown and Spectre, the bugs affecting nearly every computer and device?». TechCrunch (en inglés).
- ↑ «An Update on AMD Processor Security». AMD (en inglés). 4 de enero de 2018.
- ↑ Leyden, John; Williams, Chris (2 de enero de 2018). «Kernel-memory-leaking Intel processor design flaw forces Linux, Windows redesign». The Register (en inglés).
- ↑ Freund, Andres (2 de enero de 2018). «heads up: Fix for intel hardware bug will lead to performance regressions». PostgreSQL development mailing list (pgsql-hackers) (en inglés).
- ↑ a b Larabel, Michael (2 de enero de 2018). «Initial Benchmarks Of The Performance Impact Resulting From Linux's x86 Security Changes». Phoronix (en inglés).
- ↑ Larabel, Michael (2 de enero de 2018). «Linux Gaming Performance Doesn't Appear Affected By The x86 PTI Work». Phoronix (en inglés).
- ↑ Larabel, Michael (3 de enero de 2018). «VM Performance Showing Mixed Impact With Linux 4.15 KPTI Patches - Phoronix». Phoronix (en inglés).
- ↑ Larabel, Michael (3 de enero de 2018). «Further Analyzing The Intel CPU "x86 PTI Issue" On More Systems». Phoronix (en inglés).
- ↑ Velvindron, Loganaden (4 de enero de 2018). «Linux KPTI performance hit on real workloads». Loganaden Velvindron (en inglés). Consultado el 5 de enero de 2018.
Enlaces externos
- Documentación de los parches KPTI (en inglés)
- Esta obra contiene una traducción derivada de «Kernel page-table isolation» de Wikipedia en inglés, concretamente de esta versión, publicada por sus editores bajo la Licencia de documentación libre de GNU y la Licencia Creative Commons Atribución-CompartirIgual 4.0 Internacional.