编者按
2022年5月,由网络安全研究国际学术论坛(InForSec)汇编的《网络安全国际学术研究进展》一书正式出版。全书立足网络空间安全理论与实践前沿,主要介绍网络和系统安全领域华人学者在国际学术领域优秀的研究成果,内容覆盖创新研究方法及伦理问题、软件与系统安全、基于模糊测试的漏洞挖掘、网络安全和物联网安全等方向。全书汇总并邀请了近40篇近两年在网络安全国际顶级学术议上发表的论文(一作为华人),联系近百位作者对研究的内容及成果进行综述性的介绍。从即日起,我们将陆续分享《网络安全国际学术研究进展》的精彩内容。
本文介绍了俄亥俄州立大学的博士生李梦源、南方科技大学的张殷乾教授,以及俄亥俄州立大学的林志强教授合作发表在ACM CCS 2021的文章“CrossLine-Breaking“Security-by-Crash”based Memory Isolation in AMD SEV.”。在这篇文章中,作者探究了AMD安全加密虚拟化技术中采用的“通过崩溃实现安全”的设计理念,并提出了一种基于未经授权的密钥使用的CROSSLINE攻击。
随着大家对数据安全性重视程度的提升,云平台的数据安全性获得了工业界广泛的关注。AMD安全加密虚拟化(secure encrypted virtualization,SEV)技术就是AMD在服务器级可信计算领域给出的答案。AMD安全加密虚拟化技术旨在保护云平台上的虚拟机中的数据安全并抵挡来自其他恶意用户甚至恶意虚拟机管理器的攻击。不同于Intel Software Guard Extension(SGX)针对单个应用程序并且需要对源代码进行重构,AMD安全加密虚拟化技术通过在处理器芯片集成系统中内嵌的安全处理器(secure processor)和内存加密引擎(memory encryption engine)对整个虚拟机的内存实现实时加密,从而部署者只需要在内核层面适配AMD安全加密虚拟化技术而不需要重新撰写和编译应用程序的源代码。
AMD安全加密虚拟化技术因为其广泛的应用场景和对部署者友好的使用模式,自2016年在Zen架构下的AMD EPYC(霄龙)服务器级处理器首次推出之后,主流云公司就逐渐开始在商用云上部署AMD安全加密虚拟化技术了。其中谷歌云和微软云已经率先开始提供基于AMD安全加密虚拟化技术的商用可信虚拟机,百度云、阿里云、亚马逊云和思科也在近几年开始部署AMD霄龙处理器,并可能在未来正式提供商用可信虚拟机的服务。
与此同时,学术界也对AMD安全虚拟化技术的安全保证进行了深入的探索。研究表明,AMD安全加密虚拟化技术虽然使用便捷,但面临着可信计算基(trusted computing base)过大带来的种种威胁。其中未被加密的虚拟机控制单元(virtual machine control block)、未经保护的虚拟机页表、未经保护的I/O接口等弱点均威胁了受AMD安全加密虚拟化技术保护的虚拟机中的数据安全。在这样的背景下,AMD于2017年及2020年推出了安全加密虚拟化的第二代和第三代扩展,分别叫作SEV Encrypted States(SEV-ES)和SEV Secure Nested Paging(SEV-SNP)。其中SEV-ES解决了未被加密的虚拟机控制单元和密文篡改的威胁,而SEV-SNP在Zen3架构下进一步增强了虚拟机管理器和虚拟机之间的数据隔离。
本文介绍了俄亥俄州立大学的博士生李梦源、南方科技大学的张殷乾教授,以及俄亥俄州立大学的林志强教授合作发表在ACM CCS 2021的文章“CrossLine-Breaking“Security-by-Crash”based Memory Isolation in AMD SEV.”。在这篇文章中,作者探究了AMD安全加密虚拟化技术中采用的“通过崩溃实现安全”的设计理念,并提出了一种基于未经授权的密钥使用的CROSSLINE攻击。通过CROSSLINE攻击,攻击者能将攻击者控制的攻击者虚拟机(attacker VM)伪装成受害者虚拟机(victim VM),进而以欺骗安全处理器和内存加密引擎的方式来利用受害者虚拟机的密钥进行一系列加解密操作,并在攻击者虚拟机崩溃之前泄露部分受害者虚拟机的内存信息。值得注意的是,以往的攻击需要依赖于虚拟机和虚拟机管理器之间的I/O交互并且存在被虚拟机使用者发现的可能性,而CROSSLINE攻击利用了不安全的“通过崩溃实现安全”的内存壁垒的设计理念,实现了理论上不可能被虚拟机使用者侦测到的完全隐秘的攻击。
01
虚拟机“身份证”及相关设计理念
作者首先介绍了AMD安全加密虚拟化技术中设计的虚拟机的“身份证”和基于此采用的“通过崩溃实现安全”的设计理念。
在虚拟机的运行过程中,软件层面的虚拟机管理器以及硬件层面的安全处理器都使用ASID作为虚拟机的标识符。ASID由软件层面的虚拟机管理器来管理并分发,同时ASID又作为虚拟机的标识符,被硬件用来提供虚拟机-虚拟机和虚拟机-虚拟机管理器的数据机密性隔离,如图1所示。
图1
具体地讲,ASID在运行过程中存储在软件层面无法直接修改的寄存器中,而在从虚拟机到虚拟机管理器世界切换(world switch)的时候,虚拟机的ASID将被存储在未经加密的虚拟机控制单元中。而在虚拟机运行的过程中,ASID将从内存、页表缓存、缓存这3个方面帮助受AMD安全加密虚拟化技术保护的虚拟机实现数据隔离。
(1)基于ASID的内存隔离。受安全加密虚拟化技术保护的虚拟机存储在内存中的数据是由其对应的虚拟机加密密钥加密过的密文。所有虚拟机加密密钥均由安全处理器存储和调用,在内存自动加解密的过程中,安全处理器通过当前ASID的值来调用相应的虚拟机加密密钥。通过这样的方式,ASID帮助虚拟机实现内存中的数据机密性隔离。
(2)基于ASID的页表缓存隔离。为了避免在虚拟机退出事件和虚拟机执行时清空所有的页表缓存,AMD在页表缓存的标签区域中加入了ASID标签。通过这样的设计,在虚拟机或者虚拟机管理器运行的时候,虽然页表缓存可能存在不属于自己的页表条目,但是由于ASID标签的存在,将不会出现错误使用他方页表条目的情况,进而实现页表缓存的隔离。
(3)基于ASID的缓存隔离。与页表缓存类似,AMD在处理器缓存的标签区域也同样加入了ASID标签。由于安全加密虚拟化的设计,在处理器缓存中存储的是未经加密的明文,而ASID标签的设计将帮助提供处理器缓存之间数据的机密性隔离。值得注意的是,硬件将不会维护同一物理地址但是不同ASID标签的处理器缓存行之间的一致性。
由于在实际的云平台中,需要动态地创建和删除虚拟机,AMD安全加密虚拟化将ASID的管理和分发赋予软件层面的虚拟机管理器。考虑到AMD安全加密虚拟化的设计中,虚拟机管理器不会拒绝服务但是本身并不可信,AMD依赖于“通过崩溃实现安全”的设计理念,来确保虚拟机管理器不会恶意地分发或者修改ASID。AMD安全加密虚拟化的白皮书指出,如果虚拟机管理器在虚拟机退出事件发生时修改虚拟机的ASID,将大概率导致虚拟机立刻崩溃,而虚拟机管理器将不会得到任何有用的信息。
02
虚拟机崩溃原因分析及CROSSLINE攻击
作者接着探究了在篡改虚拟机ASID之后,虚拟机立刻崩溃的原因,并在此基础上提出了CROSSLINE攻击。在攻击者于虚拟机退出事件发生时篡改虚拟机的ASID之后,硬件将在下一个虚拟机执行事件发生时,从虚拟机控制单元中读取ASID并写入ASID寄存器中,同时虚拟机将开始尝试从退出事件发生的断点继续执行。由于ASID的改变,之前存储在页表缓存、处理器缓存中的数据将无法被读取,因此虚拟机将尝试通过读取页表的方式来尝试寻找并执行下一个指令。其中,由于虚拟机中嵌套页表的结构设计(如图2所示),虚拟机将首先找到gCR3(guest CR3)寄存器中存储的最高层页表的虚拟机物理地址(gPA),然后由硬件在嵌套页表中找到对应的系统物理地址(sPA)。在定位到顶层页表的系统物理地址之后,硬件会通过下一条指令的逻辑地址在当前内存页中找到对应偏移量的页表条目并尝试读取下一层页表的虚拟机物理地址。但是虚拟机内存中存储的页表是由被篡改前的ASID对应的虚拟机加密密钥加密之后的密文,而在虚拟机读取页表的过程中,安全处理器将使用被篡改后的ASID对应的密钥进行解密,这将获得没有意义的内容。虚拟机将尝试去处理该异常,但是错误的加密密钥将使得虚拟机无法正常执行任何指令,最终产生3次错误带来虚拟机的崩溃。
图2
CROSSLINE攻击首先创建一个攻击者控制的攻击者虚拟机,之后将攻击者虚拟机的ASID篡改成受害者虚拟机的ASID。同时,精细地修改嵌套页表和存储在虚拟机控制单元的寄存器。通过这样的方式,攻击者将在攻击者虚拟机崩溃前实现短暂执行,这将帮助攻击者获取或者篡改受害者虚拟机中的数据。假设受害者虚拟机的ASID是1,攻击者虚拟机的ASID是2,攻击者尝试解密在内存中系统物理地址是sPA0的8字节内存单元,其所在的页帧号是sPN0,攻击的具体流程如图3所示。
(1)在一次攻击者虚拟机触发虚拟机退出事件的时候,攻击者首先清除属于攻击者虚拟机嵌套页表上的所有P bit来持续性地监视虚拟机的运行,如图3中①所示。在P bit缺失的情况下,攻击者虚拟机在第一次访问某个内存页的时候,将触发一个嵌套页表的缺页异常。
(2)攻击者接着在嵌套页表中将攻击者虚拟机最顶层的页表映射到sPN0,具体的实现方式是在嵌套页表中将存储在虚拟机控制单元中的gCR3寄存器的虚拟机物理地址重新映射到sPN0,如图3中②所示。
(3)攻击者将存储在虚拟机控制单元的攻击者虚拟机的ASID改写成受害者虚拟机的ASID(由2改写成1),如图3中③所示。
(4)攻击者通过改写NRIP寄存器中存储的下一条指令的逻辑地址来确定需要解密的内存单元在内存页中的偏移。虚拟机将尝试以sPN0为起始来读取页表映射。而在多级页表中,由逻辑地址来确定页表条目在页表中的偏移。通过修改NRIP寄存器中存储的指令的逻辑地址,虚拟机将尝试从sPA0的8字节内存单元中读取下一层页表的物理地址。攻击者通过图4所示的算法来确定NRIP寄存器需要修改为什么值,并以此精准定位需要解密的内存单元。
图3
图4
(5)在完成以上修改之后,攻击者将能在虚拟机尝试执行之后,通过嵌套页表的缺页异常来获取需要解密的内存单元存储的数据。在攻击者虚拟机的下一次虚拟机执行之后,攻击者虚拟机将尝试使用受害者虚拟机的密钥来获得下一条指令。具体来说,硬件在从虚拟机存储单元中读取顶层页表的物理地址之后,将尝试从sPA0的内存单元中读取第二层页表的物理地址。硬件会自动对sPA0 的内存单元进行解密,而如果解密出来的数据满足页表条目的格式,虚拟机将自动尝试访问第二层页表的内存页。但是由于攻击者在(1)中已经清除所有内存页的P bit,一个指向sPA0存储数据的嵌套页表的缺页异常将被触发,攻击者也将从该缺页异常中获得sPA0存储的数据。
通过以上的攻击步骤,CROSSLINE攻击将获取内存中满足图5所示的类似页表条目格式的内存数据。这将帮助攻击者读取受害者虚拟机的页表内容,破解其地址空间配置随机化和辨识虚拟机内部运行的程序。
图5
作者将上述攻击命名为CROSSLINE V1,并进一步提出了CROSSLINE V2。CROSSLINE V2将通过使攻击者虚拟机执行一条指令的方式来读写受害者虚拟机中的任意数据。与CROSSLINE V1类似,攻击者通过将攻击者虚拟机的ASID篡改成受害者虚拟机的ASID并精细修改嵌套页表和存储在虚拟机控制单元的寄存器的方式,在攻击者虚拟机崩溃前实现短暂执行。与CROSSLINE V1着眼于读取页表的过程不同的是,在CROSSLINE V2中,攻击者将让攻击者虚拟机完成对指令的读取并完整地执行一条指令。我们假设攻击者想要执行的指令的逻辑地址是gVA0,对应的gCR3的值是gCR30。攻击者通过以下步骤来让攻击者虚拟机执行一条受害者虚拟机的指令。
(1)在一次攻击者虚拟机触发虚拟机退出事件的时候,攻击者首先清除嵌套页表上所有的P bit。同时攻击者需要在攻击者虚拟机的嵌套页表中修改5个页表映射(包含4个针对虚拟机页表的映射和1个针对指令内存页的映射)。这5个页表映射将帮助攻击者虚拟机完成读取页表的过程并最终定位到指令内存页。
(2)攻击者同时将NRIP寄存器中存储的下一条指令的逻辑地址更改为gVA0。同时攻击者需要清除存储的RFLAGs寄存器中的IF位来确保在虚拟机执行后,攻击者虚拟机将直接执行NRIP寄存器指向的下一条指令。
(3)攻击者最后将存储在虚拟机控制单元的攻击者虚拟机的ASID改写成受害者虚拟机的ASID(由2改写成1)。
而攻击者选择一些特殊指令执行能帮助其建立起使用受害者虚拟机密钥的解密器和加密器。其中如果指令的格式类似于“mov(%reg1),%reg2”,那么攻击者将读取reg1寄存器指向的内存单元的值,并将其解密至reg2代表的寄存器中;如果指令的格式类似于“mov%reg1,(%reg2)”,那么攻击者将加密reg1寄存器存储的值,并将其写入reg2指向的内存单元。作者在文中以OpenSSH服务器为例,具体介绍了如何在常用的应用程序中定位类似指令,并读取或写入受害者虚拟机任意内存单元。
作者在AMD安全加密虚拟化的第二代扩展SEV-ES上复现了CROSSLINE V1的攻击并讨论了CROSSLINE攻击在AMD安全加密虚拟化的第三代扩展SEV-SNP的局限性。作者将不安全地“通过崩溃实现安全”的设计;缺少对于虚拟机运行错误的记录,使得攻击者虚拟机可以任意且重复地利用虚拟机控制单元;在SEV-ES中对于虚拟机存储区域缺少所有权的记录,使得攻击者虚拟机可以使用受害者虚拟机的存储区域的问题,以及CROSSLINE攻击报告给了AMD。AMD公司表示了对于相应问题的重视,并表示可能在未来的版本中以其他方式进一步提升虚拟机间数据隔离。
作者简介
李梦源,俄亥俄州立大学博士研究生,博士生导师是张殷乾教授。他的主要研究方向包括可信计算、云计算、基于硬件的内存加密和侧信道攻击。他在USENIX Security,ACM CCS等信息安全顶级会议及期刊发表过相关论文。
张殷乾,南方科技大学计算机科学与工程系教授。他的研究领域为体系结构安全、软件和系统安全、分布式系统和应用安全、安全与人工智能、安全系统的形式化验证等,研究目标为解决云计算、物联网、区块链等关键领域的可信与安全问题,为数据隐私、智能终端、金融科技、车载系统等应用场景提供技术支持。他曾获奖项包括2020年的AMiner最具影响力的安全和隐私学者提名;2019年的北美计算机华人学者协会明日之星奖;2019年的IEEE MICRO Top Picks提名;2019年的IEEE计算机体系结构快报最佳论文;2018年的美国国家科学基金青年科学家奖。
林志强,俄亥俄州立大学计算机科学与工程系教授。他的研究领域为可信计算、系统和软件安全,主要的研究目标包括开发自动化程序分析和逆向工程技术,并将其用于保护包括移动应用程序在内的程序安全、包括操作系统内核和虚拟机管理器在内的底层系统安全。他曾获奖项包括NSF职业奖和AFOSR青年研究员奖。林志强教授同时还是数据及转化分析研究所(TDAI)、汽车研究中心(CAR)和最近在俄亥俄州立大学成立的网络安全和数字信任研究所(ICDT)的教员。
(未完待续……)
版权声明:本研究报告由网络安全研究国际学术论坛(InForSec)汇编,人民邮电出版社出版,版权属于双方共有,并受法律保护。转载、摘编或利用其它方式使用本研究报告文字或者观点的,应注明来源。
本报告数量有限,关注公众号私信我们可以享受六折优惠,欢迎订阅!