目录

Docker 容器识别

想研究的课题是容器的渗透,一大方向就是容器逃逸。那么逃逸前自然需要判断是否处在容器中。那么就需要了解容器有哪些特征。假设进入一台远程服务器,通过何种手段开源判断此环境是否在容器之中。

容器虚拟技术有很多,最主流的就是 Docker,也比较方便搭建实验环境。所以就先研究 Docker 的容器特征。手边刚好有 Docker 环境、WSL 环境(Kali)、阿里云 ECS(CentOS)和 Hyper-V 虚拟机(Kali)四种环境可以拿来做对比实验,VMWare 我电脑上暂时没安装,就忽略了。

1 查看文件

1.1 查看/proc/1/cgroup 文件

可以查看/proc/1/cgroup 文件,也可以看/proc/self/cgroup。

1
2
cat /proc/1/cgroup
cat /proc/self/cgroup

两个指令作用相似,都是查看 cgroup 信息,如果出现 docker 字样,就说明当前环境可能在 Docker 容器中。

1.2 查看/proc/1/status 文件

1
cat /proc/1/status

1.3 查看.dockerenv 文件

Docker 容器在根目录下可能存在一个名为.dockerenv 的文件,该文件通常为空,作用是作为容器的标志文件。

1
2
ls -al /
ll /

2 查看系统信息

2.1 查看 mount 信息

1
mount | grep '/ type'

Docker 环境通常显示 overlay 文件系统。

2.2 查看块设备

1
ls -l /dev

容器内默认无块设备。

2.3 查看硬盘信息

1
fdisk -l

容器一般默认没有分区。

2.4 查看文件系统以及挂载点

1
df -h | egrep '(overlay|aufs)'

3 使用工具

3.1 通过 systemd-detect-virt 指令

1
systemd-detect-virt

但 Docker 容器里面通常没有 systemd 进程,所以可能无法正常使用该指令。