stringtranslate.com

Aislamiento de tabla de páginas del kernel

Un conjunto de tablas de páginas para usar en modo kernel incluye tanto el espacio del kernel como el espacio del usuario. El segundo conjunto de tablas de páginas para usar en modo usuario contiene una copia del espacio de usuario y un conjunto mínimo de interrupciones y llamadas al sistema de manejo del espacio del kernel.

El aislamiento de la tabla de páginas del kernel ( KPTI o PTI , [1] anteriormente llamado KAISER ) [2] [3] es una característica del kernel de Linux que mitiga la vulnerabilidad de seguridad Meltdown (que afecta principalmente a las CPU x86 de Intel ) [4] y mejora el endurecimiento del kernel. contra intentos de eludir la aleatorización del diseño del espacio de direcciones del kernel (KASLR). Funciona aislando mejor el espacio del usuario y la memoria del espacio del kernel. [5] [6] KPTI se fusionó con la versión 4.15 del kernel de Linux, [7] y se actualizó a los kernels de Linux 4.14.11, 4.9.75 y 4.4.110. [8] [9] [10] Windows [11] y macOS [12] lanzaron actualizaciones similares. KPTI no aborda la vulnerabilidad Spectre relacionada . [13]

Antecedentes de KAISER

Los parches KPTI se basaron en KAISER (abreviatura de Kernel Address Isolation to have Side-channels Efficiently Removal ), [6] una técnica concebida en 2016 [14] y publicada en junio de 2017 cuando aún no se conocía Meltdown. KAISER hace que sea más difícil derrotar a KASLR, una mitigación de 2014 para un problema mucho menos grave.

En 2014, el kernel de Linux adoptó la aleatorización del diseño del espacio de direcciones del kernel (KASLR), [15], lo que dificulta la explotación de otras vulnerabilidades del kernel, [16] que depende de que las asignaciones de direcciones del kernel permanezcan ocultas del espacio del usuario. [17] A pesar de prohibir el acceso a estas asignaciones de kernel, resulta que hay varios ataques de canal lateral en los procesadores modernos que pueden filtrar la ubicación de esta memoria, lo que hace posible solucionar KASLR. [6] [18] [19] [20]

KAISER abordó estos problemas en KASLR eliminando algunas fuentes de fuga de direcciones. [6] Mientras que KASLR simplemente evita que se filtren las asignaciones de direcciones, KAISER también evita que se filtren los datos, cubriendo así el caso Meltdown. [21]

KPTI se basa en KAISER. Sin KPTI habilitado, siempre que se ejecuta código de espacio de usuario (aplicaciones), Linux también mantendría toda la memoria del kernel asignada en tablas de páginas , aunque protegida del acceso. La ventaja es que cuando la aplicación realiza una llamada al sistema en el kernel o se recibe una interrupción , las tablas de páginas del kernel siempre están presentes, por lo que se pueden evitar la mayoría de los gastos generales relacionados con el cambio de contexto ( flujo de TLB , intercambio de tablas de páginas, etc.). [5]

Vulnerabilidad de fusión y KPTI

En enero de 2018, se publicó la vulnerabilidad Meltdown , que se sabe que afecta a las CPU x86 de Intel y ARM Cortex-A75 . [22] [23] Era una vulnerabilidad mucho más grave que la derivación de KASLR que KAISER originalmente pretendía solucionar: se descubrió que el contenido de la memoria del kernel también podía filtrarse, no solo las ubicaciones de las asignaciones de memoria, como se pensaba anteriormente.

KPTI (basado conceptualmente en KAISER) previene Meltdown al impedir que la mayoría de las ubicaciones protegidas se asigne al espacio del usuario.

Actualmente no se sabe que los procesadores AMD x86 se vean afectados por Meltdown y no necesitan KPTI para mitigarlos. [13] [24] Sin embargo, los procesadores AMD todavía son susceptibles a la omisión de KASLR cuando KPTI está desactivado. [20]

Implementación

