这是由达姆施塔特工业大学的Wang Jianqiang等人发表在DAC’22的文章。它基于云端的TEE场景,提出了一种支持对enclave中VM实现强隔离,支持在服务器间实时迁移和安全I/O的RISC-V TEE。
一、前言
本文认为当前的云端TEE在以下三个方面有缺陷:完全的反向兼容,安全I/O和实时迁移。
对于前两点,本文考虑程序开发者无法使用传统的工具链开发基于TEE(比如SGX)的app,或者在付出大量manual effort下使用SDK。有些研究尝试把这些legacy app直接port进enclave,但它们仍然有兼容性和可扩展性问题。而现在的一些TEE(比如Intel TDX, Arm CCA)尝试确保这种app层的反向兼容性,但它们不相信hypervisor,所以就要求VM做一些额外的改动(比如清理通用寄存器中的数据,实现独立的安全I/O)来实现这种设计。所以,当前云端TEE并未良好地实现反向兼容性。
对于实时迁移,这个需求是因为云端想让其硬件资源能被VM尽可能地使用。但是由于enclave中的内存不能被其他软件(包括hypervisor)访问,所以很少有TEE提供这个功能。一些工作尝试提供第三方的迁移支持,但是需要硬件扩展,或者对enclave中的app有先验知识。
由此,本文尝试在RISC-V架构上,利用RISC-V hypervisor扩展和硬件构建VirTEE,阿里解决这些问题。VirTEE允许enclave内存隔离和构建较大的enclave。由于可以构建较大的enclave,VirTEE的enclave可以运行未改动的OS和app,具有良好的反向兼容性。同时enclave里还装有一个监视器,以提供安全I/O和透明的实时迁移支持。
二、攻击模型
本文假设VirTEE硬件可信,安全监视器(运行在PL0,可配置VirTEE硬件)可信,enclave监视器(运行在enclave)可信。攻击者控制OS和app,以尝试通过side-channel或其他软件攻击等方法窃取enclave的机密信息,也可能通过外设来实现攻击。VirTEE不对抗memory-corruption攻击和DoS。
三、VirTEE设计
VirTEE的硬件实现了内存访问控制机制,并允许安全监视器提供enclave内存管理,metadata管理(例如header address,size等),远程验证源语,上下文切换。在enclave内部运行一个VM和对应的enclave监视器,并允许enclave监视器访问VM内存,以提供实时迁移和安全I/O功能。
VirTEE的工作流程如下:host会载入enclave文件和metadata,并给enclave一个CPU core。之后host告知安全监视器这个enclave已被创建,并要求安全监视器给enclave一个ID。接下来安全监视器隔离内存并验证enclave的签名。成功后安全监视器将跳转到enclave 监视器的入口点,让enclave监视器配置VM环境并最终进入VM的入口点。最后,VM可以使用enclave监视器提供的迁移和远程验证功能。
VirTEE的硬件将物理内存分成若干部分,而一些只能被安全监视器访问的寄存器就用于记录enclave的metadata。因为VirTEE使用寄存器(类似TZASC)而不是页表管理,所以它能配置很大范围的内存。为了对抗cache攻击,VirTEE给每个CPU核一个自己的L2 cache,并且在退出enclave时清理cache。
VirTEE的安全监视器运行在Machine Level,以配置VirTEE的硬件和特殊的寄存器(类似于ATF)。它会管理enclave的metadata(比如header,fingerprint,attestation key),enclave的内存(因为安全监视器可以访问所有内存,可以知道Host申请的enclave是否与其他enclave重叠),远程验证和上下文切换(检查要进入的enclave是否处于ready状态)。
Enclave监视器的功能最多,它相当于运行在hypervisor层,也就是比enclave中的VM具有更高权限的层。藉由RISC-V的hypervisor扩展,它可以管理特定enclave的I/O进程,以及直接读取VM内存和协助VM迁移到其他平台。由于这个enclave监视器十分轻量化,它的attack surface也很小。具体来说,它的管理功能如下:
(1)管理enclave内存。它阻止VM访问所有的内存,这可以通过second-level页表来实现(类似于S-2 translation)。
(2)虚拟化设备和安全I/O。通过MMIO管理对外设寄存器的访问,并且可以借助加密来确保数据安全性。在VirTEE中,作者实现了一个串行端口作为console,以及一个块设备作为外设寄存器的硬件(hard drive)。考虑到外设可以被攻击者读取(比如VM使用一块硬件的分区来作为交换空间并写入内存),传统的防御机制需要在数据写入硬件前加密。但是enclave监视器可以获取这些I/O操作,并且通过发现要写入的目标是否是分区的交换空间,来决定是否要执行加密。
(3)协助远程验证。本文将这个功能封装在enclave监视器中,以协助VM来验证其他VM是否可信。Enclave监视器将使用安全监视器的源语来完成远程验证。
(4)实时迁移服务。VirTEE将提供一个stub enclave作为迁移的target。在stub enclave中,它的enclave监视器将接收远程验证的请求,并在完成远程验证后继续VM的程序执行。整个迁移分三步:第一步,source enclave与target enclave验证并创建安全通道;第二步,source enclave监视器保持VM运行,清理second-level表的dirty bit,并迁移内存。第三步,source enclave监视器停止VM运行并检查dirty bit,而dirty page,虚拟设备的状态和等待的I/O请求将迁移到target VM上并被target enclave监视器处理。
原文始发于微信公众号(COMPASS Lab):反向兼容的RISCV TEE(DAC’22)