Docker容器环境检测方法【代码】
参考资料:
Determining if a process runs inside lxc/Docker
http://stackoverflow.com/questions/20010199/determining-if-a-process-runs-inside-lxc-docker
第1章 背景
现在有研究表明,人们目前有使用Docker进行恶意代码重现工作的倾向。Docker的反检测可分为三部分:CPU反检测,内存反检测和存储数据反检测。该技术利用了AUFS的层叠镜像技术,使得我们的Docker反检测技术可以很容易地实现在镜像的一层中——反检测层。这样,只需要将反检测层动态地部署到Docker容器中,即可实现对Container环境的CPU、内存和存储的封装,从而遮蔽掉Container特征。这样的话,该容器中的恶意代码也就无法检测其自身是否在Container中运行了。
第2章 cgroup方法
在Host和Container中执行cat /proc/1/cgroup命令的结果是不同的,可以利用这一点进行判断。(或者cat /proc/self/cgroup命令也行)
在Host中执行cat /proc/1/cgroup命令的结果:
在Container中执行cat /proc/1/cgroup命令的结果:
第3章 find docker方法(原创)
在Host和Container中的文件系统中,有关于docker的文件、目录有很大差别。因此可以通过枚举文件系统中关于docker的文件,进行判断。
在Host中执行find / -name docker命令的结果:
在Container中执行find / -name docker命令的结果:
第4章 环境变量方法(原创)
在Host和Container中执行env命令查看环境变量的结果是不同的,可以利用这一点进行判断。(或者cat /proc/1/environ命令也可)
在Host中执行env命令的结果:
在Container中执行env命令的结果:
第5章 Dropped capabilities方法
帖子上提到了:”Otherwise, if you are root, you can try to perform mknod or mount operation, if it fails, you are most likely in a container with dropped capabilities.”
第6章 Mount方法(原创)
在Host和Container中执行mount命令的结果是不同的,可以利用这一点进行判断。
在Host中执行mount命令的结果:
在Container中执行mount命令的结果:
第7章 设备文件方法(不成功)
在Host和Container中执行ls /dev命令的结果是不同的,可以利用这一点进行判断。
但是目前还没发现本质的不同点。
第8章 文件系统方法(原创)
在Host和Container中执行df -h命令的结果是不同的,可以利用这一点进行判断。
在Host中执行df -h命令的结果:
其中,cgmanager是cgroup的管理器daemon,运行于root下。
在Container中执行df -h命令的结果: