容器镜像的 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
问题的一个典型例子,它允许攻击者拉取诱饵和开关。由于最终将使用的镜像清单与经过验证的镜像清单不同,这使攻击者能够欺骗客户。
该漏洞在1.8.3版本引入,在1.8.5版本修复;Kyverno 用户应尽快更新。该补丁确保使用与验证签名相同的镜像哈希来更改工作负载规范。
此特定漏洞仅影响带有 Kyverno 的 Kubernetes,但其他镜像签名验证工具需要注意不要受到相同方法的攻击。
社会工程恶意容器攻击
为了进行真实世界的攻击,威胁行为者可以使用现有注册表中的受损帐户来托管恶意镜像,或者他们可以建立自己的私有容器注册表,然后着手说服管理员信任它。
从实际的角度来看:为有经验的攻击者创建恶意注册表并不是一个挑战。攻击者可以使用任何开源注册表软件,进行一些小的修改以使攻击起作用,并在自定义域下的云中运行它。
下一步是说服管理员信任恶意容器,这也不难。来自第三方的容器镜像通常用于启动现成的应用程序,这与应用程序开发人员从npm 等开放存储库中获取预构建代码块的方式非常相似——其理念是不必为常用功能和实用程序重新发明轮子。
只有一小部分 Kubernetes 用户对他们可以从何处提取容器工作负载有限制,因此云管理员在使用第三方注册表时不太可能立即保持警惕:特别是如果他们在地方。
攻击者可以进行网络钓鱼并在多个论坛上发布通知,告知有新版本的软件 XYZ,这里有运行它的 Kubernetes YAML 或 Helm。由于有些人觉得受到镜像签名验证的保护,他们会放松警惕,不会害怕运行镜像。
容器安全:日益受到关注
容器是网络犯罪分子的一个很好的目标,因为它们大多在云中运行,可以访问大量宝贵且昂贵的计算资源:因此,这使攻击者能够窃取计算资源和数据,同时也不会引起注意相对较长的时间。
我们没有确切的统计数据,但很明显,随着容器的广泛采用,这正在成为一个更普遍的问题。
安全团队正在学习如何处理它们,以及一般的 Kubernetes。这不是一个真正的‘盲点’,但容器安全团队仍在学习整个环境,其中有许多被忽视的领域。
由于镜像签名验证的采用仍处于早期阶段,准入控制器代表了那些可能被忽视的领域之一。但它们也是关于供应链软件安全的更广泛对话的一部分,应该引起人们的关注。
SolarWinds 攻击向世界表明,在信任外部代码的安全性方面,这个问题是多么敏感。
Kyverno 是首批实施签名验证的安全工具之一,新功能可能会带来新的错误。
希望这一发现能使它成为一种更安全的机制,并将帮助业界克服 Kubernetes 中验证软件的问题。
攻击者的目标可能是将未签名的镜像注入到只应运行签名镜像的集群中。
https://www.armosec.io/blog/cve-2022-47633-kyvernos-container-image-signature-verification/