G.O.S.S.I.P 阅读推荐 2023-09-12 操作转发攻击:通过操作转发打破基于微虚拟机容器的隔离限制

今天要为大家推荐的论文是来自USENIX Security 2023的Attacks are Forwarded: Breaking the Isolation of MicroVM-based Containers Through Operation Forwarding,由浙江大学申文博老师研究组与西安电子科技大学李金库老师研究组共同完成并投稿。

一、引言

容器技术可以大幅度提升资源利用效率,因此在云计算场景下得到了广泛的应用,已成为云计算的重要支撑技术。然而,容器的高效性也伴随着一定的代价。共享内核设计无法为容器之间提供强大的隔离性,导致信息泄漏、cgroup误用和抽象资源攻击等。更糟糕的是,攻击者可以利用内核漏洞来危害共享内核,从而攻击同一内核上的所有容器。

为了减轻共享内核引入的安全风险,人们提出了基于微虚拟机的容器(microVM-based container),它在轻量级虚拟机内(称为微虚拟机)中运行每个容器。基于微虚拟机的容器为容器提供了专用的客户机内核,并利用硬件虚拟化来强化容器之间的隔离。因此,它既享有微虚拟机的安全性,又具备容器的高效性,从而被视为原始共享内核的native容器的安全替代方案。头部云计算厂商已经开发了多种基于微虚拟机的容器技术,例如Amazon AWS的Firecracker容器和阿里巴巴云的Kata容器。这两者都在公共云上得到了广泛应用。

然而,作者发现这种基于微虚拟机的安全容器并不安全,攻击者可以利用微虚拟机容器的不同组件,将guest中的操作转发到host,从而打破虚拟机隔离的限制。这种操作转发带来的攻击(作者称之为操作转发攻击)被传统的虚拟机安全性研究所忽略,且能带来如特权逃逸、让host崩溃等严重后果。

本文的贡献如下:

  • 新的攻击面:作则揭示了一种针对基于微虚拟机的容器的新攻击面,称为“操作转发攻击”。攻击者可以利用微型虚拟机容器组件的操作转发来触发主机内核的漏洞并消耗主机资源,可能导致特权升级和拒绝服务攻击。

  • 攻击策略: 作者提出了三个攻击策略,分别针对基于微型虚拟机的容器的三个层面,包括容器运行时组件、设备模拟器和主机内核组件;并展示了攻击者可以通过这三个层面发动操作转发攻击,以打破基于微虚拟机的容器的隔离。

  • 真实的攻击案例: 作者设计了八个针对Kata Containers和Firecracker-based容器的攻击,并进行了真实的攻击测试,这些攻击会导致严重的后果,如提权攻击、崩溃主机、IO性能下降、网络随机丢包等。已经向相关安全团队报告了所有问题,并获得一个新的CVE(CVE-2022-0358)


二、攻击思想

基于微虚拟机的容器使用虚拟机监控程序来创建和管理微虚拟机。在虚拟机的基础上,它添加了容器运行时组件,以在微虚拟机内创建容器。因此,基于微虚拟机的容器组件可以被分为三层,容器运行时层,设备模拟层和主机内核组件层。其中,容器运行时组件用来启动和管理微虚拟机以及运行在微虚拟机内部的本地容器。设备模拟层是主机上的一个用户空间程序,用于模拟各种硬件设备。主机内核组件是主机上的可加载内核模块,用于提供虚拟化功能支持。

图1 基于微虚拟机容器的组件架构

容器的大多数系统调用需求由微虚拟机的客户机内核提供。基于微虚拟机的容器和主机环境可以被视为两个隔离的世界。然而,作者观察到,由于性能和功能要求,基于微虚拟机的容器的某些操作会通过这些组件转发到主机内核中(称为操作转发)。这些组件中的转发路径缺乏必要的权限检查和速率限制等措施,攻击者可以利用这些基于微虚拟机的容器组件的转发路径来发起攻击,并打破虚拟机隔离的限制。

作者以他们发现的、已经分配CVE号的一个真实攻击为例进一步解释操作转发攻击的核心思想。

图2Kata Container中操作转发攻击路径

如图2所示, Kata Containers利用virtiofs在主机和容器之间共享目录和文件。Virtiofs通过virtiofs daemon这一设备模拟器将guest system call转发到host system call,该转发操作缺乏权限检查。具体来说,如果恶意容器请求创建一个具有SGID位的文件,那么该guest open syscall将会被经由guest kernel中的virtiofs driver转发给host中的virtiofs daemon,并触发主机的open()系统调用。随后,文件创建请求进入主机内核并调用inode_init_owner()函数来初始化正在创建的文件的inode。

