引言
大多数安全措施都是为了防止漏洞逃跑而设计的, 在此之前,我们也分享了一些第三方安全扫描的文章(请移步到历史文章中查看),尽早识别应用程序的风险意味着您可以防止或限制它部署到您的系统中(安全左移策略)。有了这些知识或工具,容器中任何可能造成损坏的漏洞都可以安全地留在由您的安全策略围栏后面。
但是,当这些漏洞已经逃跑时,我们能做什么呢? 如何确保已经在Kubernetes pods中运行的容器和应用程序符合您当前的风险和策略?
背景(运行时安全管控)
由于大多数应用程序严重依赖于包管理器和开源存储库,因此它们很容易受到来自这些源的恶意或不安全代码的攻击。想象我们交付的软件 Application 是一张饼,我们自己开发的代码仅占其中很小一部分,见下图:
最近,当Javascript社区得知npm module中流行的事件流包被一个针对比特币钱包平台的恶意包更新时,他们非常愤怒。在被发现和报道之前的三个月里,这个包被下载了近800万次。
虽然来自社区包管理器的此类事件并不常见,但并不少见。一年前,npm发现并删除了39个恶意包。所以很多包在我们安全策略发现之前可能已经进入到了生产环境
解决方案
在介绍如何对运行时进行安全控制之前,先回顾一下常见漏洞扫描工具的原理:这里以JFrog Xray 为例:
通用二进制分析工具和策略引擎JFrog Xray,会实时扫描Artifactory制品库中的容器镜像,war包,以及Npm module 等二进制制品,执行深度递归扫描,逐层检查应用程序的所有组件,并与多个漏洞数据源(已知漏洞数据库)进行一一对比,从而判断是否存在已知漏洞或License许可证策略问题,同时为被扫描文件(Docker 镜像,Npm Module)添加相关元数据。
Xray 漏洞扫描平台分析
DevOps管理员可以根据Xray扫描平台所发现的风险级别,配置策略来限制或阻止Kubernetes部署这些Docker 镜像。但是可以发现仅仅使用Xray,只能将漏洞限制在运行时之前。
为了解决这个问题,JFrog提供了KubeXray 组件,这是一个开源软件项目,它将通用二进制安全分析工具Xray的安全性扩展到Kubernetes pods运行时。
使用Xray扫描容器映像生成的元数据,KubeXray可以对已经部署的内容(容器镜像等)进行安全策略管控
KubeXray监控所有活动Kubernetes Pod资源,以帮助您:
1. 捕捉当前在所有Kubernetes吊舱中运行的应用程序中最新报告的风险或漏洞
2. 对正在运行的应用程序强制执行当前策略,即使您已经更改了这些策略
3. 对未被Xray扫描且风险未知的正在运行的应用程序执行策略
通过这种方式,KubeXray可以帮助您将逃逸的漏洞进行安全的控制。
KubeXray 是什么?
在Kubernetes将容器镜像部署到pods之前,Xray检测风险并将策略应用于容器镜像,KubeXray检测风险并将策略应用于已经运行或即将运行的Kubernetes pod。
KubeXray监视来自Kubernetes服务器和Xray的安全事件,并为Kubernetes运行的所有pods执行当前的安全策略。KubeXray监听这些事件流:
1. 部署新服务(Pod)
2. 升级现有服务
3. 新的许可证策略,例如某个License许可证类型不允许在运行时使用
4. 一个新的安全问题
当检测到问题时,KubeXray会根据您设置的当前策略进行响应。您可以选择以下可能的操作之一:
· Scaledown为直到0。所需的服务状态更新为0,使其在仍然可以查询时处于非活动状态
· 删除漏洞容器镜像的相应Kubernetes资源
· 忽略它,让pod继续运行
KubeXray还了解不同Kubernetes资源(状态集和部署)之间的差异,并允许对每种资源应用不同的策略操作。
虽然KubeXray主要是将Xray的深度扫描安全性扩展到运行Kubernetes pods,但它也为未被Xray扫描的pods提供了一些策略控制,例如从存储库(而不是Artifactory)部署的容器映像。对于没有经过x射线扫描的pod,因此其风险是未知的,您可以指定要采取的单独策略操作。
KubeXray 工作原理
KubeXray监听Kubernetes集群中运行的每个pod,并使用Xray元数据(何时可用以及是否可用)来确定安全策略控制。
1. 对于Kubernetes上的每个pod(运行或计划运行),KubeXray检查Xray元数据中的漏洞或License许可证策略问题。如果发现任何风险,KubeXray将采取相应的控制操作。
2. 如果Kubernetes pod中的任何容器镜像(正在运行或计划运行)没有被Xray识别——因为它没有被扫描,或者因为它没有从Artifactory 下载——那么KubeXray将以未知风险来应用当前的策略集。
每当在Xray上添加或更新新策略,或报告新漏洞时,KubeXray都会检测到此更改,并检查现有pod是否存在问题。如果发现任何风险,KubeXray将立即根据当前安全策略进行安全控制。
如下图所式: 显示对漏洞pod的每个策略操作过程(忽略/删除/缩容)。
上面提到:KubeXray根据发现的风险和DevOps管理员配置的策略应用策略操作。
策略操作是在一个 values.yaml 文件中设置。您可以为以下条件配置策略操作(缩容、删除或忽略):
·未扫描——未被 Xray扫描deployments ,您还可以指定命名空间的白名单;使用这些命名空间的deployments 将不应用安全策略操作。
·安全性——由于漏洞而存在安全问题的deployments 。
·License许可证——许可证不符合策略的deployments 。
上述每种条件都为Deployments 和StatefulSets提供了单独的策略操作设置。
KubeXray安装使用
KubeXray工具是一个开源软件项目,可以在Github存储库中找到并安装它(https://github.com/jfrog/kubexray)。
要使用KubeXray,您必须具备:
·一个已获授权及正在运行Artifactory 服务
·一个已获授权及正在运行Xray服务
·一个 正在运行的Kubernetes集群
·客户端Kubectl
·Helm客户端以及Helm服务端配置(Tiler)
快速安装KubeXray:
JFrog Helm仓库中提供的一个Helm Chart,可以快速安装或升级JFrog KubeXray到正在运行的Kubernetes集群。要自定义KubeXray的配置,请参阅Github Readme文档。
安装KubeXray后,可以在values.yaml中设置前文提到的策略操作。让JFrog KubeXray监视您的Kubernetes pod,控制Kubernetes 集群运行时存在的安全漏洞或License 许可证问题。
总结
常见的第三方漏洞安全监管工具一般只在控制运行时之前进行安全控制,在运行时未能做到相应的监管控制,KubeXray可以帮助我们快速对运行时资源进行安全管控,并且其作为一个开源软件项目,我们期待着继续增强KubeXray以获得更健壮的操作和特性,并欢迎开发人员在社区提出改进意见和提交代码。
更多技术分享请关注公众号:JFrog杰蛙DevOps