随着Docker、Kubernetes技术的成熟,容器也成为时下最火的开发理念之一。它是云原生概念的重要组成部分,正迅速成为云原生生态系统中部署计算和工作负载的不二选择。云原生计算基金会(CNCF)最新的云原生调查显示,96%的组织在积极使用或评估容器和Kubernetes。众所周知,容器作为应用的包装形式,能够以更轻量化、更小开销的方式运行,具有可移植性、一致性和效率高等优势特点,但其并非没有安全问题。
确保容器安全是一项复杂的活动,就像网络安全一样,需要结合人员、流程和技术,其中人员安全是最关键的。对于那些希望转向使用容器的组织来说,应提升现有员工的技能,并引入拥有必要技能的其他人才,确保云原生运营模式的安全性。以下列举了管理容器漏洞风险的最佳实践和相关工具,如果企业采用这些工具、实施最佳实践,同时遵循行业最佳指导,就有可能在容器安全使用方面更接近理想状态。
将容器安全与云安全密切关联
首先有必要了解容器在云环境中的作用和关系。云原生生态系统通常包括事关云安全的云、集群、容器和代码。每一层建立在下一层之上,任何一层不安全都会影响其下面的层,比如部署在不安全容器上的应用程序,会受到容器的影响。云端、Kubernetes集群或应用程序本身的漏洞都可能带来各自的问题。鉴于容器存在的状态(比如作为镜像或运行中的容器),以及可能放置在容器中的层和代码比较多,确保容器安全绝非易事。CNCF的白皮书《云原生安全》可以帮助读者更好地了解云原生应用程序、容器及其生命周期。
加强容器可移植性防护
虽然容器最显著的优势特点之一是可移植性,但这也是缺点。如果漏洞混入容器后分发,无异于将漏洞分发给使用该镜像的所有人,还可能将其运行的任何环境置于险境,因为它们通常在多租户架构中运行。这意味着,广泛可用和共享的容器镜像与其他问题(比如开源代码、IaC)一样令人担忧,所有这些都可能带来漏洞。此外,容器常常由外部开发人员而不是传统的IT团队构建,然后再分发给企业。在此背景下,实施最佳的安全编程和容器安全实践是一个好的开端。
及时扫描容器是否存在漏洞
作为安全左移潮流的一部分,应在管道部署活动期间扫描容器。目前,一些基本的做法是扫描持续集成/持续部署(CI/CD)管道中的容器,以防止漏洞进入到运行时生产环境。发现管道中容器存在的漏洞,可防止漏洞被引入到生产环境并被不法分子利用。相比修复生产环境中的漏洞,这么做效率更高、风险更小、成本更低。市面上既有Anchore和Trivvy之类的开源工具,也有Snyk等主流安全厂商提供的商业工具。
不过,扫描管道中的容器镜像并非灵丹妙药。因为容器镜像常常存储在存储库中,而且一旦部署到生产环境就处于运行状态,所以扫描这两种环境下的镜像才是关键。新漏洞经常出现,因此如果仅仅从存储库提取之前扫描过的镜像、不重新扫描就部署,可能会忽视自上次扫描以来已发布的新漏洞。生产环境中存在的漏洞同样如此,如果企业的访问控制机制很糟糕,对处于运行状态的容器进行了更改,就很容易出现漏洞,因此需要识别运行中容器存在的漏洞,并通知相应员工做出适当的响应,以便调查、干预。
使用容器镜像签名
保护容器工作负载的另一个关键活动是镜像签名。大家都熟悉美国中情局(CIA)的网络安全三要素:机密性、完整性和可用性。容器镜像签名主要是确保容器镜像的完整性。它可以确保所使用的容器镜像没有被篡改,值得信任。这可以在注册库中完成,也可以作为DevOps工作流程的一部分来完成。
在容器镜像签名方面,有几种工具可选。最值得注意的工具之一是Cosign,它支持镜像签名、验证和存储,还支持各种选项,比如硬件、密钥管理服务(KMS)、自带的公钥基础设施(PKI)等。如今,市面上也出现了无密钥签名选项,受到Chainguard等创新团队的追捧。无密钥签名实际上支持使用短期密钥的功能,这种密钥只在签名活动期间有效,与身份相关联。
为容器镜像开列软件组件清单
容器同样存在软件供应链安全问题,许多组织纷纷为容器镜像开列软件材料清单(Software Bills Of Materials,简称“SBOM”)。Anchore的Syft工具就是个典例。Syft让组织可以为容器镜像开列SBOM,作为CI/CD工作流程的一部分,帮助组织深入了解在容器生态系统中运行的软件,并随时做好准备以应对可能发生的安全事件。
过去很难获得这样的高可见性,但现在情况有所不同,许多组织更关注软件供应链安全,并遵循美国白宫和相关政府机构的指导,比如《网络安全行政令》。同时,关注安全开发实践的呼声越来越高,NIST等组织发布了更新版的《安全软件开发框架》(SSDF),该框架要求组织在存档和保护软件版本等活动中使用SBOM。在此背景下,软件供应链中组件具有了高可见性。
除了为容器镜像开列SBOM外,企业还要做好证明,NIST在《软件供应链安全指南》中就有相应的规定。NIST要求做好向SSDF证明的工作,这要求使用SBOM。还有进一步执行SBOM的创新方案(比如Syft),使用in-toto规范支持SBOM证明。这种证明方法让签名者可以证明SBOM准确地表示容器镜像的内容。