在渗透测试过程中,我们的起始攻击点可能在一台虚拟机里或是一个Docker环境里,甚至可能是在K8s集群环境的一个pod里,我们应该如何快速判断当前是否在容器环境中运行呢?
当拿到shell权限,看到数字和字母随机生成的主机名大概率猜到在容器里了,查看进程,进程数很少,PID为1的进程为业务进程,这也是容器环境的典型特征。当然,以上这两种都是比较主观的判断。接下来,我们再来盘点下比较常用的几种检测方式。
方式一:查询cgroup信息
最简单精准的方式就是查询系统进程的cgroup信息,通过响应的内容可以识别当前进程所处的运行环境,就可以知道是在虚拟机、docker还是kubepods里。
cat /proc/1/cgroup
docker 环境下:
虚拟机环境下:
通过判断根目录下的 .dockerenv文件是否存在,可以简单的识别docker环境。
K8s&docker环境下:ls -alh /.dockerenv 可以找到文件。
虚拟机环境下:是没有这个.dockerenv文件的。
利用mount查看挂载磁盘是否存在docker相关信息。
K8s&docker环境下:
虚拟机环境下:
fdisk -l 容器输出为空,非容器有内容输出。
K8s&docker环境下:
虚拟机环境下:
df -h 检查文件系统挂载的目录,也能够简单判断是否为docker环境。
K8s&docker环境下:
虚拟机环境:
docker容器和虚拟机的环境变量也有点区别,但不好判断,但pod里面的环境变量其实是很明显的。
K8s环境下:
原文始发于微信公众号(Bypass):容器环境检测方法总结