KPTI corrige estas fugas separando por completo las tablas de páginas del espacio de usuario y del espacio del kernel. Un conjunto de tablas de páginas incluye direcciones de espacio de kernel y de espacio de usuario igual que antes, pero solo se usa cuando el sistema se ejecuta en modo kernel. El segundo conjunto de tablas de páginas para usar en modo usuario contiene una copia del espacio de usuario y un conjunto mínimo de asignaciones de espacio del kernel que proporciona la información necesaria para ingresar o salir de llamadas, interrupciones y excepciones del sistema. [5]

En los procesadores que admiten identificadores de contexto de proceso (PCID), se puede evitar el vaciado del búfer de búsqueda de traducción (TLB), [5] pero incluso así tiene un costo de rendimiento significativo, particularmente en cargas de trabajo con muchas llamadas al sistema y con muchas interrupciones. [25]

Los gastos generales se midieron en 0,28% según los autores originales de KAISER; [6] un desarrollador de Linux midió que era aproximadamente del 5 % para la mayoría de las cargas de trabajo y hasta el 30 % en algunos casos, incluso con la optimización PCID; [5] para el motor de base de datos PostgreSQL, el impacto en las pruebas de solo lectura en un procesador Intel Skylake fue del 7% al 17% (o del 16% al 23% sin PCID), [26] mientras que un punto de referencia completo perdió del 13% al 19% ( Coffee Lake vs. Broadwell -E ). [27] Phoronix ha realizado muchas pruebas comparativas , [28] [29] [1] Redis se desaceleró entre un 6% y un 7%. [27] La ​​compilación del kernel de Linux se ralentizó un 5% en Haswell . [30]

KPTI se puede desactivar parcialmente con la opción de arranque del kernel "nopti". También se crearon disposiciones para desactivar KPTI si los procesadores más nuevos solucionan las fugas de información. [2]