图 3inode_init_owner函数

如图3所示,inode_init_owner()函数确定是否需要清除正在创建文件的SGID权限位(line 9),如果文件创建者所属的组不在目录拥有者的附属组中,则该文件的SGID位会被清除(line 11)。在默认情况下,virtiofs daemon以host root用户身份运行,并在其supplemental group中拥有root组,这与创建文件所在目录的拥有者相同。因此,文件创建请求通过了in_group_p检查,创建的文件保留了主机根SGID位。如果主机普通用户执行了创建的文件,该文件将以主机root组权限执行,从而实现特权升级。作者向virtiofs开发组报告了这个漏洞,他们修复了相关问题,并为作者分配了一个CVE编号CVE-2022-0358。

三、 攻击策略

通过上述示例,我们已经明白了缺乏恰当权限检查/速率限制的操作转发路径可能被利用来发起新的攻击,但是作者怎么系统化地识别操作转发攻击?为了解决这个问题,作者设计了三种攻击策略。攻击策略的核心是利用不同层次组件上的操作转发,使每个层次的组件不当地调用主机系统调用和内核函数。如图4所示,首先,攻击者或受攻击者控制的容器可以触发容器运行时组件调用主机系统调用,以利用主机内核的漏洞并耗尽主机资源。其次,恶意容器可以强制设备模拟器触发主机系统调用并耗尽主机资源。第三,恶意容器可以通过主机内核组件将其操作转发到由内核线程运行的主机内核函数,并生成带外负载以造成DoS攻击。

图4 三种攻击策略

四、 真实案例研究

作者通过在Firecracker和Kata Container中的更多真实攻击案例进一步阐述作者攻击策略的实际应用。结果汇总如表1所示。

表1 攻击结果汇总

通过遵循作者的攻击策略,作者在Firecracker和Kata Container中分别触发了四个新的攻击,并均得到了相关厂商的确认。在Firecracker环境中,作者设计并发起了Firecracker-containerd逃逸攻击,Firecracker脏页攻击,Firecracker的nf_conntrack table攻击以及KVM-PIT计时器攻击。在Kata Container环境中,除了virtiofs逃逸之外,作者还发现并触发了Kata脏页攻击,Kata nf_conntrack table攻击和vhost-net主机内核模块攻击。

Firecracker-containerd逃逸攻击:

Firecracker-containerd是Firecracker容器的运行时组件,主要负责接收来自外部的容器创建请求。如图5所示,当一个恶意用户尝试发送一个包含恶意参数的CreateVM()容器创建请求时,该请求会通过Firecracker-containerd触发chown()/create()主机系统调用。由于Firecracker-containerd对CreateVM()参数缺乏检查,恶意用户可以利用该操作转发来发起提权攻击或者crash主机。

如图6所示,prepareBindMounts函数为Firecracker-containerd中的部分源代码。对于提权攻击,作者在 createVM()请求中指定一个精心构建的 m.HostPath(/../../../../../../root/FILENAME)。然后,prepareBindMounts()会直接使用 filePath.Join() 将路径拼接成 /root/FILENAME(line 5)。在 bindMountFiletoJail() 函数中,os.Chown() 函数将 /root 目录的所有者从 root 更改为普通用户,而不进行任何检查(line14)。因此, /root 目录的属主会被修改成为一个normal user,从而实现提权。

图5 Firecracker-containerd转发路径

图6 prepareBindMounts()源代码

对于崩溃主机攻击,作者把m.HostPath指定成了/../../../../../../lib/x86_64-linux-gnu/ld-2.27.so,因此,而 filePath.Join() 指向主机 ld.so 二进制文件。然后在bindMountFileToJail()函数中,os.Create() 函数将其大小截断为 0,而不进行任何检查。主机将无法运行任何新应用程序并崩溃。

Firecracker/Kata Container脏页攻击:

Firecracker和Kata Container都受到脏页攻击的威胁,在这两个环境中,一个恶意容器都可以通过不同的组件,将guest的write()系统调用操作转发到主机的write()系统调用。一个恶意容器通过反复触发这些操作转发路径,耗尽主机的脏页内存。在此之后,主机中的所有写操作都会从write-back降级为write-through,被攻击容器的IO性能大大降低。

