从内部检测chroot监狱
如何在没有root特权的情况下检测到chroot监狱?假设一个标准的BSD或者Linux系统。我想到的最好的办法是查看" /"的inode值,并考虑它是否合理地较低,但是我想使用一种更准确的检测方法。
[edit 20080916 142430 EST]
仅仅浏览文件系统是不够的,因为复制/ boot和/ dev之类的东西来欺骗被监禁的用户并不困难。
[edit 20080916 142950 EST]
对于Linux系统,检查/ proc中的意外值是合理的,但是首先不支持/ proc的系统呢?
解决方案
回答
防止这样的事情是重点。如果代码应该在chroot中运行,请在启动时设置一个标志。如果我们要黑客入侵,请黑客入侵:检查已知位置中的一些常见问题,计数/ etc中的文件,/ dev中的文件。
回答
我想这取决于我们为什么要使用chroot,以及是否已做出任何努力来掩饰它。
我会检查/ proc,这些文件是自动生成的系统信息文件。内核将在根文件系统中填充这些文件,但是它们可能在chroot文件系统中不存在。
如果根文件系统的/ proc已绑定到chroot中的/ proc,则该信息与chroot环境之间可能存在一些差异。例如,检查/ proc / mounts。
同样,检查/ sys。
回答
如果/的inode是文件系统的根目录,则它始终为2,但是我们可能会被chroot到完整的文件系统中。如果只是chroot(而不是其他一些虚拟化),则可以运行mount,并将已挂载的文件系统与看到的内容进行比较。验证每个安装点都有索引节点2.
回答
在BSD系统上(用uname -a检查),proc应该始终存在。检查/ proc / 1 / exe的dev / inode对(在该路径上使用stat,它不会跟随符号链接的文本,而是跟随基础钩子)是否匹配/ sbin / init。
检查根的inode#2也是一个不错的选择。
在大多数其他系统上,root用户可以通过尝试使用fchdir root-breaking技巧来更快地找到。如果它到任何地方,我们将处于chroot监狱中。