一个未公开的容器逃逸方式
💡
原文中文,约10400字,阅读约需25分钟。
📝
内容提要
发现容器逃逸方法,利用进程的/proc/[pid]/root符号链接,需要ptrace(2)权限检查,防止逃逸需要非root用户运行容器,禁止共享PID namespace,禁止授予CAP_SYS_PTRACE权限,监控/proc/[pid]/root文件访问操作。
🎯
关键要点
- 最近发现了一种容器逃逸方法,利用/proc/[pid]/root符号链接。
- 容器以uid为0运行且共享宿主机PID namespace时,可能实现容器逃逸。
- 访问/proc/[pid]/root需要ptrace权限检查,确保安全性。
- 如果调用进程和目标进程在同一线程组,则允许访问。
- 访问模式中指定PTRACE_MODE_FSCREDS时,使用调用进程的fsuid和fsgid进行权限检查。
- 如果目标进程被设置为nondumpable且调用进程没有CAP_SYS_PTRACE权限,则拒绝访问。
- 可以通过创建与目标进程相同UID和GID的用户来实现容器逃逸。
- 建议容器以非root用户运行,禁止共享宿主机PID namespace和授予CAP_SYS_PTRACE权限。
- 监控/proc/<pid>/root路径前缀的文件访问操作以检测潜在的逃逸行为。
➡️