从内部检测chroot监狱

时间:2020-03-05 18:56:42  来源:igfitidea点击:

如何在没有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监狱中。