Docker --privileged
学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE)
学习和实践 GCP 黑客技术:
HackTricks 培训 GCP 红队专家 (GRTE)
影响因素
当你以特权模式运行容器时,以下是你禁用的保护措施:
挂载 /dev
在特权容器中,所有的 设备可以在 /dev/
中访问。因此,你可以通过 挂载 主机的磁盘来 逃逸。
只读内核文件系统
内核文件系统为进程提供了一种修改内核行为的机制。然而,对于容器进程,我们希望防止它们对内核进行任何更改。因此,我们在容器内将内核文件系统挂载为只读,确保容器进程无法修改内核。
遮蔽内核文件系统
/proc 文件系统是选择性可写的,但出于安全考虑,某些部分通过用 tmpfs 进行覆盖而屏蔽了写入和读取访问,确保容器进程无法访问敏感区域。
tmpfs 是一个将所有文件存储在虚拟内存中的文件系统。tmpfs 不会在你的硬盘上创建任何文件。因此,如果你卸载一个 tmpfs 文件系统,所有驻留在其中的文件将永远丢失。
Linux 能力
容器引擎以 有限数量的能力 启动容器,以控制容器内部的操作。特权 容器具有 所有 可访问的 能力。要了解能力,请阅读:
Linux Capabilities您可以通过使用 --cap-add
和 --cap-drop
标志来操纵容器可用的能力,而无需以 --privileged
模式运行。
Seccomp
Seccomp 对于 限制 容器可以调用的 syscalls 非常有用。运行 docker 容器时,默认启用默认的 seccomp 配置文件,但在特权模式下它被禁用。了解有关 Seccomp 的更多信息:
Seccomp另外,请注意,当在 Kubernetes 集群中使用 Docker(或其他 CRI)时,seccomp 过滤器默认是禁用的。
AppArmor
AppArmor 是一种内核增强,用于将 容器 限制在 有限 的 资源 集合中,并具有 每个程序的配置文件。当您使用 --privileged
标志运行时,此保护将被禁用。
SELinux
使用 --privileged
标志运行容器会禁用 SELinux 标签,导致其继承容器引擎的标签,通常为 unconfined
,赋予与容器引擎相似的完全访问权限。在无根模式下,它使用 container_runtime_t
,而在根模式下,应用 spc_t
。
什么不受影响
命名空间
命名空间不受--privileged
标志的影响。尽管它们没有启用安全约束,但它们并不能看到系统或主机网络上的所有进程,例如。用户可以通过使用**--pid=host
、--net=host
、--ipc=host
、--uts=host
**容器引擎标志来禁用单个命名空间。
用户命名空间
默认情况下,容器引擎不使用用户命名空间,除了无根容器,无根容器需要它们进行文件系统挂载和使用多个 UID。用户命名空间是无根容器的核心,无法禁用,并通过限制特权显著增强安全性。
参考文献
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Last updated