我正在学习 Linux 安全性,并努力理解为什么带有字符设备的 USB 记忆棒具有潜在危险。
如果我有一个带有 bash 可执行文件且具有 setuid root 的 USB 记忆棒,那么危险是显而易见的:如果我有类似这样的条目,任何拥有此类 USB 记忆棒的人都可以在我的计算机上获得 root 权限。
/dev/sdb1 /media/usbstick auto defaults 0 0
在我的/etc/fstab
因为defaults
包括suid
。
但是字符设备呢?如果带有字符设备的 USB 记忆棒安装有dev
或,如何使用字符设备获得 root 权限或破坏内容defaults
?
答案1
因为默认情况下对底层设备的访问仅由文件权限控制,所以如果您的 U 盘包含 POSIX 文件系统,并且具有与系统中的真实设备相对应的全局可写设备节点,则可以使用该设备节点来访问相应的设备。设备作为“普通”用户。想象一下与音频设备之一(您的网络摄像头)相对应的设备/dev/sda
(这是块设备而不是字符设备,但参数是相同的)...
这是一个让事情变得更清楚的例子。假设你想访问/dev/sda
(那么你几乎可以对磁盘的内容做任何你想做的事情,包括植入一个程序,让你成为root
;这是一个块设备,但问题与字符设备相同)。在您的目标系统上,ls -l /dev/sda
显示
brw-rw---- 1 root disk 8, 0 Sep 8 11:25 sda
这意味着/dev/sda
是一个块设备(b
行首的 ),主设备号为 8,次设备号为 0(8, 0
行中间的 )。该设备只能由组成员访问root
(读/写)和disk
组成员(也可以读/写)。
现在想象一下,在这个系统上,您无法成为root
,但由于某种原因,您可以作为用户安装 USB 记忆棒,而无需nodev
.在您所在的另一个系统上root
,您可以在 USB 密钥上创建相应的特殊文件:
mknod -m 666 usersda b 8 0
这将创建一个名为 的特殊文件usersda
,每个人都可读可写。
将密钥安装到您的目标系统上,嘿,很快,您就可以usersda
以与 相同的方式使用该设备/dev/sda
,但没有访问限制...
(即使使用加密的文件系统,只要您能够访问解密的映射器设备,这也适用:创建与适当条目匹配的设备/dev/mapper
。)