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