¿Por qué es tan importante "nodev" en / etc / fstab? ¿Cómo se pueden usar los dispositivos de personajes para hackear?

19

Estoy aprendiendo sobre la seguridad de Linux y me cuesta entender por qué una memoria USB con un dispositivo de caracteres es potencialmente peligrosa.

Si tengo una memoria USB con un ejecutable bash que tiene una raíz setuid, el peligro es obvio: cualquiera que tenga una memoria USB puede obtener privilegios de root en mi computadora si tengo una entrada como

/dev/sdb1 /media/usbstick auto defaults 0 0

en mi /etc/fstabporque defaultsincluye suid.

¿Pero qué hay de los dispositivos de personajes? ¿Cómo puedo usar un dispositivo de caracteres para obtener privilegios de root o romper cosas si una memoria USB con un dispositivo de caracteres se monta con devo defaults?

rosix
fuente

Respuestas:

31

Debido a que el acceso al dispositivo subyacente está controlado solo por permisos de archivos de manera predeterminada, por lo que si su memoria USB contiene un sistema de archivos POSIX con un nodo de dispositivo de escritura mundial que corresponde a un dispositivo real en el sistema, puede usar ese nodo de dispositivo para acceder al correspondiente dispositivo como usuario "simple". Imagine un dispositivo correspondiente a uno de los dispositivos de audio, su cámara web /dev/sda(que es un dispositivo de bloque en lugar de un dispositivo de caracteres, pero el argumento es el mismo) ...

Aquí hay un ejemplo para aclarar las cosas. Digamos que quiere acceder /dev/sda(entonces puede hacer casi todo lo que quiera con el contenido del disco, incluyendo plantar un programa que le permita convertirse root; este es un dispositivo de bloque pero el problema es el mismo con los dispositivos de caracteres). En su sistema de destino, ls -l /dev/sdamuestra

brw-rw----  1 root disk      8,   0 Sep  8 11:25 sda

Esto significa que /dev/sdaes un dispositivo de bloque ( bal principio de la línea), con el número mayor 8 y el número menor 0 ( 8, 0el centro de la línea). Solo se puede acceder al dispositivo root(lectura / escritura) y a los miembros del diskgrupo (también lectura / escritura).

Ahora imagine que en este sistema no puede convertirse, rootpero por alguna razón puede montar memorias USB como usuario sin él nodev. En otro sistema, donde esté root, puede crear un archivo especial correspondiente en su llave USB:

mknod -m 666 usersda b 8 0

Esto creará un archivo especial llamado usersda, legible y editable por todos.

Monte la llave en su sistema de destino y, bueno, listo, puede usar el usersdadispositivo de la misma manera que /dev/sda, pero sin restricción de acceso ...

(Esto funcionará incluso con sistemas de archivos cifrados, siempre que pueda acceder al dispositivo mapeador descifrado: cree un dispositivo que coincida con la /dev/mapperentrada correspondiente ).

Stephen Kitt
fuente
¡Eso suena interesante! Pero no estoy seguro de entenderlo. Un dispositivo es un archivo y se accede a los archivos a través de inodos. El dispositivo falso en mi memoria USB tendría un inodo diferente y, por lo tanto, sería un dispositivo diferente, ¿no?
rosix
77
Un dispositivo es un archivo especial, con un número mayor y menor; puede verlos si lo hace ls -l /dev, son los dos números que aparecen en lugar del tamaño del archivo. El núcleo hace coincidir un archivo especial del dispositivo con un controlador que utiliza esos números, por lo que puede tener varios archivos que apuntan al mismo controlador y dispositivo del núcleo. Los archivos especiales se crean usando mknod.
Stephen Kitt
Tenga en cuenta que los /dev/tty*dispositivos son dispositivos de caracteres, y un intruso que obtiene acceso completo de lectura / escritura a sus sesiones de terminal y / o la consola del sistema combinada con las características
abusivas del
1
@TheQuark más o menos, sí. Es un poco más general; Yo diría que "interpretar" significa "tratar los archivos del dispositivo como nodos del dispositivo, no como archivos simples".
Stephen Kitt
1
@ n00b no puede montarlo usersda, pero al menos puede usarlo para leer desde el disco subyacente sin restricciones, y posiblemente también escribir en él. Puede copiar fácilmente todo el contenido del disco y con herramientas como debuge2fssobrescribir, /etc/shadowetc.
Stephen Kitt