跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

如何在K8s中防范Container-Escape容器逃逸基线

防范容器逃逸的核心是权限最小化、运行时限制与纵深监控协同:禁用privileged模式,严格限制hostPath/hostPID等敏感挂载与共享,强制非root运行并裁剪CAP_SYS_ADMIN等高危能力,启用只读根文件系统,禁用自动挂载ServiceAccountToken,并叠加eBPF/LSM策略与安全容器运行时。 防范容器逃逸(Container Escape)的核心,是切断攻击者从容器突破隔离、触达宿主机的常见路径。不是靠单一配置,而是通过权限最小化、运行时限制和纵深监控三类措施协同落地。 禁用高危Pod配置 特权模式( privileged: true )是逃逸最直接的入口,必须全局禁止。同时需严格审查以下配置: hostPath 挂载:禁止挂载
/
、
/proc
、
/var/run/docker.sock
、
/sys
等敏感路径;确有需要时,应限定只读且路径精确到子目录(如
/etc/config
) hostPID / hostIPC / hostNetwork :除非极特殊场景(如网络插件或监控代理),一律设为
false
allowPrivilegeEscalation: true :默认即为 true,必须显式设为
false
,防止容器内进程调用
execve
提权 强制非 root 运行与能力裁剪 即使逃逸发生,低权限起点也能大幅压缩攻击面: 在 PodSecurityContext 中设置
runAsNonRoot: true
,并搭配
runAsUser: 1001
(镜像中需真实存在该用户) 使用
capabilities.drop
移除默认继承的高危能力,至少包括:
SYS_ADMIN
、
NET_ADMIN
、
SETUID
、
SETGID
、
RAWIO
启用
readOnlyRootFilesystem: true
,阻止向容器根文件系统写入恶意二进制或配置 阻断凭证泄露与API滥用 逃逸后攻击者常依赖 ServiceAccount Token 或 Kubelet API 扩展权限: 禁用默认自动挂载:在 Pod 中设置
automountServiceAccountToken: false
;仅对明确需要访问 API 的服务,绑定最小权限 RBAC Role 并单独挂载 token 限制 Kubelet API 访问:确保节点上 Kubelet 的
--read-only-port=0
(关闭只读端口),且
--anonymous-auth=false
、
--authorization-mode=Webhook
启用 NodeRestriction 准入控制器(ACK 等托管集群默认开启),防止攻击者伪造节点身份篡改自身绑定的 Pod 资源 引入运行时防护层 基线配置无法覆盖所有未知漏洞,需叠加主动防御: 部署 eBPF 或 LSM(如 SELinux/AppArmor)策略,拦截异常系统调用(如
mount
、
chroot
、
init_module
) 使用安全容器运行时(如 gVisor 或 Kata Containers ),通过独立内核或用户态内核实现强隔离 对关键目录(
/etc/crontab
、
/root/.ssh/authorized_keys
、
/usr/bin/
)部署文件完整性监控(FIM),而非仅依赖静态扫描

相关文章