vSGX:基于SEV的SGX虚拟化

admin 2022年5月24日01:13:10安全闲碎评论8 views3436字阅读11分27秒阅读模式

本文将介绍Teecert Labs与Ohio State University的林志强教授合作在IEEE S&P2022上发表的文章:“vSGX: VirtualizingSGX Enclaves on AMD SEV”[1]。在这里Teecert Labs感谢蚂蚁集团对本研究的大力支持。


vSGX:基于SEV的SGX虚拟化
主要内容



 

一、研究背景

可信执行环境(TrustedExecution Environment)是一种基于CPU硬件的可信技术,通过在CPU的扩展指令开辟出一个与外界隔离的代码运行环境(成为enclave),并通过CPU内隔离、内存加密等技术防止自不可信软件对enclave的访问。可信执行环境同时使用硬件和软件的保护机制以确保可信执行环境中加载的代码和数据的机密性和完整性都得到保护。

在云服务中,可信执行环境的使用保证了程序数据的机密性和完整性不受恶意的系统软件和运营商的影响,这对不完全受用户信任的云计算平台来说非常有价值,因此可信执行环境的在过去的几年中得到了巨大的发展。作为在通用CPU市场占主导地位的厂商,Intel和AMD都提出了各自的可信执行环境架构:Intel SGX和AMD SEV,其中IntelSGX构建了一个丰富的生态系统并发展成为了较为成熟的可信执行环境架构。

然而Intel SGX扩展指令集只有在特定的Intel SGX硬件支持下才能执行,并且开发人员需要根据Intel软件规范使用Intel SGX SDK构建应用程序。同样地,AMD SEV只能在特定的AMD SEV硬件支持下才能运行,这使得云厂商在可信执行环境服务的部署时硬件的选择上产生了较大的困扰。因此如何将可信执行环境软件与底层可信执行环境硬件分离,使得开发完成的应用程序能够“一次构建,任意部署”成为了云服务厂商的强烈愿望。

 

二、vSGX概述

vSGX是一种新的可信执行环境架构,它通过虚拟化技术在AMD SEV上无缝地执行Intel SGX程序。vSGX通过使用指令模拟,跨虚拟机内存同步以及基于AMD SEV的内存加密和隔离机制来兼容Intel SGX应用程序,同时利用SEV的内存加密保证了应用程序的机密性和完整性,并且在真实应用程序的运行测试中表现出了合理的性能开销。这种架构设计打破了可信执行环境硬件与软件的强关联性,实现了“可迁移”的机密云计算服务构想。

在vSGX系统架构中,包含着运行可信Intel SGX应用程序的Enclave虚拟机(EVM)以及运行不可信应用程序的APP虚拟机(AVM)。vSGX通过拦截Intel SGX指令的执行(例如EENTER和EEXIT),模拟相应的指令逻辑以实现对于Intel SGX指令的兼容。vSGX使用AMD SEV内存加密引擎以及远程证明服务验证enclave中代码和数据的保密性和完整性。


vSGX:基于SEV的SGX虚拟化

图表 1. vSGX系统架构




三、vSGX系统架构

vSGX系统共包含5个模块:(1)指令仿真(2)Enclave管理(3)内存管理(4)跨虚拟机通信(5)远程证明。

   指令仿真:vSGX在EVM和AVM中实现非法操作码陷阱的处理程序,模拟Intel SGX的指令执行并修改相应的寄存器。Intel SGX中可用的enclave指令被分为两个指令助记符下的叶函数:ENCLS和ENCLU。每个叶函数使用EAX寄存器指定,并且通过其他可能需要的额外隐式输入寄存器作为参数。在vSGX中,ENCLS指令的执行过程是:将AVM将请求参数打包发送到目标EVM中执行,EVM执行成功后将错误代码以及需要更新的寄存器值作为响应发送至AVM。而大多数ENCLU指令的执行是通过在EVM内部根据硬件信息进行模拟。对于少数特别的ENCLU指令如ENTER、EEXIT和ERESUME,它们的模拟由于涉及跨虚拟机传输,需要对AVM和EVM进行检测以确保同一时间只有一个跨虚拟机指令能够执行。目前vSGX支持的SGX指令如下表所示:

vSGX:基于SEV的SGX虚拟化图表2.  vSGX已支持的SGX指令



