论文分享|Veil

IoT 3周前 admin
23 0 0

今天和大家分享的论文是Veil: A Protected Services Framework for Confidential Virtual Machines,发表于ASPLOS 2023,由Arizona State UniversityAdil AhmadPurdue UniversityBotong Ou等人完成。

论文分享|Veil

一、研究动机

AMD SEV提供的机密虚拟机(CVM)为不可信云上的敏感计算提供了受保护的环境。但SEV中部署的通常都是代码量庞大且易受攻击的内核,使云服务器面临内核漏洞的攻击。

针对大型操作系统内核缺乏信任的问题,现有研究主要是security monitors方法,1)基于高特权级的硬件来监控不可信操作系统的行为,2)利用软件方法对内核降权,但这两类方案分别存在兼容性和性能开销的问题。

本文提出一个安全服务框架Veil,利用新的硬件原语VMPL在云服务器cVM内运行特权安全监控器,保护关键敏感服务的执行。

二、技术挑战

Virtual Machine Privilege Levels(虚拟机特权级,VMPLs)是SEV-SNP中的一种新的特权隔离机制。如下图所示,SEV-SNP提供了四个VMPL,即VMPL-0VMPL-3,其中编号越低,特权级越高。当创建VCPU实例时,其VMPL被分配到创建的VMSA中,并在整个VCPU生命周期内保持不变。

论文分享|Veil

如果操作系统在较低特权级的VMPL(例如VMPL-3)上运行,Veil在更高特权级的VMPL(例如VMPL-0)上运行监控程序,则可以利用VMPL的保护机制确保受信任软件的正确执行。但不幸的是,直接利用VMPL实现监控架构面临如下几个挑战:

C1:虚拟机特权级的限制。 理论上,Veil需要一个单独的VMPL来隔离每个受保护的服务或飞地,但有限的VMPL4个)严重限制了可实现的服务或飞地数量。一个简单的解决方案是为所有受信任组件设置一个VMPL,为所有操作系统组件设置另一个VMPL。然而,这是不安全的。例如,操作系统可能会创建一个恶意飞地以在受信任软件的VMPL上运行。

C2:运行环境的限制。一个VCPU可以在执行过程中在不同的ring特权级之间切换(例如,使用SYSENTER在系统调用时切换到操作系统代码),但其VMPL在创建时是静态分配的。如果所有服务和敏感用户计算必须都有单独的VCPU,这非常浪费资源并严重限制了资源的使用。

C3:操作系统的兼容性限制。 由于内核不再在VMPL-0上执行,它在执行两个重要功能时受到了架构上的限制:(a)引导额外的VCPU和(b)与Hypervisor协作进行内存分配。如果没有适当处理,这会破坏CVM内核的兼容性。

三、设计实现

Veil设计目标是在不可信的CVM操作系统环境中,确保关键系统服务的正确执行。其架构设计如下图所示,由4个主要组件组成,分别是VeilMon(安全监控器)、受保护服务(Protected Services)、隔离区(Enclaves)和不可信软件(Untrusted Software)。

论文分享|Veil

1. VeilMon(安全监控器):VeilMon是运行在最高特权级别(VMPL-0CPL-0)的核心组件,负责管理其他所有域的内存访问权限以及创建新的域。在CVM启动过程中,VeilMon的代码和初始数据会被度量,并将SHA-256哈希值发送给远程用户进行验证,确保其在DomMon中安全加载和初始化。

1)特权域管理:通过将VMPL与传统的保护环ring技术相结合, Veil实现了四个CVM特权域,用于隔离和保护不同的组件:

  • DomMonVMPL-0 + CPL-0):最高特权域,运行VeilMon,负责管理其他所有域的内存访问权限。

  • DomSerVMPL-1 + CPL-0):运行受保护的服务。

  • DomEncVMPL-2 + CPL-3):运行隔离区(Enclaves)。

  • DomUntVMPL-3 + CPL-0/3):运行不可信的软件(操作系统和应用程序)。

2VCPU复制:由于每个VCPU实例只能在初始化时被永久分配给一个域,这种静态分区会浪费VCPU资源。VCPU静态分区不同,Veil为每个VCPU创建副本并将其分配给不同的域,以实现高效利用。这种切换通过Hypervisor完成,域之间通过共享内存进行通信。

3)内核兼容性:由于操作系统内核在DomUnt域中执行,因此无法实现以下两个功能:(a) 在系统初始启动或热插拔场景中启动VCPU(b) 接收来自Hypervisor的内存页或更改当前内存页状态。因此,Veil将这些功能委托给VeilMonVeilMon负责检查这些操作的正确性。

2. 受保护服务(Protected Services):主要包括VeilS-KciVeilS-EncVeilS-Log,分别用于保护内核代码完整性、数据加密和日志审计。

1VeilS-KciKernel Code Integrity):确保内核代码的完整性,防止内核被恶意篡改。

2VeilS-EncEnclaves):使用较高的VMPL来阻止操作系统访问enclave内存,同时确保无法enclave无法执行特权(CPL-0)指令或访问未授权内存区域。

3VeilS-Log:记录重要的系统事件,提供日志和审计支持。

3. 隔离区(Enclaves):类似于SGX的隔离区,VeilS-Enc将进程分为不可信和可信区域,确保可信区域的内存不能与其他软件共享,提供更灵活的分层安全保护。

4. 不可信软件(Untrusted Software):主要包括操作系统和应用程序,运行在较低特权级别。

通过以上设计,Veil提供了一个灵活且安全的框架,用于保护在CVM中运行的敏感数据和服务,确保即使操作系统被攻击,关键服务和数据仍然安全。

四、测试评估

作者实现了Veil的原型系统来评估其实用性、安全性和性能。Veil的原型系统仅需要对CVM Linux内核和Hypervisor做少量代码修改(少于1200行),并且整个框架和受保护的服务大约需要4100行代码,可以进行严格测试。

1)安全性测试:通过分析和实验验证,表明Veil可以成功防御来自操作系统的一系列攻击。


论文分享|Veil


2)性能测试:使用设计基准测试和实际案例研究来评估Veil及其受保护服务的性能。结果显示,VeilCVM的启动时间增加了不到2秒,对使用受保护服务的实际程序引入了2%64%的性能开销,在正常的CVM执行下对系统性能影响可以忽略不计。

论文分享|Veil

原文始发于微信公众号(COMPASS Lab):论文分享|Veil

版权声明:admin 发表于 2024年6月25日 下午11:42。
转载请注明:论文分享|Veil | CTF导航

相关文章