云原生安全 DevSecOps 思考
近年来,云原生技术应用日益广泛,而容器编排平台 Kubernetes(k8s)的出现,使得我们的服务具备了前所未有的灵活性和扩展性。然而,这同时也带来了诸多云原生安全问题。近期曝出的 Runc CVE-2024-21626 缺陷,造成了容器逃逸的问题,引发了很大的关注。这个问题出现的原因,是在 runc 1.1.11 及之前的版本中,因文件描述符泄露,容器进程在宿主文件系统中拥有了工作目录权限,从而容易被攻击者利用,实现容器逃逸。得益于这个问题,我们重新认识到了不论是身份和权限控制、网络攻击等方面的问题,都对我们的服务和数据安全构成了威胁。本文的目的是深入探讨云原生环境下的安全脆弱性,并介绍配套的工具和方法,帮助企业在步入云原生大门时关好每扇安全窗。
云原生技术架构的安全挑战
云原生技术架构下,一些常见的容器应用、K8s 编排和其他构建模块的复杂性可能给系统安全带来挑战:
宿主机:宿主机是容器运行的基础,如果宿主机的安全性不能得到保障,那么运行在其上的所有容器都可能面临风险。宿主机操作系统存在漏洞、不安全的配置、未授权的访问、弱口令等情况,这些将直接影响到容器安全,内核是容器与宿主机交互的桥梁,任何内核级别的漏洞也可能被利用进行攻击。
容器管理工具:容器管理软件如 Kubernetes、Docker 等,如果管理软件存在漏洞或配置不当,可能会被攻击者利用。K8s 作为编排引擎,存在的潜在风险包括 API Server 等组件未授权访问,错误配置的 RBAC 权限,服务账号的滥用和错误挂载等,均可能导致攻击者获得对集群的控制。
容器应用:应用层面的安全问题主要涉及到应用本身的安全性。如果应用存在漏洞或者被恶意修改,可能会被攻击者利用。微服务架构提供了高度的模块化和分布式系统的优势,但同时也带来的多种安全风险。微服务通过引入第三方框架或是开源组件来实现功能,这些框架和组件可能包含安全漏洞,比如远程命令执行漏洞,反序列化漏洞等。
运行时:容器运行时的安全问题主要涉及到容器的隔离性。如果容器的隔离性不强,可能会被攻击者利用。可能的安全风险包括:容器逃逸、资源滥用等。攻击者利用容器逃逸漏洞进行攻击,从而影响其他容器和宿主机。
镜像以及镜像仓库:容器镜像是构建容器的基础,容器镜像可能包含已知的漏洞和敏感信息。使用不受信任的镜像源、镜像仓库账号密码泄露、镜像仓库软件漏洞等,都是存在的安全风险。
服务间自由通信:k8s 默认是内部服务之间自由通信(东西向通信),通常我们服务间会交互频繁,如果对这些流量未进行充分的管控,可能成为攻击者的横向穿越渠道。
安全方法论与最佳实践
为应对上描述的挑战,业界已经提出了一系列方法和最佳实践。比如,Gartner 的分析师 David Cearley 首次提出的 DevSecOps 模型。相比于传统软件开发流程中的安全防护,DevSecOps 将安全防护理念融入到了整个软件开发生命周期中,同时保证了企业应用快速开发的前提下,达到全面自动化的安全部署,以达到软件和供应链的安全。
事实上,据 Gartner 预估,到 2025 年,60%的企业将采取并实质性实践 DevSecOps。此外,2023 年的云栖大会指出,多数企业目前的云原生安全发展程度还远远滞后于应用的云原生化程度。主要的改进方向包括:
身份和访问管理:线上授予的权限与实际需要的权限之间存在巨大差异,无疑会给攻击者可乘之机。
漏洞和配置管理:大多数的企业生产镜像都没有经过安全加固和最小化的裁剪收敛,另外很多线上应用因为开发调式的一时方便而在容器层配置了过高的特权。
监控和响应:缺少针对容器资产的运行时监控和防护手段,针对突发的攻击事件也无法有效完成定位和溯源。
而对于以上提出的改进方向,我们已经有了行之有效的解决方案:
工具扫描安全:使用如 kube-bench 和 Trivy 等工具,对集群配置和镜像进行定期扫描,及时发现和修补漏洞。
沙箱隔离:例如使用 gVisor 等沙箱技术进行容器隔离,防止潜在的内核攻击。
RBAC 权限限制:在集群中实施基于角色的访问控制(RBAC),保证最小权限原则,仅授权必要的操作权限。
准入控制:通过 ImagePolicyWebhook 等准入控制器检查和过滤不合规的镜像拉取和容器配置。
容器权限最小化:通过设置 SecurityContext 和 Capabilities 来限制容器内部进程的权限。
系统调用限制:使用 Seccomp 策略限制容器可以执行的系统调用,增强安全性。
敏感数据管理:使用 Secrets 妥善管理 TLS 证书、密码等敏感数据。
网络策略:设置合适的 NetworkPolicy 来定义和施行服务之间的通信规则,减少潜在的攻击面和风险。
容器行为监控:利用 Falco 工具监控容器运行时行为,并检测到可疑行为时发出警报。
建设安全平台:利用 NeuVector 平台定期漏洞扫描、检查运行时安全、网络和事件响应等功能。
审计日志:通过 Audit 日志记录所有 K8s 集群中活动,帮助我们追溯异常事件,并且确保可审计性。
灾难恢复:定期备份集群相关的数据,定期演练集群灾难恢复。
结语
云原生安全渐成为企业不可或缺的一环。采用主动防御策略,借助安全工具和技术建立起稳固的安全防线,是抵御网络攻击的基础。有效的安全方法论和云原生的安全最佳实践,可以帮助我们在云原生环境中构建一个更安全、更可靠的未来。
版权声明: 本文为 InfoQ 作者【薛猫】的原创文章。
原文链接:【http://xie.infoq.cn/article/70e8a751386dd88bd575cf73c】。
本文遵守【CC BY-NC】协议,转载请保留原文出处及本版权声明。
评论