¿Por qué el acceso a la memoria del kernel es un riesgo de seguridad?

8

Muchas de las noticias relacionadas con la vulnerabilidad de Meltdown hacen hincapié en que permite que los programas lean la memoria que debería estar fuera del alcance del usuario. Si bien entiendo que esto no debería ocurrir, pocas fuentes explican exactamente cómo es peligroso acceder a la memoria del kernel.

¿Qué información se almacena en la memoria del kernel? ¿Qué permitiría acceder, pero no modificar, la memoria del kernel que le permite a un atacante?

    
pregunta Rob Rose 07.01.2018 - 17:41
fuente

3 respuestas

9

Para comprender la amenaza de Meltdown, debes comprender cómo se organiza la memoria en las computadoras modernas.

La vista ingenua de la memoria es que cada dirección de memoria corresponde a un conjunto específico de celdas en la RAM. Esto se conoce como "direccionamiento físico", y hasta aproximadamente a principios de la década de 1990, era la forma más común de manejar la memoria en una computadora. En el direccionamiento físico, si su programa lee un byte de la dirección 17, lee cada vez el mismo conjunto de ocho celdas de memoria. Resulta que, una forma "solo física" de abordar la memoria limita bastante lo que puede hacer, especialmente en lo que respecta a la ejecución de varios programas a la vez.

Introduzca "direccionamiento virtual". Ahora, la "dirección de memoria 17" de su programa ya no corresponde a una parte específica de la memoria física. En cambio, cuando la CPU desea los datos de esa dirección, solicita un componente llamado "unidad de administración de memoria" (MMU) que, en colaboración con el sistema operativo, determina cómo cumplir esa solicitud.

Esto permite una serie de ganancias de eficiencia y capacidad. El más conocido es probablemente "swap", comúnmente conocido como "memoria virtual": la dirección 17 puede almacenarse temporalmente en el disco, y la solicitud de su programa se pone en espera mientras el sistema operativo almacena el contenido de parte de la memoria física en el disco, y luego carga la pieza que su programa piensa como "dirección 17". Dado que el rango de direcciones virtuales disponibles suele ser mucho mayor que la cantidad de memoria física, esto permite al sistema operativo dar la apariencia de una computadora con mucha más RAM de la que realmente tiene.

Sin embargo, la mayor ganancia del direccionamiento virtual también está completamente oculta para el usuario típico: permite al sistema operativo dar a cada programa la ilusión de que es el único programa que se ejecuta en la computadora. La "dirección 17" de su programa no es la misma memoria que la "dirección 17" de otro programa. Esto significa que los programas no deben preocuparse por ocultar secretos entre sí: Javascript que se ejecuta en su navegador web, por ejemplo, no puede leer el contenido de la memoria de su administrador de contraseñas.

Por razones de eficiencia, el kernel de Linux se asigna la mitad de las direcciones virtuales disponibles en la vista de memoria de cada programa, y asigna toda la memoria física como parte de ese rango de direcciones (el kernel de Windows hace cosas similares, aunque los detalles varían) . Esto permite que el núcleo acceda a todo lo que necesita sin tener que ajustar la MMU. El núcleo protege su espacio de direcciones para que un programa normal que intente leer la memoria se bloquee.

Ingrese a Meltdown: permite que un programa lea indirectamente la memoria del kernel sin fallar. Es mucho más lento que la lectura directa (por lo general, alrededor de 150 kilobytes por segundo, donde la lectura directa se mide en gigabytes por segundo), pero evita la protección. Debido a que toda la memoria física está asignada al espacio de direcciones del kernel, un atacante que emplee Meltdown puede romper la ilusión "Soy el único programa".

Un usuario de escritorio común no tiene muchos programas que necesitan guardar secretos entre sí, y no ejecuta muchos códigos no confiables. La única amenaza importante de Meltdown es que Javascript hostil lea el contenido de su administrador de contraseñas, y Los detalles de cómo funciona Meltdown hacen que sea difícil de usar desde Javascript.

La gran amenaza de Meltdown es para los proveedores de nube y de alojamiento compartido. Estas computadoras ejecutan rutinariamente programas de usuarios no confiables, y dependen de la ilusión de "Soy el único usuario" para mantener las cosas seguras. Meltdown le permite a un atacante con una cuenta romper esta ilusión, y hacer cosas como robar las claves privadas de SSL, nombres de usuario y contraseñas, credenciales de procesamiento de pagos y otra información confidencial de otros usuarios.

    
respondido por el Mark 07.01.2018 - 21:43
fuente
-1

Por ejemplo, puedes leer la clave privada ssh del sistema, o cualquier número de otros recursos protegidos.

    
respondido por el mricon 07.01.2018 - 18:26
fuente
-2

Todo depende de qué tipo de sistema estamos hablando.

No sucederá nada si no tienes malware en tu computadora. Si está utilizando su computadora de escritorio o computadora portátil como usuario único y tiene malware, ha perdido. Sin ningún acceso a la memoria del kernel. Debido a que el malware puede leer los archivos en su disco duro, puede encontrar todo sobre un solo usuario.

Pero en un servidor, si hay malware "en la computadora", en realidad solo se instala para un usuario. Ese usuario ha perdido. Pero los otros 100 usuarios en el mismo servidor deberían estar seguros. Ahora, si puede acceder a la memoria del kernel, puede descubrir cómo atacar a los otros 100 usuarios en el servidor.

    
respondido por el gnasher729 07.01.2018 - 20:50
fuente

Lea otras preguntas en las etiquetas