kernel: deshabilitar / dev / kmem y / dev / mem

8

Entiendo eso /dev/kmemy /dev/memproporciono acceso a la memoria (es decir, RAM sin formato) del sistema. También soy consciente de que /dev/kmempuede deshabilitarse completamente en el núcleo y que el acceso puede restringirse /dev/mem.

Me parece que tener acceso en bruto a la memoria puede ser útil para desarrolladores y hackers, pero ¿por qué debería necesitar acceso a la memoria /dev/mem? AFAIK no se puede deshabilitar en el núcleo (a diferencia /dev/kmem). Tener acceso a memoria en bruto que puede ser potencialmente abusado / explotado me parece que solo estoy buscando problemas.

¿Hay algún uso práctico para ello? ¿Algún programa de usuario requiere que funcione correctamente?

usuario1968963
fuente
1
lwn.net/Articles/147901 sugiere que el servidor X podría usar /dev/mem. No estoy seguro de que siga siendo relevante.
Mat
Este artículo de LJ sugiere lo mismo: linuxjournal.com/magazine/anthony-lineberry-devmem-rootkits
slm
¿Deshabilitó también los módulos cargables? Porque eso es aún más peligroso que /dev/mem. Cargue un módulo, ejecute el código en modo kernel. Y además de eso, endurecerse contra los atacantes con acceso de root solo vale la pena si hay cosas que root no puede hacer, lo que tiende a no ser el caso en las instalaciones típicas.
Gilles 'SO- deja de ser malvado'
@Gilles: estoy usando módulos firmados criptográficamente. Solo se pueden cargar los módulos firmados con mi clave privada.
user1968963
Además de STRICT_DEVMEM descrito en man mem, el acceso de escritura a / dev / mem está deshabilitado por los parches de bloqueo del kernel utilizados para admitir el "arranque seguro" (el bloqueo se puede habilitar sin un arranque seguro). phoronix.com/…
sourcejedi

Respuestas:

6

Hay una plataforma de diapositivas de Scale 7x 2009 titulada: Socavando el kernel de Linux: inyección de código malicioso a través de / dev / mem que contenía estas 2 viñetas.

¿Quién necesita esto?

  • Servidor X (memoria de video y registros de control)
  • DOSEmu

De todo lo que he encontrado en la búsqueda hasta ahora, parece que estas 2 viñetas son las favoritas para usos legítimos.

Referencias

slm
fuente
¿Qué pasa si no ejecuto X serveren mi servidor y, por lo tanto, no lo necesito /dev/mem? ¿Hay alguna forma de deshabilitar /dev/memel núcleo por completo? Solo pude encontrar "Filtrar acceso a / dev / mem" ( CONFIG_STRICT_DEVMEM).
user1968963
1
Un servidor X moderno, bajo Linux, puede vivir sin / dev / mem, ya que las tarjetas gráficas tienen su propio nodo de dispositivo. Ese es el caso con i915 por ejemplo.
jørgensen
3

Vale la pena señalar que incluso si se deshabilitó /dev/memy /dev/kmemesa memoria todavía se puede volcar; mira man procpara revelar /proc/kcore; Es la memoria física del sistema. Un kit de herramientas forenses realmente bueno rekall tiene una herramienta que ya hace esto ; vuelca la memoria (y/boot archivos) para que puedan ser analizados.

De hecho, Ubuntu deshabilita por defecto/dev/kmem :

No hay un uso moderno de /dev/kmemmás allá de los atacantes que lo usan para cargar rootkits de kernel. CONFIG_DEVKMEMse establece en "n". Si bien el /dev/kmemnodo del dispositivo todavía existe en Ubuntu 8.04 LTS a través de Ubuntu 9.04, en realidad no está conectado a nada en el núcleo.

Ubuntu no se desactiva /dev/memporque las aplicaciones lo necesitan .

Algunas aplicaciones (Xorg) necesitan acceso directo a la memoria física desde el espacio del usuario. El archivo especial /dev/memexiste para proporcionar este acceso. En el pasado, era posible ver y cambiar la memoria del núcleo de este archivo si un atacante tenía acceso de root. La CONFIG_STRICT_DEVMEMopción del kernel se introdujo para bloquear el acceso a la memoria que no es del dispositivo (originalmente llamado CONFIG_NONPROMISC_DEVMEM).

Cómo deshabilitar /proc/kcore ?

No actives CONFIG_PROC_KCORE al construir el núcleo.

¿Cómo deshabilitas? /dev/mem ?

Bueno, mirar man memnos da algunos detalles sobre cómo se creó:

mknod -m 660 /dev/mem c 1 1
chown root:kmem /dev/mem

