容器验证漏洞允许恶意镜像云化 Kubernetes

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 容器验证漏洞允许恶意镜像云化 Kubernetes

640.png


容器镜像的 Kyverno 准入控制器中存在一个高危安全漏洞,可能允许恶意行为者将大量恶意代码导入云生产环境。

Kyverno 准入控制器提供签名验证机制,旨在确保只有经过签名、验证的容器镜像才会被拉入给定的 Kubernetes 集群。


这可以避免任何数量的不良结果,因为被诱骗的容器镜像可能包含各种有效负载,如加密矿工、rootkit、用于容器逃逸和横向移动的漏洞利用工具包、凭证窃取程序等。

但是,可以利用漏洞 ( CVE-2022-47633 ) 来破坏该机制。

ARMO 的研究人员在博客文章中解释说:该漏洞使攻击者能够……将未签名的镜像注入受保护的集群,从而绕过镜像验证策略。”


风险很高:他们警告说,攻击者可以有效地控制受害者的 pod 并使用其所有资产和凭据,包括服务帐户令牌来访问 API 服务器。


该漏洞可以完全绕过镜像签名验证。在 Kubernetes 集群的情况下,这为攻击提供了广泛的目标。任何工作负载都可以安装集群机密和数据卷。


这意味着攻击者可以注入代码,从受害者的 Kubernetes 集群中窃取数据和凭证。

这也使攻击者能够注入他/她自己的代码,并使用受害者的 CPU 进行加密货币挖掘等事情。

当从Kubernetes API 服务器请求通过带有标签的镜像定义的新工作负载时,API 服务器要求 Kyverno 准入控制器验证新工作负载。


为了确定工作负载是否可以进入集群,准入控制器从容器注册表请求镜像清单和签名。

如果他们签出,镜像就会亮起绿灯,容器运行时会根据该镜像启动新的工作负载。

根据该公告,该漏洞的出现是因为控制器的签名验证过程下载了两次镜像清单,但只验证了其中一次下载的签名。


因此,攻击看起来像这样:管理员通过社交工程从恶意注册表或代理中拉取容器映像。首次导入镜像时,恶意注册表会向准入控制器返回一个有效的、良性的、签名的镜像。到目前为止,一切都很好。


然而,然后准入控制器第二次请求签名镜像的清单,以获取变异摘要——即更新容器的可读标签。

这一次,没有发生签名验证,允许恶意注册表返回一个不同的、未签名的恶意镜像,最终是启动和运行的镜像。


根据 ARMO 的分析:这是

[time-of-check-to-time-of-use] TOCTOU


640.png

问题的一个典型例子,它允许攻击者拉取诱饵和开关。由于最终将使用的镜像清单与经过验证的镜像清单不同,这使攻击者能够欺骗客户。

该漏洞在1.8.3版本引入,在1.8.5版本修复;Kyverno 用户应尽快更新。该补丁确保使用与验证签名相同的镜像哈希来更改工作负载规范。

此特定漏洞仅影响带有 Kyverno 的 Kubernetes,但其他镜像签名验证工具需要注意不要受到相同方法的攻击。

社会工程恶意容器攻击


为了进行真实世界的攻击,威胁行为者可以使用现有注册表中的受损帐户来托管恶意镜像,或者他们可以建立自己的私有容器注册表,然后着手说服管理员信任它。


从实际的角度来看:为有经验的攻击者创建恶意注册表并不是一个挑战。攻击者可以使用任何开源注册表软件,进行一些小的修改以使攻击起作用,并在自定义域下的云中运行它。


下一步是说服管理员信任恶意容器,这也不难。来自第三方的容器镜像通常用于启动现成的应用程序,这与应用程序开发人员从npm 等开放存储库中获取预构建代码块的方式非常相似——其理念是不必为常用功能和实用程序重新发明轮子。


只有一小部分 Kubernetes 用户对他们可以从何处提取容器工作负载有限制,因此云管理员在使用第三方注册表时不太可能立即保持警惕:特别是如果他们在地方。


攻击者可以进行网络钓鱼并在多个论坛上发布通知,告知有新版本的软件 XYZ,这里有运行它的 Kubernetes YAML 或 Helm。由于有些人觉得受到镜像签名验证的保护,他们会放松警惕,不会害怕运行镜像。


容器安全:日益受到关注


