为什么chroot(2)
非特权用户无法使用?
我不明白互联网上现有的答案。例如这个https://lists.freebsd.org/pipermail/freebsd-security/2003-April/000123.html。
sudo
如果/etc/sudoers
和/etc
不属于root,真的会起作用吗?非特权用户不能在 chroot 中创建 root 拥有的 setuid 二进制文件,对吗?
非特权用户究竟如何破坏 chroot 环境?
我只能想到类似的事情
ln /mnt/backup/XYZ/etc/sudoers $CHROOT/etc/sudoers
ln /usr/bin/sudo $CHROOT/usr/bin/sudo
其中XYZ
表示一些备份实例,其中管理员确实搞砸了并允许我的用户进行危险的操作。但这有点特别。chroot(2)
如果非特权用户可以使用,是否有更直接的利用方法?
答案1
chroot(2)
不会更改工作目录,因此调用后.
可以在以/
.然后,您可以使用相对路径从 chroot 内部运行任何 setuid 二进制文件。可能有很多方法可以利用这一点。例如,通过修改/etc/ld.so.preload
chroot 目录内部,您可以使用 root 权限执行任意代码。你可以看一下例子。
答案2
普通用户无法创建 setuid 二进制文件,但没有什么可以阻止他创建到现有 setuid 二进制文件的硬链接。因此,如果他对与 相同的文件系统上的某个目录具有写权限/usr/bin
,他可以将监狱放入此目录中,创建指向su
或 的硬链接sudo
,然后将自定义的/etc/passwd
and/etc/sudoers
放入监狱中。
也许这不适用于sudo
,因为它可能会检查它/etc/sudoers
是否由 root 拥有。但我敢打赌su
不会检查 的所有权/etc/passwd
。
答案3
根据布拉德·斯宾格勒的说法https://forums.grsecurity.net/viewtopic.php?f=7&t=2522,有一个简单的方法可以使用CAP_SYS_CHROOT
(使用的功能chroot(2)
:
CAP_SYS_CHROOT:通用:来自 Julien Tinnes/Chris Evans:如果您对与 suid root 二进制文件相同的文件系统具有写访问权限,请使用后门 libc 设置 chroot 环境,然后在 chroot 中执行硬链接的 suid root 二进制文件并获得完全 root通过您的后门获得特权