互联网技术 / 互联网资讯 · 2023年11月15日 0

容器安全最佳实践

随着云计算和容器技术的普及,容器已成为日常开发的重要工具。然而,随之而来的容器安全问题也引起了广泛关注。如何为业务选择合适的容器安全保障措施是大家十分关注的焦点。本文将通过DevOps生命周期全方位探讨容器安全及各阶段的安全策略,详细工具介绍可参考之前的文章《从DevOps到DevSecOps,贯穿始终的安全栈》。

基于DevOps的容器安全优秀实践

DevOps生命周期

每个安全计划都受到可实施安全控制措施的限制,DevOps生命周期包括以下无限迭代的环节:计划、编码、构建、测试、发布、部署、运维和监控。

基于DevOps的容器安全优秀实践

在应用程序中,容器通过Dockerfile进行定义,但实际上Dockerfile并不属于容器的组成部分(计划和编码阶段)。从安全角度来看,容器安全主要涉及以下三个部分和六个阶段:

构建时:构建、测试和发布;容器基础设施:部署和运维;运行时:监控。

每个安全策略的有效性依赖于其可实施性。在每个部分的各个步骤中,可以实施安全控制措施:

构建时:CI/CD基础设施、容器注册表;容器基础设施:容器编排工具;运行时:生产环境。

构建时安全

在构建容器时,会输入源文件和Dockerfile,输出为Docker镜像。在这一阶段,许多云服务提供商提供安全方案和镜像安全扫描工具。容器安全扫描至关重要,然而仅依赖镜像扫描远远不够。本阶段的安全目标是降低供应链攻击的风险。

1. 基础镜像的安全

首先,需检查镜像的基础,特别是依赖项的引入:

开发人员允许使用的基本镜像;固定软件依赖性,确保拉取的源正确;是否需要通过标签简化治理和合规性;整理Dockerfile。

这些检查均为静态检查,可以在构建管道中轻松实现。

2. 容器镜像扫描

接下来,进行容器镜像的扫描。

应在容器注册表中设置持续扫描,而不是在构建管道中进行扫描。漏洞可能早已存在,如果等到构建时再检查会显得迟缓。此外,构建是叠加的:每次构建都会生成新的镜像。因此,通过扫描信任的注册表,可以信任每个发布的标签,从而避免在每次构建时重复检查。最后,镜像扫描需要时间,若在构建时扫描可能影响构建性能。

也可以考虑定义补丁管理和保质期流程:

补丁管理:扫描结果提供补丁,生成新版本镜像;保质期:删除超过期限未修补、旧或不安全的镜像。可参考的工具包括开源工具AnchoRe、ClAIR、Dagda,以及商业软件AtoMic和Docker Cloud。

基于DevOps的容器安全优秀实践

Docker基础设施安全

容器基础设施由多个组件构成,负责从注册表中提取镜像并在生产环境中运行。

主要容器编排工具有Kubernetes和Swarm。

本部分的目标有两个:避免因平台配置错误造成的安全隐患;最小化来自受感染容器的攻击扩展。

1. 配置错误

容器编排工具复杂,尤其是K8S,当前尚未完全实现DevOps的承诺。复杂平台易于出现配置错误,这是我们需要关注的重点。

必须对基础设施进行威胁建模,以确保其不被滥用。该特定威胁模型应专注于每个角色,排除容器的影响。对于K8S,进行威胁建模的一个良好起点。

可考虑使用托管平台,借助(可信)供应商的共享责任模型,降低复杂性。

2. 横向扩展

接下来,讨论容器被攻击时的情况。我们希望最大限度地减少攻击者横向扩展的能力,重点关注网络和身份与访问管理(IAM)。

容器网络设置应谨慎,初期可将所有内容严格划分为子网,逐步构建完整的服务网络。

在IAM层面,应确保每个容器具有唯一身份,从而精细化授权。这在多租户平台中尤为重要:缺乏细致身份无法确保最低特权。

通过定期关闭旧容器,启动新容器,避免长期运行的容器,从而降低攻击者横向扩展并获取持久性注入点的机会。

本部分可使用的开源工具包括HabITat.sh、fiRejAIl等。

基于DevOps的容器安全优秀实践

运行时安全

最后一个方面是正在运行的工作负载的安全性。本阶段的目标是尽量减少来自受损容器的攻击。

检测与事件响应

控制攻击影响的最佳方法是尽量缩短漏洞曝光到安全团队收到警报的时间。

检测持续违规行为是一个拥有众多解决方案的领域,通常需要边缘节点和守护程序主动监控Pod的流量和系统调用。

建议尽快开始并反复迭代:使用现有的SIEM、提取平台、应用程序和审计日志。

事件发生后,需进行响应处理并积累经验:

时常思考“下次如何更快地检测到此类情况?”这将帮助识别盲点,了解缺失环节并建立更完善的策略。

本部分可用的开源工具包括Sysdig Falco、OpenSCAP、Grafeas等。

基于DevOps的容器安全优秀实践

结论

容器安全是一个广泛的议题,远不止于镜像扫描。通过建立用于推理容器风险和解决方案的模型,才能全面考虑所有方面。当然,所有模型都需要不断实践与迭代,以建立完善的容器安全框架。