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 setuid root, el peligro es obvio:cualquier persona con una memoria USB de este tipo puede obtener privilegios de root en mi computadora si tengo una entrada como
/dev/sdb1 /media/usbstick auto defaults 0 0
en mi /etc/fstab
porque defaults
incluye suid
.
Pero, ¿qué pasa con los dispositivos de carácter? ¿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 dev
? o defaults
?
Respuesta aceptada:
Debido a que el acceso al dispositivo subyacente está controlado solo por permisos de archivo de forma predeterminada, por lo que si su memoria USB contiene un sistema de archivos POSIX con un nodo de dispositivo de escritura mundial correspondiente a un dispositivo real en el sistema, puede usar ese nodo de dispositivo para acceder al correspondiente dispositivo como un usuario "simple". Imagina un dispositivo correspondiente a uno de los dispositivos de audio, tu cámara web, /dev/sda
(que es un dispositivo de bloques en lugar de un dispositivo de caracteres, pero el argumento es el mismo)…
Aquí hay un ejemplo para hacer las cosas más claras. Digamos que desea acceder a /dev/sda
(entonces puedes hacer prácticamente lo que quieras con el contenido del disco, incluso plantar un programa que te permita convertirte en 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/sda
espectáculos
brw-rw---- 1 root disk 8, 0 Sep 8 11:25 sda
Esto significa /dev/sda
es un dispositivo de bloque (el b
al principio de la línea), con el número mayor 8 y el número menor 0 (el 8, 0
en el medio de la línea). El dispositivo solo es accesible para root
(lectura/escritura) y miembros del disk
grupo (también lectura/escritura).
Ahora imagina que en este sistema no puedes convertirte en root
pero por alguna razón puede montar memorias USB como usuario sin nodev
. En otro sistema, donde eres 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 escribible por todos.
Monte la clave en su sistema de destino y listo, puede usar el usersda
dispositivo de la misma manera que /dev/sda
, pero sin restricción de acceso…
(Esto funcionará incluso con sistemas de archivos encriptados, siempre que pueda acceder al dispositivo mapeador descifrado:cree un dispositivo que coincida con el /dev/mapper
apropiado entrada.)