【TEE论文】HyperEnclave: An Open and Cross-platform Trusted Execution Environment(USENIX ATC 2022)

动机

现有的TEE存在问题:

  • 需要硬件更改
  • 闭源,难以审查
  • 飞地以固定模式运行,难以灵活适应不同工作负载

设计目标

  • G1:最小化硬件修改
    • 硬件虚拟化+TPM
    • 跨平台
  • G2:容易开发
    • SGX兼容
    • 移植现有的SGX程序只需要很少或不需要代码更改
  • G3:灵活的飞地模式
    • 更好地满足特定飞地工作负载的需求

威胁模型

  • 系统最初正常:启动后可能是被损害
  • 恶意软件:应用,OS内核,飞地恶意软件
  • 特定物理攻击:冷启动,总线窥探攻击
  • 特定侧信道攻击:基于页表的攻击
  • 不考虑:拒绝服务攻击,其他侧信道(cache timing,speculative execution)

概述

  • RustMonitor:VMX root,ring-0
  • Normal VM:VMX non-root,ring-0&ring-3
  • Enclave:灵活性
    • VMX non-root, ring-3 (GU-Enclave)
    • VMX non-root, ring-0 (P-Enclave)
    • VMX root, ring-3 (HU-Enclave)

设计目标

内存管理和保护

  • 现有设计,飞地的页表由不可信OS管理,存在内存映射攻击(操纵地址映射)

  • SGX扩展Page Missing Handler (PMH)并引入新的元数据EPCM用于TLBmiss时的额外安全检查;然而飞地页表错误由OS处理,这种设计容易收到基于页表的攻击,比如受控信道攻击;SGX2支持动态飞地内存管理,通过OCALL发送EDMM请求给SGX driver,driver不可信,因此需要大量检查,涉及到Enclave模式切换,开销大

  • 上述问题的根源在于,飞地的页表和页故障由OS管理,在HyperEncalave中,实现飞地页表的隔离,RustMonitor代替OS来管理飞地的页表和页故障,正常VM的页表仍然由OS管理。

  • 上述方法存在新的挑战:enclave可以访问普通应用程序的整个地址空间。因此,普通应用程序的页表映射发生改变的时候,更新的映射需要同步到enlave的页表

  • 为了消除同步开销,在应用空间预分配和enclave共享的marshalling buffer,enclave和application之间的数据交换通过marshalling buffer进行,这样application的内存映射就不需要包含在enclave的页表中,这种设计还减轻了enclave的恶意软件攻击,因为enclave无法访问application的地址空间

  • 内存隔离机制,normal VM的application内存通过Nested paging管理,enclave内存通过Nested paging或正常额1级地址转换管理。满足以下安全需求:

    • R1:不允许主OS和application访问属于 RustMonitor 和 enclave 的物理内存。


- R2:不允许安全区访问属于 RustMonitor 和其他安全区的物理内存。它被设计为只能访问与不受信任的应用程序共享的特定内存区域,以便进行参数传递。

  • R3:从恶意外围设备到属于 RustMonitor 和Enclave的物理内存的DMA访问不被允许。为防止此类攻击,HyperEnclave 在IOMMU的支持下限制了外围设备使用的物理内存。

灵活的飞地操作模式

  • 大量不同的应用需求不同,TEE需要更好的满足不同飞地工作负载的需求

    大多数现有的TEE运行在固定模式(Intel SGX,TrustVisor,Secage),不能使用于不同应用;用户模式的飞地不能访问特权资源,需要切换到不可信代码,从而访问特权资源或处理异常,上下文切换昂贵。
    HyperEnclave支持三种飞地操作模式:
  • ①GU-Enclaves 客户机用户模式;VMX non-root, ring-3;
  • ② P-Enclaves客户机特权模式或可选客户机用户模式; VMX non-root, ring-0
  • ③HU-Enclaves主机用户模式;VMX root, ring-3

P-Encalve

  • 访问特权资源
    • IDT
    • 页表
  • 处理特权事件
    • 中断
    • 异常

HU-Enclave

  • 快速世界切换:hypercall (880 cycles)–>syscall (120 cycles)
  • 无虚拟化开销
  • 适合IO密集和内存密集

世界切换

可信启动

  • 由静态不可修改代码CRTM执行测量链的启动,测量存储在TPM PCRs,任何修改都会被反映出来。
  • 为了减少PrimaryOS的攻击面,把RustMonitor镜像放在Initramfs,kernel module测量其镜像在early userspace并启动RustMonitor,同时确保RustMonitor加载的软件状态是可信的。
  • RustMonitor加载后,RustMonitor设置其运行上下文并准备每个CPU的vCPU,启动的那个normal VM并将primary OS降级为Normal mode,然后返回kernel module,继续Normal mode的启动过程,意识不到RustMonitor的存在

飞地SDK

实现

评估

世界切换性能

P-Enclave use cases: exception handling


真实工作负载


相关工作

  • CURE也能支持不同飞地;修改系统总线区支持内存和外设的访问控制;cache划分防止侧信道
    • CURE需要改变CPU核以支持eid
    • 本文:不需要硬件或固件修改
  • 很多工作用虚拟化扩展去支持隔离的执行环境
    • TrustVisor
      • 只读的PAL页表页去防止内存映射攻击
      • PAL注册和状态切换的开销大
      • 由于更新OAL页表的访问位和脏位,内存压力大时存在大量NPT违例,导致巨大开销
    • Inktag
      • hypervisor管理HAP页表,允许不可信OS向hypervisor发送请求以更新HAP页表
      • Inktag和TrustVisor容易受到基于页表的攻击
      • 本文保护基于页表的攻击
    • AWS Nitro Enclaves
      • 由主机KVM和Linux组成,主机Linux kernel总是可信的
      • TCB大(包括device driver,guest IO,网络和块设备虚拟化)
      • 本文:最小化RustMonitor的TCB,执行基本的虚拟化和飞地管理,primary OS只需要在启动过程被信任,RustMonitor启动后primary OS被降级
    • Komodo和Keystone
      • Komodo(secure user mode)在TrustZone上实现类似SGX的飞地保护模型
      • Keystone在RISC-V上实现定制化TEE(U-mode and S-mode)
      • 本文:支持灵活的飞地模式(guest ring-3, guest ring-0/ring-3, and host ring-3)
    • ARMv9-A architecture的Realm Management Extension (RME)
      • monitor(EL3)强制secure、non-secure、Realm的物理内存隔离
      • Realm Management Monitor (RMM)执行在EL2 in Realm security state (R-EL2),通过2级页表隔离Realms
      • 与 HyperEnclave 类似,RMM 比典型的hypervisor简单得多,并且依赖于non-secure hypervisor进行设备仿真
      • RME需要架构扩展,HyperEnclave不需要;HyperEnclave把信任链和CPU解耦

总结

  • 开源、兼容SGX的process-based TEE:supports the process-based TEE model, and SGX programs can run on HyperEnclave with little or no code changes.
  • 灵活的飞地模式:supports the flexible enclave operation modes to fulfill various enclave workloads

参考文献
[1] https://www.usenix.org/sites/default/files/conference/protected-files/atc22_slides_jia_yuekai.pdf


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达,可以在下面评论区评论

×

喜欢就点赞,疼爱就打赏