Deberías poder simplemente rm -rf /dev/mem; puede deshabilitar durante la fase de compilación del núcleo al no habilitar CONFIG_STRICT_DEVMEM.

¿Cómo deshabilitar/dev/kmem ?

Asegúrese de que CONFIG_DEVKMEMno esté habilitado en la compilación del núcleo.

¿Cómo prevenir los ataques de arranque en frío?

¿Qué pasa si yo era capaz de desactivar /proc/kcore, /dev/mem, /dev/kmemy luego utiliza una partición de intercambio cifrada o no usó de intercambio en absoluto? Bueno, tu memoria podría congelarse y accederse de esa manera. ¿Cómo se previene este ataque? Cifras tu RAM; ¿Cómo encriptas tu RAM? No puedes Ver TRESOR para más detalles .


fuente
He desactivado /dev/kmemen mi kernel, y no veo ninguno /proc/kcoreen mi sistema. Pero sí /dev/mem, y me gustaría deshabilitarlo.
Martin Vegter
Hay errores tipográficos en esta respuesta. /proc/memdebería ser /dev/mem, de manera similar para /proc/kmem.
rlf
@ bbb31 uno agradable. Pensé que podría haber una posibilidad de que me faltara algo. Si ese hubiera sido el caso, quería darle la oportunidad de aclarar.
rlf
"¿Cómo evitas este ataque? Cifras tu RAM; ¿cómo cifras tu RAM? No puedes". Nota: En el futuro, deberías poder hacerlo (al menos en algunos tipos de hardware). ¡Pronto llegará! lwn.net/Articles/776688
盖子
1

Como sabe, /dev/memproporciona acceso a la memoria física de un sistema en ejecución. /dev/kmemproporciona acceso a la memoria virtual del kernel. Ambos dispositivos de caracteres se pueden deshabilitar de forma persistente a través de las opciones de configuración del núcleo (el código es la fuente de información más autorizada, por lo que se utiliza como referencia). Desarmar las dos primeras opciones a continuación deshabilitará los dispositivos correspondientes.

Dependiendo de su distribución, su configuración actual del núcleo se puede ver usando algo como zless /proc/config.gzoless /boot/config-$(uname -r) .

Creo que la intención inicial de /dev/memera apoyar la interacción con periféricos mapeados en memoria . Las implicaciones negativas de seguridad obvias de tener estos dispositivos virtuales disponibles (por ejemplo, un atacante que puede parchear sobre la marcha la memoria de otro proceso o incluso el núcleo) se conocen desde hace al menos una década. La restricción del acceso a /dev/memha sido admitida en el núcleo principal desde principios de 2008 , /dev/kmemtambién ha sido opcional desde entonces. .

Hace una década parece que Xdependía /dev/mem, no creo que esto sea cierto. Para probar las afirmaciones sobre la Xnecesidad /dev/mem, eliminé el dispositivo virtual de mi computadora portátil ayer y ha estado funcionando aparentemente perfecto desde entonces. En 2017 parece que no hay un uso práctico para estos dispositivos fuera de la investigación y el desarrollo.

Desde una perspectiva de seguridad, es una buena idea eliminar estos dispositivos. Todavía vale la pena señalar que un atacante remoto , con privilegios elevados, puede leer la memoria fuera de su espacio de direcciones. Se puede acceder a la memoria de otras aplicaciones de espacio de usuario mediante /proc/<pid>/mem. Se puede acceder a la memoria del núcleo mediante /proc/kcore.

rlf
fuente
0

No incluí /dev/memen mi sistema desde el principio. Utilizo Gentoo Linux, por lo que esto puede no ser una sorpresa, ya que con esta distribución de Linux prácticamente construyes todos los paquetes tú mismo, incluido el kernel de Linux.

Nunca noté ningún problema debido a la falta de /dev/mem, incluso cuando uso X.org X11. Justo hoy noté que una aparición del paquete x11-drivers/xf86-video-vesaimprime un mensaje que indica que requiere /dev/mem, como este:

* This driver requires /dev/mem support in your kernel
*   Device Drivers --->
*     Character devices  --->
*       [*] /dev/mem virtual device support

Como no instalé el controlador VESA para el XServer intencionalmente, o incluso si solo fuera una alternativa, en realidad nunca tuve que usarlo y, por lo tanto, no lo noté, hasta ahora.

Pero esto prueba el punto de que a) X11 ya no necesita /dev/mem, y b) que algunos controladores de video X11 aún pueden hacerlo de todos modos.

Los controladores de video más nuevos para hardware específico probablemente funcionarán sin él. Al igual que el X.org-X11 moderno (en Gentoo x11-base/xorg-server) , ya no tiene que ser suid root , así es como se ve el progreso ...

luttztfz
fuente