Entiendo eso /dev/kmem
y /dev/mem
proporciono acceso a la memoria (es decir, RAM sin formato) del sistema. También soy consciente de que /dev/kmem
puede 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?
/dev/mem
. No estoy seguro de que siga siendo relevante./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.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/…Respuestas:
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.
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
fuente
X server
en mi servidor y, por lo tanto, no lo necesito/dev/mem
? ¿Hay alguna forma de deshabilitar/dev/mem
el núcleo por completo? Solo pude encontrar "Filtrar acceso a / dev / mem" (CONFIG_STRICT_DEVMEM
).Vale la pena señalar que incluso si se deshabilitó
/dev/mem
y/dev/kmem
esa memoria todavía se puede volcar; miraman proc
para 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
:Ubuntu no se desactiva
/dev/mem
porque las aplicaciones lo necesitan .Cómo deshabilitar
/proc/kcore
?No actives
CONFIG_PROC_KCORE
al construir el núcleo.¿Cómo deshabilitas?
/dev/mem
?Bueno, mirar
man mem
nos da algunos detalles sobre cómo se creó:Deberías poder simplemente
rm -rf /dev/mem
; puede deshabilitar durante la fase de compilación del núcleo al no habilitarCONFIG_STRICT_DEVMEM
.¿Cómo deshabilitar
/dev/kmem
?Asegúrese de que
CONFIG_DEVKMEM
no 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/kmem
y 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
/dev/kmem
en mi kernel, y no veo ninguno/proc/kcore
en mi sistema. Pero sí/dev/mem
, y me gustaría deshabilitarlo./proc/mem
debería ser/dev/mem
, de manera similar para/proc/kmem
.Como sabe,
/dev/mem
proporciona acceso a la memoria física de un sistema en ejecución./dev/kmem
proporciona 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.CONFIG_DEVKMEM
: determina si/dev/kmem
se crea en el arranqueCONFIG_DEVMEM
: determina si/dev/mem
se crea en el arranqueCONFIG_STRICT_DEVMEM
: si/dev/mem
existe, determina si el acceso está restringidoDependiendo de su distribución, su configuración actual del núcleo se puede ver usando algo como
zless /proc/config.gz
oless /boot/config-$(uname -r)
.Creo que la intención inicial de
/dev/mem
era 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/mem
ha sido admitida en el núcleo principal desde principios de 2008 ,/dev/kmem
también ha sido opcional desde entonces. .Hace una década parece que
X
dependía/dev/mem
, no creo que esto sea cierto. Para probar las afirmaciones sobre laX
necesidad/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
.fuente
No incluí
/dev/mem
en 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 paquetex11-drivers/xf86-video-vesa
imprime un mensaje que indica que requiere/dev/mem
, como este: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 ...fuente