攻击者可以利用安全陷阱对Kubernetes集群进行攻击
Sasson在周三的一篇文章中说:"通过这个漏洞,恶意攻击者可能会攻击包括Kubernetes和OpenShift在内的任何一个依赖有漏洞的容器引擎的基础设施" CRI-O和Podman都是容器引擎,类似于Docker,主要用于在云端执行操作和管理容器。CRI-O和Podman使用”containers/storage”来处理容器镜像的存储和下载。 研究人员称,当该漏洞被触发时,CRI-O就无法拉取新的镜像、启动任何新的容器(即使它们已经被拉取到本地)、检索本地镜像列表或停止容器运行。 同样,Podman也将无法拉取新的镜像,检索正在运行的pods,启动新的容器(即使它们已经被拉取到本地),检索现有的镜像或终止所有的容器。 这个漏洞影响可能非常广泛。Sasson解释说:"从Kubernetes v1.20开始,Docker就已经被废弃使用,现在唯一支持的容器引擎是CRI-O和 Containerd,这就导致了很多集群使用CRI-O。在实际的攻击场景中,攻击者可能会将一个恶意镜像拉到多个不同的节点上,使所有节点崩溃,破坏集群。而除了重新启动节点外,目前没有任何解决问题的方法。" 容器武器化当容器引擎从注册表中提取一个镜像时,它首先会下载清单,其中会含有关于如何构建映像的说明。其中一部分是组成容器文件系统的层列表,容器引擎会读取该列表,然后下载并解压每个层。 Sasson解释说:"攻击者可以向注册表中上传一个可以利用该漏洞的恶意层,然后上传一个使用众多层的镜像,包括恶意层,并借此创建一个新的恶意镜像。然后,当受害者从注册表中提取镜像时,它将会在该过程中下载恶意层,从而完成该漏洞的利用。" 一旦容器引擎开始下载恶意层,最终的结果就是发生死锁。 Sasson解释说:"在这种情况下,进程会获取到锁,并且这个锁永远都不会被释放,这将导致DoS发生,因为此时其他线程和进程都会停止执行并永远等待锁被释放。" 他列出了该漏洞被触发时发生的步骤。 例程1--从注册表下载恶意层。 例程1 - 从注册表中下载恶意层.进程1 获取锁。 例程2 - 使用xz二进制解压下载的层,并将输出写入到stdout。 例程3 - 等待xz退出并读取stdout中的所有数据。当条件满足时,它会关闭一个名为chdone的通道。 例程1 - 使用 xz 的输出作为输入,并尝试解压缩数据。由于文件不是 tar 存档文件,untar 会出现"invalid tar header "报错,并且不会从 xz 的标准输出中读取其余数据。由于数据永远不会被读取,例程3现在是死锁,也就永远不会关闭chdone。 例程1 - 等待例程3关闭chdone,也是死锁。 (编辑:ASP站长网) |