当前位置: 首页 > 科技观察

基于DevOps的良好容器安全实践

时间:2023-03-14 19:35:56 科技观察

尽管云和容器兴起,但容器已成为日常。容器的安全要求也随之而来。如何确定最适合业务的容器安全保障是大家最关心的问题。在本文中,我们将全面考虑DevOps生命周期中每个阶段的容器安全和安全策略。更详细的工具介绍可以参考虫虫之前的文章《从DevOps到DevSecOps,贯穿始终的安全栈》。每个安全计划都受到可以在DevOps生命周期中实施的安全控制的约束。DevOps生命周期是无限迭代的:规划、编码、构建、测试、发布、部署、运行、监控应用中的容器,用Dockerfiles来表达,但实际上Dockerfiles并不是容器的一部分(规划和编码)。从安全的角度来看,容器安全主要涉及以下三个部分和六个阶段:构建时:构建、测试和发布容器基础设施:部署和运维运行时:只有在可以强制执行时才监控每个安全策略它是只有下载后才有效。每个部分中的各个步骤都可以实施安全控制:构建时间:CI/CD基础设施、容器注册表一个Docker镜像。现阶段,很多安全和云厂商提供了很多安全解决方案和镜像安全扫描工具。容器安全扫描很重要,是的,光是镜像扫描是不够的。本节的安全目标是最小化供应链攻击的风险。1.基础镜像的安全性首先检查镜像的基础,重点介绍需要引入的依赖:允许开发者使用的基础镜像。修复了软件依赖性,具体取决于要提取的源。需要标签来简化治理和合规性?组织您的Dockerfile。所有这些检查都是静态的,可以很容易地写在构建管道中。2.容器镜像扫描接下来就是扫描容器镜像了。不要在构建管道中扫描图像,而是在容器注册表中设置连续扫描。漏洞可能已经存在,如果在构建时检查它有点晚了。其次,构建是可加的:每个构建都会产生一个新图像。因此,通过扫描信任注册表,每个发布的标签都可以被信任,而无需在每次构建时重复检查。最后,由于图像扫描需要时间,在构建时扫描会影响构建性能。还要考虑定义补丁管理和保质期流程:补丁管理:扫描结果提供补丁,从而产生新版本的图像保质期:未打补丁/旧/不安全的图像在到期日期后从注册表中删除。现阶段可供参考的工具:开源工具有Anchore、Clair、Dagda,商业软件有Atomic、DockerCloud。Docker基础设施安全容器基础设施由负责从注册表中提取图像并将它们作为容器在生产环境中运行的所有移动部分组成。主要的容器编排器是kubernetes和Swarm。本节的目标有两个:避免因平台配置错误导致的安全风险;并尽量减少受感染容器的攻击传播。1.配置错误容器编排器非常复杂,尤其是K8S。截至目前,他们还没有兑现DevOps的承诺。每个复杂的平台都容易出现配置错误,这是我们要关注的部分。必须对基础设施进行威胁建模,以确保它不会被滥用。这个特定的线程模型应该关注每个角色,除了容器。取决于运行条件。对于K8s,这是威胁建模的一个很好的起点。您还可以使用托管平台,可以使用与(受信任的)供应商的责任共担模型,可以降低复杂性。2.ScaleOut接下来,我们将讨论当容器被销毁时会发生什么。我们希望将攻击者的横向扩展能力降到最低,重点放在两个方面:网络以及身份和访问管理。容器网络图省事省心。一切都可以先严格划分为子网,然后逐渐发展成一个完整的服务网络。在IAM层,努力使每个容器拥有一个身份以微调授权授权。这在多租户平台中尤为重要:没有精细的身份,最小特权是不可能的。如果容器基数不变,可以周期性关闭旧容器,启动新容器,避免容器长时间运行,减少攻击者横向扩展,获取持久注入点。这部分可以使用的开源工具包括Habitat.sh、firejail等。3.运行时安全最后一个方面是运行工作负载的安全性。此阶段的目标是最大限度地减少来自受感染容器的攻击。4.检测和事件响应遏制攻击影响的最佳方法是尽量缩短发生漏洞和安全团队收到警报之间的时间。检测持续违规是一个领域,许多供应商提供了大量解决方案。有很多方法,其中大部分都需要边缘节点和守护进程集来主动监控pod流量和系统调用。建议是快速开始并反复迭代:使用现有的SIEM,提取平台、应用程序和审计日志。肯定会发生某些事情,然后对其做出响应,积累经验:始终思考这个问题:“下次我如何才能更快地检测到它?”这使我们能够识别盲点,然后可以使用这些盲点来了解缺失的环节并制定更好的策略。这部分可以使用的开源工具包括Sysdigfalco、OpenSCAP、Grafeas等。结论容器安全是一个比扫描图像更广泛的问题。只有建立和使用模型来推理容器风险和解决方案,才能全面考虑到各个方面。当然,和所有的模型一样,要建立一个完整的容器安全模型,需要不断的实践和迭代的完善。