【云原生攻防研究】容器不安全配置导致的安全漏洞

💡 原文中文,约3800字,阅读约需9分钟。
📝

内容提要

云原生应用的安全风险与威胁不断显现,错误配置导致的安全问题比安全漏洞更多。容器特权模式和Capabilities配置不当会导致容器逃逸。挂载Docker Socket到容器内也会导致容器逃逸。

🔎

延伸解读

错误配置:云原生安全的主要风险

文章指出,云原生安全事件中,错误配置导致的问题比安全漏洞更常见。根据某厂容器安全调查报告,基于CIS标准的容器基线检查整体通过率仅约67.22%,未通过率最高的检查项包括未限制使用PID(100%)、未设置根文件系统为只读(98.8%)、未确保Linux内核功能受限(97.97%)和未限制额外权限(93.38%)。这表明生产环境中大量容器存在严重配置风险,且由于技术门槛,许多人对这些风险的影响面认识不足。

特权模式:容器逃逸的捷径

特权模式原本用于支持Docker-in-Docker等特性,但以特权模式运行不可信容器会严重威胁宿主机安全。Docker官方文档说明,--privileged允许容器访问宿主机所有设备,并修改AppArmor或SELinux配置,使容器拥有近乎宿主机进程的权限。文章示例中,攻击者可在特权容器内直接挂载宿主机磁盘并chroot,从而基本实现逃逸。这提醒我们,除非绝对必要,应避免使用特权模式,尤其不能运行不可信容器。

Capabilities配置:精细控制权限

Linux capabilities机制将超级用户权限拆分为38种细粒度能力,允许普通用户执行特定特权操作。大多数云厂商容器默认赋予14种capabilities,如cap_chown、cap_net_raw等。管理员可通过--cap-add和--cap-drop精确配置。文章示例显示,若为容器添加SYS_ADMIN和NET_ADMIN,容器内进程可执行mount、umount、iptables等操作,给容器和集群带来风险。因此,应遵循最小权限原则,仅添加必要的capabilities。

危险挂载:Docker Socket泄露

将Docker Socket(/var/run/docker.sock)挂载到容器内是另一种危险的配置。该套接字用于与Docker守护进程通信,可查询信息或下发命令。如果攻击者控制了此类容器,就能通过Docker Socket与宿主机Docker守护进程交互,轻松实现容器逃逸,除非有额外的权限限制。文章通过具体示例展示了逃逸过程,强调应避免在容器内挂载Docker Socket,以降低安全风险。

❓

Q&A

容器不安全配置主要会导致哪些安全漏洞?

容器不安全配置主要会导致容器逃逸,具体包括:特权模式运行容器、Capabilities配置不当、挂载Docker Socket到容器内等,这些都可能让攻击者获取宿主机权限。

为什么说错误配置比安全漏洞带来的容器安全问题更多?

根据某厂容器安全调查报告,基于CIS标准的容器基线检查整体通过率仅约67.22%,未通过率最高的检查项包括没有限制使用PID(100%)、没有设置容器根文件系统为只读(98.8%)等,说明生产环境中大量容器存在严重配置风险,因此错误配置导致的安全问题比安全漏洞更多。

特权模式运行容器有什么安全风险?

特权模式下的容器可以访问宿主机上的所有设备,并拥有与宿主机进程几乎相同的访问权限。攻击者可以轻易从容器中逃逸,例如挂载宿主机磁盘并切换根目录,从而获取宿主机权限。

容器Capabilities配置不当会带来什么后果?

如果为容器添加了不必要的Capabilities(如SYS_ADMIN和NET_ADMIN),容器进程将允许执行mount、umount、iptables等系统和网络管理操作,导致容器和集群面临风险。管理员应使用--cap-add和--cap-drop精确配置。

挂载Docker Socket到容器内为什么会导致容器逃逸?

Docker Socket是Docker守护进程监听的Unix域套接字,用于与守护进程通信。如果在攻击者可控的容器内挂载了/var/run/docker.sock,攻击者就可以通过该套接字向宿主机Docker守护进程发送指令,从而轻松逃逸容器并获取宿主机权限。

如何防范容器不安全配置导致的安全漏洞?

应避免使用特权模式运行不可信容器,精确配置Capabilities(使用--cap-add和--cap-drop),不要将Docker Socket挂载到容器内,并遵循CIS等安全基线进行合规检查,以降低配置风险。

🏷️

标签

➡️

继续阅读