Firecracker/Kata Container nf_conntrack table攻击:

Firecracker和Kata Container也都受到nf_conntrack table攻击的威胁。更具体地说,Firecracker的设备模拟器会将 guest 的 syscall connect() 转发到主机内核。然后,通过主机的CNI网桥,guest的以太网帧会被转发到目标容器,并在host的netfilter表中写入一个条目;Kata Container的vhost-net 主机内核模块也会实现类似的效果。因此,通过在这两个环境中反复触发这些操作转发路径,恶意容器可以填满主机的 nf_conntrack 表,导致受害者随机丢弃数据包。 

Firecracker中的KVM-PIT timer攻击:

Firecracker中可以使用不同的host kernel model来生成带外负载并发起DoS攻击。如图7所示,Firecracker可以通过写入低级I/O端口的outb()操作,唤醒host KVM模块中的kvm-pit线程来处理内核函数(pit_do_work())。通过反复触发这个操作转发路径,恶意容器可以生成大量的带外工作负载,并显著降低受害者的CPU性能,从而实现DoS攻击。

图7 Firecracker KVM-PIT timer相关负载的转发路径

Kata Container中的vhost-net攻击:

Kata Container同样可以利用vhost-net这一主机内核模块来生成带外工作负载并发起DoS攻击。如图8所示,恶意容器的sendmsg()和recvmsg() guest syscall会被转发到host vhost-net内核模块,并触发相关主机内核函数进行处理;一个名为vhost-net线程被唤醒来处理上述请求,该线程由于属于host kernel thread,它的工作负载会被计费到主机的root cgroup,而不是容器所属的Linux control group。因此,通过反复触发这个路径,一个恶意容器可以生成大量没有被正确计费的带外工作负载,从而实现DoS攻击。

图8 vhost-net的转发路径

五、 缓解措施分析

 本工作对于这一系列操作转发带来的攻击面,提出了一些对应的缓解措施。对于容器运行时组件,使用jail和禁用共享文件系统可以降低相关风险。对设备模拟层,使用SR-IOV pass-through设备和给特定设备添加速率限制可以减轻相关风险。对于host kernel model层,将主机内核线程附加到正确的cgroups并禁用主机内核特定组件的功能可以消除相关风险。此外,使用监控工具来检测这些操作转发路径和相关攻击也可以减轻风险。但是,所有的缓解措施都特定于不同microVM-based container中的不同组件;特定的缓解措施还可能带来意想不到的性能下降和功能受损,因此,从根本上解决操作转发带来的攻击面仍然需要大量的工作。

六、 总结

在本文中,作者展示了操作转发机制可以被利用来破坏基于微型虚拟机(microVM)的容器的隔离性。攻击者可以利用微型虚拟机容器的三层组件来发起多种不同的攻击,并造成严重的后果。作者在两大microVM-based container的自部署环境中进行了真实的攻击测试,并向相关厂商和社区负责任地披露了作者的发现。同时,作者也提出了一些可能的缓解措施,为如何更好地实现microVM-based container的隔离提供了重要参考。


论文地址:https://www.usenix.org/conference/usenixsecurity23/presentation/xiao-jietao


投稿作者信息:

肖杰韬,西安电子科技大学网安学院硕士研究生,导师为李金库老师和申文博老师,研究方向为容器安全。

杨男子,西安电子科技大学网安学院博士研究生,导师为李金库老师和申文博老师,研究方向为容器安全,在ACM CCS 2021, Usenix Security 2023和ACM CCS 2023上发表三篇一作(共同一作)论文。

申文博(https://person.zju.edu.cn/shenwenbo ),浙江大学 百人计划研究员,博士生导师。研究方向为操作系统安全,云原生系统安全,软件供应链安全。在计算机安全、系统、网络国际顶级会议、期刊发表论文40余篇,获得3项杰出论文奖 (NDSS 16, AsiaCCS 17, ACSAC 22)。

李金库(https://faculty.xidian.edu.cn/Jinku/zh_CN/index.htm),西安电子科技大学网络与信息安全学院教授,博士生导师。在包括USENIX Security、ACM CCS、ACM EuroSys、IEEE TIFS、IEEE TDSC等国际顶级学术会议和期刊上发表学术论文50余篇;出版学术著作2部;获得省部级科技一等奖2项,二等奖3项;申请技术发明专利70余项,已授权专利45项,完成专利科技成果转化5项;获得计算机软件著作权3项。




免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。查看原文

为您推荐