Enclave管理:Enclave管理功能通过在EVM中创建一个用于管理enclave的用户空间进程实现。Enclave管理程序将会在新的EVM启动之后进行创建并且为enclave的创建做好准备。Enclave管理程序将会为EVM中的enclave应用程序创建隔离的地址空间和相应的线程,当一个enclave应用程序被正确设置并脱离enclave管理程序的管理后,才能切换到该enclave应用程序以确保安全性。

 

内存管理:在vSGX中包含四种地址空间,分别是:EPC(Enclave Page Cache)地址空间、 虚拟地址空间、enclave物理地址空间、管理程序地址空间,其中管理程序地址空间由enclave内核管理,而其他地址空间由vSGX管理与使用。四种地址的关系如图2所示。vSGX中使用软件实现EPC管理程序以管理EVM的内存页表条目,并且为每一个enclave使用不同的特定密钥加密以防止内存访问攻击。此外,vSGX设计了获取和映射机制以处理EVM页面访问的错误,并且通过地址判断是否需要返回非enclave内存以实现enclave与外界共享内存。vSGX还通过创建后台线程定时同步页表的同步机制以实现AVM和EVM间无需切换的信息交流。其中enclave中的隐私代码以及数据段内存在两种机制下均拒绝访问以保证其安全性。



vSGX:基于SEV的SGX虚拟化图表 3. vSGX 地址空间



跨虚拟机通信:vSGX设计了包含会话ID、总包数、当前包索引和数据总大小的通信协议以实现并发的,多目标的,机密的,任意数据大小的信息传输。通过将密钥分发给EVM以及AVM,vSGX加密了传输的数据从而防止操作系统或超级管理员获取传输的信息。信息传输的接收方需要通过会话ID以及序列号将接受到的数据串联成原始数据以保证在数据包乱序、重发、并发的情况仍然保持数据的完整性与机密性。

 

远程证明:vSGX中的远程证明依赖于AMD SEV与Intel SGX的远程证明协议。在vSGX的远程证明中,虚拟机的提供者提供加密的虚拟机镜像部署EVM,该密钥只有虚拟机提供者持有以确保虚拟机镜像的完整性和机密性。vSGX enclave的证明过程需要使用虚拟机提供者的公钥以及存储在虚拟机内核中的根密钥以模拟Intel SGX的密钥获取指令EGETKEY获取验证密钥以实现远程证明。

vSGX系统的运行依赖于以上五个模块,其中应用程序运行在AVM中,而隐私数据在EVM中。应用程序在AVM中作为普通进程运行,当需要进行隐私计算时,应用程序首先需要使用ECREATE指令在EVM中初始化环境、指定enclave的地址空间、并且为相应的enclave控制结构体(即SECS)分配内存页(即EPC)。之后,应用程序使用EADD指令为enclave的二进制代码添加所需内存页,并在添加的同时使用EEXTEND指令为已经添加的内存页做度量,在创建enclave的最后EINIT指令检查整个enclave的度量以完成enclave建立,enclave的度量在之后的远程证明中被使用作为enclave完整性的保证。

    通过以上的设计,vSGX系统实现了在AMD SEV硬件上虚拟化执行Intel SGX程序,并基于AMD SEV硬件的可信链实现了对整个可信执行环境系统的远程证明。vSGX在AMD SEV硬件上提供了与IntelSGX相当的安全水平保障,并实现了可以用于实践的合理性能开销。具体的实验数据在下面的论文中有详细的介绍。


相关链接
论文全文:vSGX_Oakland_21_DEC.pdf

[1] vSGX: Virtualizing SGX Enclaves on AMDSEV,Shixuan Zhao, Mengyuan Li, Yinqian Zhang, ZhiqiangLin,In 2022 IEEE Symposium on Security and Privacy (SP)(pp. 687-702). IEEE Computer Society.











论文链接:

https://www.computer.org/csdl/proceedings-article/sp/2022/131600a687/1A4Q3q3W28E

开源代码:https://github.com/randoruf/vsgx









关注我们

南方科技大学可信系统安全实验室会定期邀请国内外安全领域知名专家学者开展报告,交流相关领域最新技术以及进展。


vSGX:基于SEV的SGX虚拟化



原文始发于微信公众号(可信系统安全实验室):vSGX:基于SEV的SGX虚拟化

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年5月24日01:13:10
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  vSGX:基于SEV的SGX虚拟化 http://cn-sec.com/archives/1043431.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: