wsxk / wsxk.github.io

MIT License
5 stars 0 forks source link

chroot 详解 #179

Open wsxk opened 7 months ago

wsxk commented 7 months ago

https://wsxk.github.io/chroot/

在做某次关于chroot 的jailbreak实验时,深受某老师迫害(啥都不会瞎讲),做得非常痛苦,你说你不会吧,那你布置这实验干啥呢,抄的还是别的学习2014年的版本,2022年用seedubuntu14:04,哈哈,笑不活喽

他啥都不会,但是实验我们还是得做(哭),这里记录下有关chroot的知识

什么是chroot chroot原理 chroot 用法

  用法一 shell执行
  用法二 c语言自动执行

chroot jailbreak reference

什么是chroot

容器的起点呢,可以追溯到 1979 年Version 7 UNIX系统中提供的 chroot 命令,这个命令是英文单词“Change Root”的缩写,它所具备的功能是当某个进程经过 chroot 操作之后,它的根目录就会被锁定在命令参数所指定的位置,以后它或者它的子进程就不能再访问和操作该目录之外的其他文件。

人们使用容器的最初目的,并不是为了部署软件,而是为了隔离计算机中的各类资源,以便降低软件开发、测试阶段可能产生的误操作风险,或者是专门充当蜜罐,吸引黑客的攻击,以便监视黑客的行为

1991 年,世界上第一个监控黑客行动的蜜罐程序就是使用 chroot 来实现的,那个参数指定的根目录当时被作者被戏称为“Chroot 监狱”(Chroot Jail),而黑客突破 chroot 限制的方法就叫做 Jailbreak。后来,FreeBSD 4.0 系统重新实现了 chroot 命令,把它作为系统中进程沙箱隔离的基础,并将其命名为FreeBSD jail。

后面人们发现,使用容器技术来部署软件也非常方便,不仅可以解决不同软件依赖库的冲突问题,还能即插即用(把容器打包放到另一个机器中实现快速部署),后来的docker就诞生了。

chroot原理

回到正题,所谓的改变root目录,其实就是 改变进程的taskstruct中fs结构体中的root字段,实现不同的根目录查询。从实现角度看, chroot的确不能实现安全的环境隔离

chroot 用法

用法一 shell执行

chroot只能由高贵的root来执行

sudo chroot /path/to/your/new/root /bin/bash

这里有一点要提的是,因为chroot会切换根目录,所以/bin/bash的依赖你需要事先移动到 new root里。(可以通过ldd /bin/bash查看依赖关系)

我们可以跟踪一下chroot的执行流程

strace chroot . /bin/sh

execve(