错误配置的Kubeflow工作负载存在安全风险

2020-06-12 06:28:06

跳到主内容Azure安全中心(ASC)监控和保护运行在AKS之上的数千个Kubernetes集群。Azure安全中心定期搜索和研究针对Kubernetes工作负载的新攻击载体。我们最近发表了一篇关于针对Kubernetes集群的大规模运动的博客文章,这场运动滥用了暴露的Kubernetes仪表板来部署加密货币矿工。

在这篇博客中,我们将揭示ASC最近观察到的一项新活动,该活动针对Kubeflow,Kubernetes的一个机器学习工具包。我们观察到,这次攻击影响了数十个Kubernetes集群。

Kubeflow是一个开源项目,最初是一个在Kubernetes上运行TensorFlow作业的项目。Kubeflow已经成长为Kubernetes中运行机器学习任务的流行框架。用于ML任务的节点通常相对强大,在某些情况下还包括GPU。这一事实使得用于ML任务的Kubernetes集群成为密码挖掘活动的完美目标,这也是这次攻击的目的。

在4月份期间,我们观察到在许多不同的群集上部署了来自公共存储库的可疑映像。映像为ddsfdfsaadfs/dfsdf:99。通过检查图像的层,我们可以看到此图像运行XMRIG挖掘器:

该存储库还包含多个图像,这些图像在挖掘配置上有所不同。我们也看到了这些映像的一些部署。

查看上图中运行的各个集群,可以发现它们中的大多数都运行Kubeflow。这一事实意味着该攻击者的访问向量是机器学习框架。

问题是Kubeflow如何被用作此类攻击的访问载体?

Kubeflow框架由许多不同的服务组成。其中一些服务包括:培训模型框架、Katib和Jupyter笔记本服务器等。

Kubeflow是一个容器化服务:各种任务在集群中作为容器运行。因此,如果攻击者以某种方式访问Kubeflow,他们就有多种方式在群集中运行其恶意映像。

该框架被划分为不同的命名空间,它们是Kubeflow服务的集合。这些名称空间被转换为在其中部署资源的Kubernetes名称空间。

在上图中,我们创建了一个默认名称为匿名的新命名空间。此命名空间在攻击中被广泛看到,并且是此次活动中访问向量的指示器之一。

Kubeflow在集群中创建多个CRD,通过API服务器公开一些功能:

此外,Kubeflow通过部署在集群中的仪表板公开其UI功能:

控制面板由Istio入口网关公开,默认情况下只能在内部访问。因此,用户应该使用端口转发来访问仪表板(通过Kubernetes API服务器对流量进行隧道传输)。

在某些情况下,用户将Istio服务的设置修改为负载均衡器,这会将服务(命名空间istio-system中的istio-ingressateway)公开给Internet。我们认为有些用户选择这样做是为了方便:如果没有此操作,访问仪表板需要通过Kubernetes API服务器进行隧道操作,而不是直接访问。通过将服务公开给Internet,用户可以直接访问仪表板。但是,此操作启用了对Kubeflow仪表板的不安全访问,这使得任何人都可以在Kubeflow中执行操作,包括在集群中部署新容器。

如果攻击者有权访问仪表板,则他们有多种方法可以在集群中部署后门容器。我们将演示两个选项:

Kubeflow使用户能够创建Jupyter笔记本服务器。Kubeflow允许用户选择笔记本服务器的映像,包括指定自定义映像的选项:

此映像不一定是合法的笔记本映像,因此攻击者可以使用此功能运行自己的映像。

攻击者可以使用的另一种方法是从真实的Jupyter笔记本部署恶意容器:攻击者可以使用新的或现有的笔记本来运行他们的Python代码。代码从笔记本服务器运行,笔记本服务器本身是一个容器,装载了一个服务帐户。此服务帐户(默认配置)有权在其命名空间中部署容器。因此,攻击者可以使用它在集群中部署他们的后门容器。以下是使用笔记本的服务帐户从笔记本部署容器的示例:

我们最近发布的Kubernetes威胁矩阵包含攻击者可以用来攻击Kubernetes集群的技术。矩阵中此活动的表示形式如下所示:

攻击者使用公开的仪表板(本例中为Kubeflow仪表板)获得对群集的初始访问权限。集群中的执行和持久性由集群中部署的容器执行。攻击者设法横向移动并使用装载的服务帐户部署容器。最后,攻击者通过运行加密货币挖掘器影响了群集。

确认群集中未部署恶意容器。以下命令可以帮助您进行检查:

如果集群中部署了Kubeflow,请确保其仪表板没有暴露到Internet中:通过以下命令检查Istio入口服务的类型,并确保它不是有公网IP的负载均衡:

Azure安全中心在过去检测到多个针对Kubernetes集群的活动,它们都有类似的访问载体:向互联网公开的服务。但是,这是我们第一次发现专门针对Kubeflow环境的攻击。

在集群内部署Kubeflow这样的服务时,务必了解安全方面,例如:

监控群集的面向公众的端点。确保敏感接口不会以不安全的方式暴露给Internet。您可以使用Azure Policy限制集群中的公共负载均衡器,该策略现在已与网守集成。

定期监控运行时环境。这包括监视正在运行的容器、它们的映像以及它们运行的进程。

仅允许部署受信任的映像,并扫描映像中的漏洞。可以使用Azure策略限制群集中允许的映像。

微软是网络安全领域的领导者,我们肩负起让世界变得更安全的责任。

了解更多信息Microsoft Security入门