Aislamiento de tablas de páginas del núcleo

De Wikipedia, la enciclopedia libre
(Redirigido desde «KPTI»)

El aislamiento de tablas de páginas del núcleo o kernel (KPTI, antes conocido como KAISER)[1][2]​ es una característica del núcleo Linux que mitiga la vulnerabilidad de seguridad Meltdown (que afecta principalmente a las CPUs x86 de Intel)[3]​ y mejora la resistencia del núcleo ante cualquier intento de saltarse la aleatoriedad en 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]​ cuyo lanzamiento está previsto para principios de 2018, y se incorporó también como backport a los núcleos Linux 4.4.11 y 4.9.75.[7][8]Windows[9]​ y macOS[10]​ también han tenido actualizaciones similares. KPTI no pretende solucionar la vulnerabilidad Spectre.[11]

Antecedentes de KAISER[editar]

Los parches de KPTI se basaron en KAISER (siglas en inglés de Kernel Address Isolation to have Side-channels Efficiently Removed,[5]​ que traducido al español significa aislamiento de direcciones del núcleo para la eliminación eficiente de canales laterales), publicados en junio de 2017 cuando todavía no se conocía Meltdown. KAISER supone una mejora respecto a KASLR, una mitigación de 2014 para un problema mucho más leve.

En 2014, el núcleo Linux adoptó la aleatoriedad en la disposición del espacio de direcciones del núcleo (KASLR),[12]​ que hace más difícil explotar otras vulnerabilidades del kernel[13]​ y que depende de que los mapeos de direcciones del núcleo permanezcan ocultos ante el espacio de usuario.[14]​ Sin embargo, a pesar de que esto prohíbe el acceso a estos mapeos del núcleo, resulta que existen varios ataques de canal lateral viables en los procesadores actuales que pueden dar pie a revelar el lugar en el que se encuentra esta memoria, haciendo así posible saltarse la protección que en principio ofrece KASLR.[5][15][16][17]

Mientras que KASLR simplemente impide la fuga de datos referentes al mapeo en sí de direcciones de memoria, KAISER además impide la fuga de información contenida en esa memoria, cubriendo por tanto el caso de Meltdown.[18]

En 2017, KAISER solucionó estos problemas de KASLR eliminando el origen de la fuga de direcciones.[19]

KPTI está basado en KAISER. Si no está activado KPTI, en el momento de ejecutar código en el espacio de usuario (es decir, aplicaciones) Linux mantendría toda la memoria del kernel en tablas de páginas, aunque protegida. La ventaja estriba en que cuando la aplicación realiza una llamada al sistema en el núcleo o cuando se recibe una interrupción, las tablas de páginas del núcleo siempre están presentes, con lo cual la carga de trabajo extra relacionada con la mayoría de cambios de contexto (limpieza del TLB, intercambio de tablas de páginas, etc.) puede evitarse.[4]

KPTI y la vulnerabilidad Meltdown[editar]

En enero de 2018 se hizo pública la vulnerabilidad Meltdown, que se sabe que afecta a las CPUs Intel x86 y ARM Cortex A75.[20][21]​ Se trataba de una vulnerabilidad mucho más grave que el baipás a KASLR que KAISER pretendía originalmente solventar: se descubrió que el propio contenido de la memoria del kernel podía quedar expuesto, no sólo la localización de los mapeos de memoria como anteriormente se pensaba. Los parches de KAISER fueron adaptados para corregir el problema de Meltdown, y de paso recibieron el nombre KPTI.

KPTI (basado en KAISER) previene Meltdown al impedir que todas las ubicaciones protegidas se mapeen al espacio de usuario.

No hay constancia actualmente de que los procesadores AMD x86 estén afectados por Meltdown, con lo cual no necesitan KPTI para mitigar el problema.[11][22]​ Sin embargo, los procesadores AMD sí son susceptibles al baipás de KASLR cuando KPTI está desactivado.

