一个未公开的容器逃逸方式
原文中文,约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路径前缀的文件访问操作以检测潜在的逃逸行为。
🏷️