免责声明
本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。
只供对已授权的目标使用测试,对未授权目标的测试作者不承担责任,均由使用本人自行承担。
文章正文
在2022年,Kubernetes继续巩固自己作为现代软件堆栈中的一个关键基础设施组件的地位。从小型到大型组织,它已经成为一个广泛流行的选择。由于明显的原因,这种转变使Kubernetes更容易受到攻击。
但这并不是终点,请记住,开发人员通常使用Kubernetes部署与其他云原生组件来组成一个工作系统。不幸的是,这种形式产生了一个具有更多组件的更复杂的基础设施,这最终增加了易受攻击的表面和范围。
根据红帽公司的 "2022年Kubernetes安全状况报告",去年93%的受访者报告了至少有一次影响Kubernetes环境的事件。在报告的所有安全事件中,53%是由于配置错误,38%是由于利用漏洞。这一趋势表明,漏洞的增加主要是因为攻击面的增加和漏洞管理的复杂性。可以理解的是,这是对整个行业的担忧。
在这篇文章中,我们将讨论2022年的Kubernetes漏洞,以及我们可以从这些漏洞中学习什么。为了确保我们都在同一起跑线上,让我们定义一下漏洞。为此,让我们研究一下NIST SP 800-53的标准定义:"系统安全程序、设计、实施或内部控制中的缺陷或弱点,可能被运用(意外触发或故意利用)并导致安全漏洞或违反系统(的)安全政策。"
有各种可信的数据源负责识别、收集和发布公共领域的漏洞。主要有NVD(国家漏洞数据库)CVE数据库、GitHub、Exploit-DB、供应商通知和官方项目公告。
以下是寻找Kubernetes漏洞的来源列表:
• CVE MITRE database[1]
• Kubernetes official CVE feed[2]
• Kubernetes security announcements Google Group[3]
• CVE Details[4]
• Github Security Advisories[5]
当合法用户或客户端由于恶意威胁者的行为而无法访问服务或系统时,就会出现这种漏洞。例如,假设有人用许多请求同时查询你的Kubernetes API服务器[6];然后API服务器可能对其他合法请求没有反应。
某些系统弱点允许攻击者在安全周界内获得未经授权的访问。在Kubernetes中,容器逃逸是一个常见的弱点,一旦被利用,黑客就能以高的权限进入主机。
这是一个更广泛的术语,指的是包括认证绕过、执行代码绕过、权限绕过等类型的漏洞。
通常情况下,缓冲区溢出会由于代码中的错误而发生,如对越界内存缓冲区的处理不当。它允许恶意行为者访问其他共同托管进程的内存并泄漏不必要的信息
在这里,攻击者利用代码中的缺陷,利用它来执行任意的恶性代码,通常是为了获得高等级的访问权限、网络访问权限或对主机系统的控制。
利用这个漏洞,黑客可以利用代码中的一个弱点,穿越主机系统或网络上的任意文件和目录。
CrowdStrike 的云威胁研究团队在 CRI-O (一个支撑 Kubernetes 的容器运行时引擎) 中发现了这个漏洞,CVE评分为9.0(关键),被称为 “cr8escape”。它让有权限的恶意行为者在Kubernetes集群中创建一个pod,通过滥用kernel.core_pattern参数在主机上设置任意的内核参数。这个漏洞允许黑客从Kubernetes容器中逃脱,并获得对主机的root权限,可能使他们能够部署恶意软件,渗出数据,并实现集群中的横向移动。
预防:
• 使用策略来阻止对内核资源的不安全访问,例如Pod安全准入控制器,它已经从Kubernetes 1.25开始取代了Pod安全策略。你也可以使用第三方准入控制器,比如Kyverno的这个。
• 定期扫描和审计集群,并在补丁发布后立即修补漏洞。
分析与复现参考:
https://cloud.tencent.com/developer/article/1981066
这又是CRI-O容器运行时的一个漏洞,导致节点上的内存或磁盘空间耗尽,从而影响到系统的可用性。它的CVE评分为7.5(高)。凡是能够访问Kubernetes API的人都可以调用execSync,它可以同步地运行一个命令或从容器中获取日志。如果命令的输出非常大,它可能会填满内存或磁盘,导致节点或其他共同托管的服务不可用。
CVE-2022-31030也与CVE-2022-1708相似,但CVE-2022-31030是由于containerd容器运行时而不是CRI-O。
预防:
• 使用最小权限原则来降低攻击风险。如果你不给在pod上运行 "exec "命令的权限,或者给与Kubernetes API服务器交互的应用程序使用的服务账户以最小的权限,黑客就无法利用这个漏洞。
• 一旦有补丁发布,就立即实施。
更多阅读:
https://nvd.nist.gov/vuln/detail/CVE-2022-1708
这个最高分是10.0的严重漏洞给ArgoCD的用户造成了恐慌,ArgoCD是一个流行的GitOps持续交付工具,用于在Kubernetes集群上部署应用程序。该漏洞允许未经认证的用户获得匿名访问,使他们能够通过发送专门制作的JSON Web Token(JWT)来冒充包括管理员在内的任何其他用户。
攻击者不需要ArgoCD中的任何账户,所以利用起来很容易。默认情况下,ArgoCD服务账户获得集群管理员角色,从而使攻击者可以完全访问Kubernetes集群。
预防:
• 禁用对ArgoCD的匿名访问
• 遵循应用服务账户的最小权限原则
• 将关键组件的端点放在安全的外围,只有受信任的人才能访问
更多阅读:
https://github.com/argoproj/argo-cd/security/advisories/GHSA-r642-gv9p-2wjj
今年年初发现的ArgoCD项目的另一个严重漏洞,这个漏洞如果被利用,可以泄露敏感信息,如应用程序凭证、API密钥和其他应用程序的秘密。这个0day漏洞让恶意行为者绕过目录遍历检查,获得存储在ArgoCD的其他机密信息。
预防:
• 拥有一个持续扫描的解决方案,如Kubescape,以检测漏洞。
• 一旦有补丁发布,立即实施。
更多阅读:
https://www.seebug.org/vuldb/ssvid-99454
在containerd 1.6.1、1.5.10和1.14.12版本中发现这一漏洞,允许攻击者读取任意主机文件。因此,攻击者可以读取机密文件,如kubelet私钥,并可以访问Kubernetes API服务器/etcd数据库以窃取信息。
预防:
• 使用Kubescape等持续扫描解决方案来检测漏洞。
• 补丁发布后立即实施。
更多阅读:
https://www.armosec.io/blog/cve-2022-23648-containerd-cri-plugin-kubernetes/
Linux中的文件上下文API存在基于堆的缓冲区溢出缺陷,可能导致越界写入。具有本地访问权限的恶意行为者可以造成拒绝服务攻击或在主机上运行任意代码。要检测Kubernetes中的这个漏洞暴露,你需要找到具有CAP_SYS_ADMIN功能的pod。
预防:
• 限制Kubernetes部署中的容器功能。
• 部署一个成熟的检测工具,可以快速发现你的暴露,并提醒你减轻风险。
更多阅读:
https://www.armosec.io/blog/cve-2022-0185-kubernetes-users/
Grafana实验室针对其开源产品中的一个新的严重漏洞发布了一份安全公告。该漏洞被标记为CVE-2022-39328,使攻击者可以绕过任意服务端点的授权。这是一个绕过认证的严重漏洞。大约 50% 的 Kubernetes 用户在生产中使用 Grafana ,这一事实使这个CVE特别值得注意。
预防:
• Grafana发布了一个修复程序:9.2.4版本。
• Kubescape在ARMOBest框架中开发了一个专用控件 - C-0090。它可以验证你的系统是否有可能被这个CVE利用的Grafana漏洞版本。
更多阅读:
https://grafana.com/blog/2022/11/08/security-release-new-versions-of-grafana-with-critical-and-moderate-fixes-for-cve-2022-39328-cve-2022-39307-and-cve-2022-39306/
ARMO的安全研究人员在Kyverno接纳控制器容器图像签名验证机制中发现了一个严重性的漏洞。该漏洞使运行恶意容器镜像注册表或能够作为注册表和Kyverno之间的代理的攻击者能够将未签名的镜像注入受保护的集群,绕过镜像验证策略。该漏洞在1.8.3版本中被引入,在1.8.5版本中被修复。我们建议所有Kyverno用户尽快更新。
预防:
• 实施一个只允许受信任的注册表的策略,这将防止恶意注册表被使用。
• 使用Kubescape扫描容器镜像注册表,以确保你没有拉出恶意的镜像。
• Kubescape已经在ARMOBest框架中开发了一个专门的控件--C-0091--验证你的集群中是否存在这个CVE。请从GitHub安装或更新到最新的Kubescape版本,或通过以下命令。
更多阅读:
https://www.armosec.io/blog/cve-2022-47633-kyvernos-container-image-signature-verification/
以下是所讨论的漏洞中的一些主要启示。
容器逃逸是Kubernetes中最常被利用的漏洞之一。在你的Kubernetes部署中实施安全配置文件,如AppArmor和SELinux,以及pod安全标准,可以减少暴露的攻击面。你也可以研究一下我们在今年早些时候分享的关于如何确保Kubernetes部署的一些指导。
https://www.armosec.io/blog/secure-kubernetes-deployment/
在给你的服务账户和用户分配角色和权限时,要遵循最小权限的原则。这减少了攻击者在集群上获得过多权限的机会,即使他们已经渗透到集群中。利用Kubescape[7]门户中的RBAC可视化工具来检测具有不必要权限的角色和角色。
使用深度防御技术[8],使恶意行为者实现横向移动和渗出数据更加艰难。
建议对你的K8s清单文件、代码库和集群进行频繁和持续的扫描,以发现漏洞。
建立一个流程,定期更新你的Kubernetes集群上的软件包。漏洞披露后,黑客试图利用那些几乎没有打补丁的目标。Log4J漏洞就是这样一个例子,它在最初的72小时内被利用了840,000次。
使用容器沙箱项目,如gVisor,可以加强容器边界,并通过在多租户系统中提供强大的隔离来防止容器逃逸和权限升级。
完全避免一个漏洞并不总是可能的。这是由于软件漏洞和代码中未被发现的弱点已经通过了测试和审查过程。
但是,我们可以做的是遵循最佳实践来保护平台和部署在平台上的软件,以减少影响。我们还可以通过设置强大的持续部署流程来修补漏洞,从而更主动地应用修复措施。
Kubescape对你的集群进行扫描,在攻击者利用这些漏洞之前检测出安全问题。
[1]
CVE MITRE database: https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=kubernetes[2]
Kubernetes official CVE feed: https://kubernetes.io/docs/reference/issues-security/official-cve-feed/[3]
Kubernetes security announcements Google Group: https://groups.google.com/g/kubernetes-security-announce[4]
CVE Details: https://www.cvedetails.com/vulnerability-list/vendor_id-15867/product_id-34016/Kubernetes-Kubernetes.html[5]
Github Security Advisories: https://github.com/advisories?query=kubernetes[6]
Kubernetes API服务器: https://www.armosec.io/glossary/kubernetes-api/[7]
Kubescape: https://cloud.armosec.io/account/sign-up[8]
深度防御技术: https://kubernetes.io/docs/concepts/security/overview/
译文仅供参考,具体内容表达以及含义,以原文为主,推荐尽量阅读原文(点击 阅读原文 跳转)
技术交流
知识星球
致力于红蓝对抗,实战攻防,星球不定时更新内外网攻防渗透技巧,以及最新学习研究成果等。常态化更新最新安全动态。专题更新奇技淫巧小Tips及实战案例。
涉及方向包括Web渗透、免杀绕过、内网攻防、代码审计、应急响应、云安全。星球中已发布 200+ 安全资源,针对网络安全成员的普遍水平,并为星友提供了教程、工具、POC&EXP以及各种学习笔记等等。
交流群
关注公众号回复“加群”,添加Z2OBot 小K自动拉你加入Z2O安全攻防交流群分享更多好东西。
关注我们
关注福利:
回复“app" 获取 app渗透和app抓包教程
回复“渗透字典" 获取 针对一些字典重新划分处理,收集了几个密码管理字典生成器用来扩展更多字典的仓库。
回复“书籍" 获取 网络安全相关经典书籍电子版pdf
回复“资料" 获取 网络安全、渗透测试相关资料文档
往期文章