Implementación[editar]

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) puede evitarse la limpieza del TLB,[4]​ pero incluso entonces esto supone una pérdida significativa de rendimiento, particularmente con tareas donde intervienen muchas llamadas al sistema o interrupciones.[23]

En los procesadores que soportan los identificadores de contexto de proceso (PCID), se puede evitar el Translation Lookaside Buffer (TLB),[24]​ pero esto trae un costo significativo en el rendimiento, particularmente en cargas de trabajo pesadas de interrupciones y llamadas al sistema.[25]

La sobrecarga de trabajo se estableció en un 0.28 % según los autores originales de KAISER;[5]​ un desarrollador de Linux la fijó en aproximadamente un 5 % para la mayoría de tareas típicas y en un máximo de un 30 % en determinados casos aún contando con la optimización de PCID;[4]​ en el caso de la base de datos PostgreSQL el impacto en pruebas sólo de lectura en un procesador Intel Skylake fue del 7 al 17% (o del 16 al 23% sin PCID),[26]​ mientras que una evaluación completa de pruebas de referencia arrojaba una caída de rendimiento de entre el 13 y el 19% (Coffee Lake frente a Broadwell-E).[27]Phoronix ha realizado muchas pruebas de referencia[28][29][30]​ en las que Redis perdía un 6-7 % de rendimiento[27]​ mientras que la compilación del núcleo Linux se ralentizaba en un 5 % en Haswell.[31]

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[editar]

  1. a b Corbet, Jonathan (20 de diciembre de 2017). «The current state of kernel page-table isolation». LWN.net (en inglés). 
  2. Cimpanu, Catalin (3 de enero de 2018). «OS Makers Preparing Patches for Secret Intel CPU Security Bug». Bleeping Computer (en inglés estadounidense). 
  3. «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. 
  4. a b c d Corbet, Jonathan (15 de noviembre de 2017). «KAISER: hiding the kernel from user space». LWN.net (en inglés). 
  5. 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). 
  6. Corbet, Jonathan (20 de diciembre de 2017). «Kernel page-table isolation merged». LWN.net (en inglés). 
  7. Kroah-Hartman, Greg (2 de enero de 2018). «Linux 4.14.11 Changelog». kernel.org (en inglés). 
  8. Kroah-Hartman, Greg (5 de enero de 2018). «Linux 4.9.75 Changelog». kernel.org (en inglés). 
  9. Alex Ionescu [@aionescu] (14 de noviembre de 2017). «Windows 17035 Kernel ASLR/VA Isolation In Practice». X (antes Twitter) (tuit) (en inglés). 
  10. «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. 
  11. 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). 
  12. «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. 
  13. 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. 
  14. Kerner, Sean Michael (3 de enero de 2018). «KPTI Intel Chip Flaw Exposes Security Risks». eWEEK (en inglés estadounidense). 
  15. 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. 
  16. 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. 
  17. 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. 
  18. «Meltdown» (en inglés). 
  19. «KASLR is Dead: Long Live KASLR» (en inglés). 
  20. «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. 
  21. 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). 
  22. «An Update on AMD Processor Security». AMD (en inglés). 4 de enero de 2018. 
  23. 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). 
  24. «KAISER: hiding the kernel from user space [LWN.net]». lwn.net. Consultado el 16 de enero de 2018. 
  25. «Kernel-memory-leaking Intel processor design flaw forces Linux, Windows redesign» (en inglés). Consultado el 16 de enero de 2018. 
  26. 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). 
  27. 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). 
  28. Larabel, Michael (2 de enero de 2018). «Linux Gaming Performance Doesn't Appear Affected By The x86 PTI Work». Phoronix (en inglés). 
  29. Larabel, Michael (3 de enero de 2018). «VM Performance Showing Mixed Impact With Linux 4.15 KPTI Patches - Phoronix». Phoronix (en inglés). 
  30. Larabel, Michael (3 de enero de 2018). «Further Analyzing The Intel CPU "x86 PTI Issue" On More Systems». Phoronix (en inglés). 
  31. 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[editar]