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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 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/

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
11天前
|
Kubernetes 监控 开发者
掌握容器化:Docker与Kubernetes的最佳实践
【10月更文挑战第26天】本文深入探讨了Docker和Kubernetes的最佳实践,涵盖Dockerfile优化、数据卷管理、网络配置、Pod设计、服务发现与负载均衡、声明式更新等内容。同时介绍了容器化现有应用、自动化部署、监控与日志等开发技巧,以及Docker Compose和Helm等实用工具。旨在帮助开发者提高开发效率和系统稳定性,构建现代、高效、可扩展的应用。
|
3天前
|
存储 Kubernetes Docker
【赵渝强老师】Kubernetes中Pod的基础容器
Pod 是 Kubernetes 中的基本单位,代表集群上运行的一个进程。它由一个或多个容器组成,包括业务容器、基础容器、初始化容器和临时容器。基础容器负责维护 Pod 的网络空间,对用户透明。文中附有图片和视频讲解,详细介绍了 Pod 的组成结构及其在网络配置中的作用。
【赵渝强老师】Kubernetes中Pod的基础容器
|
1天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
7 2
|
3天前
|
运维 Kubernetes Shell
【赵渝强老师】K8s中Pod的临时容器
Pod 是 Kubernetes 中的基本调度单位,由一个或多个容器组成,包括业务容器、基础容器、初始化容器和临时容器。临时容器用于故障排查和性能诊断,不适用于构建应用程序。当 Pod 中的容器异常退出或容器镜像不包含调试工具时,临时容器非常有用。文中通过示例展示了如何使用 `kubectl debug` 命令创建临时容器进行调试。
|
3天前
|
Kubernetes 调度 容器
【赵渝强老师】K8s中Pod中的业务容器
Pod 是 Kubernetes 中的基本调度单元,由一个或多个容器组成。除了业务容器,Pod 还包括基础容器、初始化容器和临时容器。本文通过示例介绍如何创建包含业务容器的 Pod,并提供了一个视频讲解。示例中创建了一个名为 "busybox-container" 的业务容器,并使用 `kubectl create -f firstpod.yaml` 命令部署 Pod。
|
3天前
|
Kubernetes 容器 Perl
【赵渝强老师】K8s中Pod中的初始化容器
Kubernetes的Pod包含业务容器、基础容器、初始化容器和临时容器。初始化容器在业务容器前运行,用于执行必要的初始化任务。本文介绍了初始化容器的作用、配置方法及优势,并提供了一个示例。
|
3天前
|
Kubernetes 监控 Java
如何在Kubernetes中配置镜像和容器的定期垃圾回收
如何在Kubernetes中配置镜像和容器的定期垃圾回收
|
7天前
|
关系型数据库 MySQL API
|
7天前
|
Java 应用服务中间件 Linux
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
本文主要讲解了Docker的安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库以及Docker容器虚拟化与传统虚拟机比较。
149 6
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
|
1天前
|
监控 持续交付 Docker
Docker 容器化部署在微服务架构中的应用有哪些?
Docker 容器化部署在微服务架构中的应用有哪些?