博客

容器安全基础知识: 管道安全

  乔丹·泽博尔

  洛里·麦克维蒂

2019 年 7 月 17 日发布

如果你刚刚开始阅读本系列,你可能想从头开始: 
容器安全基础知识: 介绍

在application资本时代,CI/CD 管道是一个关键组件,它决定了其构建和交付的applications的速度和安全性。

这是一个复杂的工具系统,通过 API 集成并由脚本或插件调用,以数字方式表示您构建并最终交付容器化applications所遵循的流程。 这意味着恶意行为者可以在多个点上破坏系统。 虽然这听起来有些牵强,但请记住,当今有相当多的组织正在利用云,这必然意味着远程访问。

这意味着管道的安全有两个方面:第一,管道本身的安全。 二是管线安全。

管道安全 

1. 身份验证不是可选的
如果您使用工具和服务作为云中管道的一部分或作为托管服务,那么它们很容易受到攻击。 如果您允许远程开发人员或操作访问内部托管的工具和服务,他们就很容易受到攻击。 在您消除这种担忧之前,请不要忘记过去几年中由于向外部开放系统而发生的违规行为的数量。 当谈到管道安全时,最好的假设是,是的,它确实可以被不良行为者利用。

反过来,这意味着首要任务是确保访问安全。 强身份验证不是可选的。 强烈建议使用访问控制来微调对关键系统的访问。 即使您认为系统仅可内部访问。 您的网络上还有其他系统,不良行为者可以通过这些系统进行访问。

解决了身份验证之后,接下来就是授权。 授权指定经过身份验证的用户可以在系统内执行的操作。 根据角色区分权限非常重要,因为访问关键组件的凭证越少,您的情况就越好。

管道中的每个组件都应该需要身份验证和授权。 这意味着从存储库到用于构建applications和容器的工具的一切。

2. 固定管道组件
令人悲伤的是,经常有报道称攻击者通过扫描公共存储库发现了大量宝藏(凭证和其他秘密)。 请参阅第一条,以提醒需要对存储库进行身份验证。

当今管道的实际情况是,它们是一系列集成的工具,每个工具都需要身份验证。 因此,凭证和秘密(密钥)通常会存储在调用组成管道的工具和服务的脚本中。 这是一件非常糟糕的事情™,特别是当与可能存储这些脚本的存储库的不良身份验证实践相结合时。

凭证是需要保护的重要资产。 了解它们位于何处、存储在哪里以及如何保护它们。 HashiCorp Vault是一个用于管理“秘密蔓延”的有用工具。 Vault 将秘密安全地存储在中心位置。

管道安全

3. 维护物料清单
在保护一个系统(或系统的一个组件)之前,您必须知道它存在。 维护一份全面的物料清单非常重要,以确保您了解您的环境中有什么。 更重要的是,您需要确保您知道您的环境中应该有什么,反之,不应该有什么。

维护良好的库存有助于防止将受污染或受损的组件插入管道的企图。 对单个基本容器或至少是少数几个可管理的容器进行标准化可以显著提高您检测潜在问题的能力。 那么,偏差应该引发可以进行调查的警报。 例如,比较哈希值并(如果可用)验证容器映像的数字签名是重要的一步。 如果您从远程存储库中提取数据,则有可能它已被破坏。

DockerHub 遭遇入侵并暴露 190,000 名用户的凭证和令牌时,就出现了这种情况。 利用这些信息,攻击者可以破坏图像,从而随后获得访问其他系统的权限。

不要停留在容器图像上。 请记住,外部来源的application组件很容易受到损害。 一个具体的例子是将加密挖掘软件插入 NodeJS NPM 包事件流。

对所维护的图像和组件库存进行标准化还可以简化漏洞修复过程(当漏洞出现时,而不是如果出现)。 更新单个基础操作系统层比尝试更新一组不同的容器要容易得多。

4. 扫描并修复
容器环境可能以多种方式受到损害或变得容易受到攻击。 我们最常考虑的是容器映像中的软件漏洞。 虽然您应该关注它们 - 扫描和更新/修补 - 但也有较少经常发现和解决的基于配置的问题。 其中许多问题都可以通过正确的配置来避免。 您的管道应该包括能够检测不安全配置的危害或发出警报的工具。

Aqua Security 提供可帮助扫描和评估容器和配置的工具。 Kube-bench 和 kube-hunter 是识别 Kubernetes 环境中常见(但关键)配置错误的绝佳资源。
 

如果您不采取行动,世界上所有的扫描都无法帮助您防止泄露或违规。 Tripwire 的《2019 年容器安全状况》报告发现,近五分之一 (17%) 的组织意识到了容器镜像中的漏洞 - 但仍然部署了它们。 鉴于此,调查发现超过一半(60%)的组织在过去十二个月中经历过与容器相关的安全事件,这可能并不奇怪。

这一点无论怎么强调都不为过:如果你将安全扫描集成到你的管道中(你应该这样做),那么跟进调查结果就很重要。 如果不采取补救措施,运行扫描对于提高安全性毫无作用。

我们再说一遍:如果您不采取补救措施,运行扫描对于提高安全性毫无作用。

管道安全是一个多方面且具有挑战性的问题。 管道应该像任何其他applications集一样对待,因为从根本上讲,它就是管道,尽管它是一个操作性应用程序。 在将安全性集成管道时,不要忽视管道安全性。

阅读本系列的下一篇博客: 
容器安全基础知识: 编排