一、背景
Kubernetes(k8s)是一个基于容器技术的分布式架构领先方案,为容器化应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。近些年来,Kubernetes迅速成为了容器编排的事实上的开源标准,能够实现应用程序部署流程的标准化和重用,提高了开发人员的生产力,并加快了云原生应用程序的采用。
当然,随着Kubernetes应用的复杂度越来越高,大家也需要新的工具来支持快速可靠的容器应用集群的配置、部署与管理工作。Helm就是这样的工具,也是CNCF官方推荐的项目,它为开发人员提供了将应用程序打包为Helm Chart的能力。通过一个命令或单击几下鼠标,用户就可以基于Helm Chart为开发测试或生产环境安装Kubernetes应用程序。大多数流行的CI/CD工具集都可以通过Helm Chart获得。
在我们之前的文章《重大福利,JFrog发布面向社区的免费安全的HelmChart中央存储库ChartCenter》中,我们介绍了JFrog发布的ChartCenter(https://chartcenter.io/),这是一个面向社区以及开发人员的免费的公共 Helm Charts中央存储库。 除了提供Helm Charts的公共服务之外,ChartCenter还能够向使用者展示每个Helm Chart部署的容器镜像中存在哪些已知的安全漏洞,从而揭示这些公共Chart中隐藏的风险,并提供减轻这些风险的建议。
二、Kubernetes应用中的安全漏洞
K8s应用作为一个整体,对外提供统一的服务,而Helm Chart为容器化集群提供了一个整体的封装,包含了其所有的容器镜像、部署配置等等内容。通常,K8s应用的Helm Chart都引用了多个Docker镜像,即包括应用本身,也可以是应用运行所需的init容器和sidecar容器。而每一个镜像,其包含的镜像层或依赖镜像,都可能引入安全风险。如下图所示:
![1.png](https://static.studygolang.com/200912/a910a5b92f700a16a8af071575f55cda.png)
在美国国家漏洞数据库(NVD)中,通过公共常见漏洞和暴露(CVE)列表展示了很多容器镜像中发现的安全漏洞。随着容器和K8s的广泛引用,我们发现,容器相关的漏洞和风险不但没有下降,在NVD上注册的CVE的数量和严重性反而急剧地增加,如下图所示:
![2.png](https://static.studygolang.com/200912/70c79b85007c1be09367036e847c1991.png)
(图片来源:美国国家标准技术研究院)
如何才能知道你的Kubernetes应用及Helm Chart中包含了哪些镜像,以及这些镜像是否包含已知的安全漏洞?ChartCenter为您提供了便捷的方法。
三、ChartCenter展示CVE
JFrog的ChartCenter为社区提供了一个便利的途径,可以通过UI在众多公共存储库提供的数千个Helm Chart中进行搜索。但是,ChartCenter不仅仅是这些Chart的目录,而是由Artifactory提供支持,是一个包含了不可变版本的Helm Chart的存储库。用户的Helm CLI可以从这个免费的单一可信源中获取所需的公共Helm Chart。
![3.png](https://static.studygolang.com/200912/918d149944cc138e30cdf3b8e359b799.png)
除了提供不可变版本的Helm Chart,ChartCenter还基于JFrog Xray提供的深度递归安全扫描能力,对Helm Chart依赖的所有容器镜像进行漏洞分析,并在UI中显示了与这些镜像相关的CVE。这样,用户在使用和部署任何K8s应用之前,都可以轻松了解并评估其安全风险。
![4.jpg](https://static.studygolang.com/200912/497ac4ea714273bba8b8b33dd454e13e.jpg)
ChartCenter默认显示中、低和未知严重性的漏洞详细信息,而由维护人员控制为社区提供的高危严重性漏洞信息的详细程度。
四、减轻风险说明
虽然让用户知道其K8s应用中存在安全漏洞是件好事,但这还不是全部,大家还希望能够了解如何减轻这些风险。比如,可以通过引用另一个组件来减轻某一依赖项的安全风险;可以通过建议的配置来消除危险;也可能您的应用并没有使用到易受攻击的功能,因此发现的风险并不是一个真正的威胁。
我们相信,在ChartCenter公开您的Helm Chart,也意味着您也可以公开发表自己的看法。因此,JFrog为Helm Chart的安全减轻说明提出了新规范,并邀请大家来提供内容。
为鼓励大家的参与,在Helm Chart的维护者将至少一个高危级别CVE的减轻说明提交给ChartCenter之前,ChartCenter不会显示该Chart的高危级别的安全漏洞。
这使得Helm Chart的作者可以在Chart加上有关CVE的注释,从而使得用户知道是否以及何时需要关注这些漏洞,或者是否可以减轻相关的风险。它可以帮助维护者在分析CVE时说“是,但是。。。”,并与Chart的用户进行相应的交流。
五、如何注释Helm Charts
为了提供安全减轻说明,ChartCenter里的Helm Charts包含了一个security-mitigation.yaml文件,该文件可以包含以下任何或所有信息:
• Chart使用者的总体(摘要)减轻信息
• 每个CVE,每个受影响的组件和版本的减轻信息
• 在Wiki或网页上外部托管的减轻信息的网站URL
• 外部托管的减轻文件的URL
例如,以下的security-mitigation.yaml文件为Helm Chart rimusz/security-sample-chart提供了摘要和单独的CVE减轻信息:
schemaVersion: v1
summary: Security mitigation information for this application is tracked by the security-mitigation.yaml file that's part of this Helm chart.
mitigations:
- cves:
- CVE-2019-1010022
affectedPackageUri: helm://rimusz/security-sample-chart
affectedVersions: <= 0.1.5
description: This security mitigation information for CVE-2019-10100 applies to the specified affectedVersions of charts.
- cves:
- CVE-2019-11888
affectedPackageUri: docker://docker.io/rimusz/security-sample-app
affectedVersions: <= 0.1.1
description: This CVE is applicable for applications running on Windows. This application currently doesn't support Windows OS, hence this CVE does not impact our users.
当您向ChartCenter提供漏洞减轻注释文件时,至少要引用一个高危级别的CVE。该文件将包含在ChartCenter中,并将高危级别CVE的信息提供给Chart的使用者。
该文件由ChartCenter处理,所关联的CVE将显示相应的减轻说明,如下图:
![5.png](https://static.studygolang.com/200912/f103dcde1084933420ed3e31698f615d.png)
单击图标,可以显示全部的说明,如下图:
![6.png](https://static.studygolang.com/200912/602153a90bdd6ad56c1f43913a3cf31d.png)
六、总结
ChartCenter不但为广大的K8s用户提供了集中的不可变版本Helm Chart的存储、查询和使用能力,还能够展示Chart中依赖的容器镜像所包含的已知安全漏洞。除此之外,ChartCenter提供的风险减轻说明机制,也为Helm Charts的维护者和用户提供了很好的途径,来更好地描述和了解如何减轻Helm Charts的安全风险。
目前,该减轻说明系统还是一个提议,根据社区的反馈,仍会持续修订。有关更多技术细节,请参考我们在GitHub上的规范(https://github.com/jfrog/chartcenter/blob/master/docs/securitymitigationspec.md)。
同时,我们也邀请您尝试通过security-mitigation.yaml来维护您的公共Helm Charts,并提出宝贵意见。欢迎您通过chartcenter@jfrog.com提供反馈。
欢迎观看JFrog杰蛙每周二在线课堂,点击报名: https://www.bagevent.com/event/6643470
有疑问加站长微信联系(非本文作者)