容器是网络犯罪分子的一个很好的目标,因为它们大多在云中运行,可以访问大量宝贵且昂贵的计算资源:因此,这使攻击者能够窃取计算资源和数据,同时也不会引起注意相对较长的时间。


我们没有确切的统计数据,但很明显,随着容器的广泛采用,这正在成为一个更普遍的问题。


安全团队正在学习如何处理它们,以及一般的 Kubernetes。这不是一个真正的‘盲点’,但容器安全团队仍在学习整个环境,其中有许多被忽视的领域。


由于镜像签名验证的采用仍处于早期阶段,准入控制器代表了那些可能被忽视的领域之一。但它们也是关于供应链软件安全的更广泛对话的一部分,应该引起人们的关注。


SolarWinds 攻击向世界表明,在信任外部代码的安全性方面,这个问题是多么敏感。


Kyverno 是首批实施签名验证的安全工具之一,新功能可能会带来新的错误。


希望这一发现能使它成为一种更安全的机制,并将帮助业界克服 Kubernetes 中验证软件的问题。


640.png


640.png

攻击者的目标可能是将未签名的镜像注入到只应运行签名镜像的集群中。


640.png

https://www.armosec.io/blog/cve-2022-47633-kyvernos-container-image-signature-verification/

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
2天前
|
存储 Kubernetes C++
【专栏】Kubernetes VS Docker Swarm了解两者特点,助力选取合适容器编排工具
【4月更文挑战第27天】对比Kubernetes和Docker Swarm:K8s在可扩展性和自动化方面出色,有强大社区支持;Swarm以简易用著称,适合初学者。选择取决于项目需求、团队技能和预期收益。高度复杂项目推荐Kubernetes,快速上手小项目则选Docker Swarm。了解两者特点,助力选取合适容器编排工具。
|
1天前
|
存储 Java Serverless
ACK One Argo 工作流集群:玩转容器对象存储
ACK One Argo 工作流集群:玩转容器对象存储
ACK One Argo 工作流集群:玩转容器对象存储
|
1天前
|
存储 Kubernetes 监控
使用Kubernetes进行容器编排:技术详解与实践
【5月更文挑战第16天】Kubernetes,简称K8s,是开源容器编排系统,用于自动化部署、扩展和管理容器化应用。核心概念包括节点、Pod(最小部署单元)、服务、标签和副本集。其特点有高可用性、可扩展性、自动化和可移植性。实践使用涉及安装配置集群、编写YAML部署清单、应用部署、监控管理和扩展更新。Kubernetes帮助提升应用的可用性、可扩展性和可移植性。
|
2天前
|
分布式计算 Kubernetes 监控
容器服务Kubernetes版产品使用合集之怎么实现把 spark 跑在k8s
容器服务Kubernetes版,作为阿里云提供的核心服务之一,旨在帮助企业及开发者高效管理和运行Kubernetes集群,实现应用的容器化与微服务化。以下是关于使用这些服务的一些建议和合集,涵盖基本操作、最佳实践、以及一些高级功能的使用方法。
18 1
|
2天前
|
存储 安全 开发者
如何删除 Docker 镜像、容器和卷?
【5月更文挑战第11天】
19 2
如何删除 Docker 镜像、容器和卷?
|
2天前
|
存储 弹性计算 运维
Docker数据集与自定义镜像:构建高效容器的关键要素
Docker数据集与自定义镜像:构建高效容器的关键要素
|
2天前
|
Kubernetes Java 调度
Java容器技术:Docker与Kubernetes
Java容器技术:Docker与Kubernetes
19 0
|
2天前
|
Linux 网络安全 Docker
【Linux】-docker配置容器并打包成镜像
【Linux】-docker配置容器并打包成镜像
|
2天前
|
存储 安全 Cloud Native
容器安全-镜像扫描
容器镜像安全至关重要,镜像扫描能检查镜像中的安全漏洞,防范云原生环境风险。72%客户拥有超过100个容器,安全问题日益凸显。两种扫描方案:定期扫描镜像注册表或集成到Pipeline中。此外,蜂巢提供全生命周期镜像扫描,包括漏洞、病毒检测,实时更新补丁数据库,并给出修复建议,助力企业保障容器安全。目前已服务100+头部客户。
|
2天前
|
存储 Apache Swift
无限套娃_docker入门(镜像、容器、仓库)
无限套娃_docker入门(镜像、容器、仓库)
32 0