Referencias

  1. ^ ab Larabel, Michael (3 de enero de 2018). "Análisis más detallado del problema de PTI x86 de la CPU Intel" en más sistemas. Forónix .
  2. ^ ab Corbet, Jonathan (20 de diciembre de 2017). "El estado actual del aislamiento de la tabla de páginas del kernel". LWN.net .
  3. ^ Cimpanu, Catalin (3 de enero de 2018). "Los fabricantes de sistemas operativos preparan parches para un error secreto de seguridad de la CPU Intel". Computadora que suena .
  4. ^ "Spectre, Meltdown: Explicación de las fallas críticas de seguridad de la CPU - ExtremeTech". Tecnología extrema . 2018-01-04 . Consultado el 5 de enero de 2018 .
  5. ^ abcde Corbet, Jonathan (15 de noviembre de 2017). "KAISER: ocultar el kernel del espacio del usuario". LWN.net .
  6. ^ abcde Gruss, Daniel; Lipp, Moritz; Schwarz, Michael; Fellner, Richard; Mauricio, Clementina; Mangard, Stefan (24 de junio de 2017). KASLR ha muerto: larga vida a KASLR (PDF) . Ingeniería de Software y Sistemas Seguros 2017.
  7. ^ Corbet, Jonathan (20 de diciembre de 2017). "Se fusionó el aislamiento de la tabla de páginas del kernel". LWN.net .
  8. ^ Kroah-Hartman, Greg (2 de enero de 2018). "Registro de cambios de Linux 4.14.11". kernel.org .
  9. ^ Kroah-Hartman, Greg (5 de enero de 2018). "Registro de cambios de Linux 4.9.75". kernel.org .
  10. ^ Kroah-Hartman, Greg (5 de enero de 2018). "Registro de cambios de Linux 4.4.110".
  11. ^ @aionescu (14 de noviembre de 2017). "Aislamiento de ASLR/VA del kernel de Windows 17035 en la práctica" ( Tweet ) - vía Twitter .
  12. ^ "Apple ya ha implementado parcialmente una solución en macOS para la falla de seguridad de la CPU Intel 'KPTI'". AppleInsider . 3 de enero de 2018 . Consultado el 3 de enero de 2018 .
  13. ^ ab Coldewey, Devin (4 de enero de 2018). "¡Pánico en el kernel! ¿Qué son Meltdown y Spectre, los errores que afectan a casi todas las computadoras y dispositivos?". TechCrunch .
  14. ^ Gruss, Daniel (3 de enero de 2018). "#FunFact: enviamos #KAISER a # bhusa17 y lo rechazaron". Archivado desde el original el 8 de enero de 2018 . Recuperado 8 de enero de 2018 - vía Gorjeo.
  15. ^ "Kernel de Linux 3.14, Sección 1.7. Aleatorización del espacio de direcciones del kernel". kernelnewbies.org . 2014-03-30 . Consultado el 2 de abril de 2014 .
  16. ^ Bhattacharjee, Abhishek; Lustig, Daniel (29 de septiembre de 2017). Soporte arquitectónico y de sistema operativo para memoria virtual. Editores Morgan y Claypool. pag. 56.ISBN 978-1-62705-933-6.
  17. ^ Kerner, Sean Michael (3 de enero de 2018). "La falla del chip Intel KPTI expone riesgos de seguridad". eSEMANA .
  18. ^ Jang, Yeongjin; Lee, Sangho; Kim, Taesoo (2016). "Rompiendo la aleatorización del diseño del espacio de direcciones del kernel con Intel TSX" (PDF) . Actas de la Conferencia ACM SIGSAC 2016 sobre seguridad informática y de las comunicaciones . CCS '16. Nueva York, NY, Estados Unidos: ACM. págs. 380–392. doi : 10.1145/2976749.2978321 . ISBN 978-1-4503-4139-4.
  19. ^ Gruss, Daniel; Mauricio, Clementina; Fogh, Anders; Lipp, Moritz; Mangard, Stefan (2016). "Captura previa de ataques de canal lateral" (PDF) . Actas de la Conferencia ACM SIGSAC 2016 sobre seguridad informática y de las comunicaciones . CCS '16. Nueva York, NY, Estados Unidos: ACM. págs. 368–379. doi :10.1145/2976749.2978356. ISBN 978-1-4503-4139-4. S2CID  15973158.
  20. ^ ab Hund, R.; Willems, C.; Holz, T. (mayo de 2013). "Ataques prácticos de canal lateral de sincronización contra Kernel Space ASLR" (PDF) . Simposio IEEE 2013 sobre seguridad y privacidad . págs. 191-205. doi :10.1109/sp.2013.23. ISBN 978-0-7695-4977-4. S2CID  215754624.
  21. ^ "Fusión" (PDF) .
  22. ^ "Spectre, Meltdown: Explicación de las fallas críticas de seguridad de la CPU - ExtremeTech". Tecnología extrema . 2018-01-04 . Consultado el 5 de enero de 2018 .
  23. ^ Coldewey, Devin (4 de enero de 2018). "¡Pánico en el kernel! ¿Qué son Meltdown y Spectre, los errores que afectan a casi todas las computadoras y dispositivos?". TechCrunch .
  24. ^ "Una actualización sobre la seguridad del procesador AMD". AMD . 2018-01-04.
  25. ^ Leyden, Juan; Williams, Chris (2 de enero de 2018). "La falla de diseño del procesador Intel con pérdida de memoria del kernel obliga a rediseñar Linux y Windows". El registro .
  26. ^ Freund, Andrés (2 de enero de 2018). "Aviso: la solución de un error de hardware Intel provocará regresiones en el rendimiento". Lista de correo de desarrollo de PostgreSQL (pgsql-hackers) .
  27. ^ ab Larabel, Michael (2 de enero de 2018). "Parámetros de referencia iniciales del impacto en el rendimiento resultante de los cambios de seguridad x86 de Linux". Forónix .
  28. ^ Larabel, Michael (2 de enero de 2018). "El rendimiento de los juegos Linux no parece verse afectado por el trabajo de PTI x86". Forónix .
  29. ^ Larabel, Michael (3 de enero de 2018). "El rendimiento de la máquina virtual muestra un impacto mixto con los parches KPTI de Linux 4.15 - Phoronix". Forónix .
  30. ^ Velvindron, Loganaden (4 de enero de 2018). "El rendimiento de Linux KPTI se ve afectado en cargas de trabajo reales". Loganaden Velvindron . Consultado el 5 de enero de 2018 .

enlaces externos