论文分享 | BYOTEE: 用FPGA搭建属于你自己的TEE
论文名称:BYOTEE: Towards Building Your Own TEE Using FPGA
论文链接:https://arxiv.org/abs/2203.04214
本文由济南大学信息科学与工程学院2021级硕士研究生王豪总结
现有TEE存在的问题
1.现有的TEE体系结构是专有的,只适用于特定的计算体系结构,用户需要盲目相信它们,无法验证设计的正确性或确认硬件状态的真实性。
2.TEE不能根据不同应用程序进行定制化,且软件TCB中包含了不必要的和有缺陷的外设驱动程序,容易受到恶意外设输入的影响。
3.TEE以分时轮换方式与REE共享处理器核心,会耗费大量CPU周期并容易受到缓存侧信道攻击,使得TEE安全性承诺直接破坏。
4.这篇文章还列出了TrustZone存在的其他限制和问题。
5.还提到了尽管存在一些基于软件或硬件的解决方案,但还存在一些问题无法解决,因此需要进一步的发展和改进。
FPGA优势
1.FPGA设计中,门阵列可以由用户使用硬件描述语言进行配置,具有可重构性、性能高、开发周期快等优点,市场上有广泛的产品范围,从嵌入式系统到数据中心设备均可使用。
2.基于FPGA的专用加速器广泛应用于深度卷积神经网络、递归神经网络、加密算法等。
3.可以在FPGA上设计和实现自己的软核CPU或定制现有的开源或专有的模块。
4.由于可验证片上系统资源的FPGA实现,因此用户无需盲目信任整个CPU,只需要相信FPGA配置模块和验证器就可以了。
现有工作
1.解决现有TEE的一个或多个限制的方案。
2.基于虚拟机管理程序的可信路径架构采用不同的方法来实现TEE和REE之间的隔离、时间共享和访问控制等目标。
3.BYOTEE提供给用户额外的安全功能,并实现了SSA加载、飞地间通信等硬件IP,具有信任引导和证明等安全功能。
4.BYOTEE还受到其他隔离执行环境解决方案的启发以及其他基于管理程序的保护解决方案。
BYOTEE方案
1.利用硬件和软件协同设计框架,建立一个可信执行环境(BYOTEE)的商品FPGA设备,实现多个安全性相同且自定义的飞地以执行安全敏感应用程序(SSA)。
2.通过可配置固件组件提供必要的软件库,例如,libc和硬件抽象层(HAL),构建最小的软件TCB,分离不同的硬件和软件组件,隔离软件故障并为FPGA提供内存保护。
3.通过消除处理器时间共享,防止高速缓存侧信道攻击和冷启动攻击等攻击向量。
4.BYOTEE还提供引导信任和证明硬件实现完整性的机制。在Xilinx SoC FPGA上实现了概念验证BYOTEE基础设施和工具链,成功运行四个示例SSA,并表现出较好的安全性和性能。
SOC FPGA介绍
1.硬件构成
a)SoC FPGA的结构中包含的核心CPU系统,FPGA和其他集成片上存储和高速通信接口。
b)FPGA是由可配置逻辑块、逻辑单元、自适应逻辑模块(ALMs)、查找表(LUTs)、触发器、开关矩阵、进位逻辑、BRAM和用于接口的输入/输出块(IOB)等组成。
c)在FPGA上可以配置一个比特流,用Verilog、VHDL等硬件设计描述语言进行编程。
d)一些安全相关的模块,如非易失的电池支持RAM (BBRAM)、一次性可编程电子保险丝(eFUSE)和密码加速器等连接到硬核系统和FPGA上。
2.开发与工作流
a)在启动时,设备会从硬连接的引导ROM开始验证、解密并从支持的接口(如SD卡、JTAG等)加载第一阶段引导加载器(FSBL),然后通过SSBL (Second Stage Boot Loader),例如U-Boot,并将硬核系统的控制权交给SSBL,在硬核CPU上验证并引导操作系统。
b)除了启动时配置之外,一些fpga还可以在运行时编程,例如通过DevC和处理器配置访问端口(PCAP)接口来重新配置整个或部分FPGA。此外,提到了为了实现安全可信的启动,可以在设备上生成唯一的AES和RSA密钥,并编程到设备上的持久安全存储如eFUSE阵列,这些密钥用于加密和签名在开发阶段运行在软核CPU上的比特流和固件(如ELF格式)。
模型
1.系统模型
a)系统模型的设定,包括DRAM可以连接到硬核系统和FPGA,外设可以连接到FPGA,同时硬核系统上的软件不能窃听或篡改FPGA与外设之间的数据。
b)另外,假设硬核系统和DMA主机不能将内容转储到FPGA中,并假设引导是安全的或可信的,在引导时进行完整性检查后,将软件映像加载到硬核系统,将比特流和固件加载到FPGA。
c)此外,假设密码算法是安全的。
2.威胁模型
a)假设对手可以在运行时完全控制硬核系统的软件系统,从而可能破坏用户在基于trustzone的系统的安全世界中开发的Untrusted Applications(UA)、内核甚至特权软件。
b)被破坏的软件可以通过共享的DRAM区域向固件和SSAs发送任意数据,也可以发送到Enclave硬件引脚,例如中断。因此,一个Enclave中的固件和SSA可能在运行时被破坏。
c)攻击者还可以通过冷启动攻击来转储DRAM中的内容。
3.部署模型
a)BYOTEE的部署和关键管理模型。BYOTEE并不旨在解决特定的部署和密钥管理模型,而是提供构建安全系统所需的机制。
b)在密码层,假设每个设备都有一个设备密钥,例如AES(kd)、RSA(skd, pkd),用于加密/解密和签名/验证软件图像、比特流和固件。
c)除此之外,开发人员还使用开发人员密钥来加密和签署SSAs,并且设备所有者需要将设备键编程到一次性可编程的eFUSE中,或由制造商预先编程,然后将加密的固件、位流和已加密的开发人员公钥发送给云提供商。如果需要更新密钥,则SSA开发人员将其公钥发送给固件开发人员进行注册或更新密钥。
d)本地部署和云部署的示例解决方案略有不同,但本质上类似,其中本地部署需要设备所有者和固件开发人员进行交换,并直接将设备键编程到设备中,而云部署则将设备密钥编程到设备中,并通过网络发送加密的内容和开发人员公钥。
BYOTEE架构
1.BYOTEE设计目标
a)提供物理隔离的执行环境,用户可以使用BYOTEE帮助实现他们的应用程序所需的精确的、甚至正式的验证硬件和软件。
b)提供通用执行环境,类似于SGX和TrustZone的通用执行环境,而不是特定于应用程序的加速器。
c)同时提供多个隔离的执行环境,并保证在每个环境中运行的SSA的保密性和完整性。
d)为执行环境提供物理执行隔离,通过专用的CPU和硬件资源隔离REE和彼此。通过物理隔离,BYOTEE降低了在CPU共享TEE中普遍存在的侧通道攻击的风险。
e)每个Enclave的硬件TCB应该是可定制的,允许最小的TCB只包含SSA内部运行所必需的硬件,而不包括系统上的其他硬件。
f)将SSA内部和外设之间的通信路径与硬核系统和其他Enclave隔离开来,防止基于软件的窃听和篡改。
g)Enclave-to-Hardcore系统和Enclave内部通信。Enclave中的SSA应该能够与核心系统和其他Enclave上的软件模块通信。飞地之间的通信应该与核心系统和其他不参与的飞地隔离开来。
h)最小的软件TCB。服务于SSA的固件应该只包括SSA执行所必需的内务库和驱动程序,而不包括其他软件。
i)远程认证机制。BYOTEE应该提供支持复杂协议的机制,以验证一个Enclave的硬件和软件堆栈的完整性,包括引导加载程序、比特流、固件、SSAs及其对远程验证器的输入和输出。
j)易于使用。BYOTEE应该易于使用,特别是对于没有硬件编程经验的软件开发人员。开发BYOTEE SSA不应该比开发具有相同功能的Linux应用程序花费更多的时间和精力。
2.BYOTEE概述
a)BYOTEE框架的架构和工作流,包括HardwareBuilder、Firemware和SSAPacker。在开发阶段,HardwareBuilder和FPGA供应商提供的合成器生成比特流文件用以配置FPGA,同时开发者通过编写SSA源代码来定制固件,并由SSAPacker加密、签名并打包成受保护的SSA。
b)在引导时,比特流被加载到FPGA上创建了多个安全区,并且相应的固件开始运行。BYOTEE中每个飞地具有其自己的硬件集合以及软核CPU和外围设备,并与硬核系统和其他飞地隔离。
c)除了提供中断和共享物理存储器区域与硬核系统通信外,BYOTEE还提供基于软核CPU中断的远程证明机制,用于证明安全区的完整性。BYOTEE为开发人员提供了易于使用的工具链,提高了可用性,并减少了配置错误的机会。
3.为Enclave定制TCB硬件
a)BYOTEE的HardwareBuilder组件,该组件采用开发人员指定的Json格式的硬件描述作为输入,并输出脚本,以促进通过硬件描述语言(如Verilog或VHDL)生成比特流文件的步骤。每个安全区的硬件描述包括软核CPU及其配置、调试IP、主BRAM存储器地址和大小、与硬核系统共享的DRAM的地址和大小、与其他飞地共享的BRAM的地址和大小以及连接的外围设备。HardwareBuilder将BRAM的连续地址空间分配给每个飞地,并自动连接硬件组件。
4.在Enclave中引导信任
a)BYOTEE支持在静态和动态环境下提供信任引导,并提供了构建信任引导路径的机制。静态引导示例依赖于安全或可信引导,通过测量和解密来初始化硬核系统和FPGA,并使用设备密钥保护开发者密钥。测量值和开发者密钥用于生成证明报告。动态引导机制需要可信软件模块使用设备密钥和访问端口接口来重配置FPGA,并可以与TrustZone安全世界操作系统结合使用以提供更好的安全性保障。
5.在Enclave中运行SSA
a)创建一个安全执行区(SSA),并执行在其中的程序。通过在固件中初始化软核CPU和其他组件,以及在共享DRAM区域中使用SSA执行块(SEB)格式来实现与硬核系统之间的双向数据传输。通过引发飞地内软核CPU上的中断,利用LdExec* 中断服务原语来加载并执行SSA。其中,固件对BRAM(Block RAM)的测量是关键的,以确保在验证完整性后正确加载解密后的SSA,并将输出数据写回到BRAM上,并由固件复制到DRAM中,最终清除所有与SSA相关的区域并等待新请求的处理。
b)该方案还支持顺序执行多个SSA或重复执行相同的SSA,无需重新配置FPGA,只需重新初始化飞地即可。
6.执行前和执行后的认证机制
a)BYOTEE提供的两种证明机制,即执行前和执行后的证明。使用这些机制可以验证加载SSA所需的代码和输入的完整性,以及输出数据的完整性。
b)在执行前证明中,验证器发送密码随机数并由固件复制到BRAM。在加载完SSA并将其部分加载到正确的地址后,固件计算测量PreExecAtt,并将其复制到DRAM中。
c)在执行后证明中,固件还复制来自Vrf的Chal到BRAM。当SSA完成执行后,固件计算测量PostExecAtt,并将其复制到DRAM中。注意,固件可以使用设备密钥、开发者密钥或其他共享密钥来计算测量,具体取决于场景和证明协议细节。
7.多输入SSA
a)在硬核系统上的UA持续向SSA发送输入数据的情况下,UA使用两种机制来通知固件和SSA新数据可用,并解释了机制的工作方式。
b)第一种机制适用于支持优先级中断的软核CPU,UA可以引发NewData中断,并在SSA完成执行后将输入数据从DRAM复制到BRAM,并再次将控制权交给SSA。
c)对于没有优先级中断的软核CPU,固件使用全局变量来指示输入区域是否有新数据可用以与飞地上的SSA同步。
8.(可选)多个受保护的SSA会话
a)将多个合格SSA的执行与适当的硬件重新初始化,并定义了两个基于中断的服务原语:SusExp和ReExec。
b)当引发SusExp中断时,固件复制SSA上下文到BRAM,并使用开发者密钥对保存的SSA上下文和所有SSA的可写存储器区域进行加密。加密的blob被放置在SEB输出区域以供UA检索。然后固件清理BRAM并等待新的请求。
c)当引发ReExec中断时,固件从SEB输入区域检索加密的blob,并在成功的签名验证后,将解密的存储器内容加载到正确的位置,恢复寄存器,并且恢复SSA执行。此过程包括刷新高速缓存和重置所有存储器等适当的硬件重置操作。
与TA通信
1.BYOTEE应用
a)计算应用。BYOTEE保护计算应用免受核心系统或其他飞地的代码和数据泄露、内存损坏和缓存侧信道攻击等威胁。BYOTEE提供一个AES加速器SSA-1作为计算应用的例子。UA将明文或密文放在SEB中,并通知SSA-1进行加密或解密操作。当加密或解密完成时,SSA-1将输出放回SEB上。
b)外围交互应用。信息物理应用程序通过传感器读取数据、做出决策并控制执行器。BYOTEE在保护计算应用免受攻击的同时,也保护外围设备与SSA之间的路径免受攻击。BYOTEE还开发了一个LED切换器SSA(SSA-2),它使用一个按钮和一个LED。当按下按钮时,SSA-2切换LED的颜色。该按钮和LED只连接到SSA-2的飞地,无法被核心系统或其他飞地访问。
c)外围和核心系统交互应用。外围和核心系统交互应用程序不仅控制一些外围设备,而且还不断地与UA进行交互。开发了一个具有数字版权管理的音乐播放器系统,可以为艺术家和录音棚保证歌曲的机密性、完整性和真实性。这意味着,i)歌曲不能数字公开,ii)歌曲不能修改,iii)只有受保护的歌曲才能播放。
d)分布式应用。分布式应用程序由同时运行在不同enclave上的多个相互通信的SSAs组成。SSAs通过共享的BRAM区域进行通信。BYOTEE不仅保护每个SSAs,还保护它们的通信不受核心系统和其他飞地的影响。开发了一个应用程序,该应用程序使用两个SSA顺序处理数据。SSA-1首先接收来自UA的数据,并对数据进行解密,然后输出到共享的BRAM而不是DRAM,而第二个SSA (SSA-4)接收SSA-1的输出,并进行SHA512 HMAC签名验证
2.开发人员的角度
a)创建由一个或多个飞地组成的硬件。开发人员可以使用HardwareBuilder设计和创建硬件,并按照清单1中所示的JSON格式描述每个飞地的属性,例如所拥有的软核CPU的类型和功能,以及每个飞地与外部设备的连接方式等。HardwareBuilder会根据这些描述生成TCL脚本文件和输出位流文件,用于生成并运行硬件。开发人员可以选择不同的操作模式,包括生成位流、位流与固件结合等,来满足不同的需求。
b)创建引导映像。在HardwareBuilder之后,开发人员使用带有开发人员定义的引导映像格式和受保护的FPGA映像的引导加载器创建工具来创建可部署的二进制文件
c)通过BYOTEE固件来创建SSAs和UAs。SSA具有自己的main函数并被作为独立的应用程序开发,可以使用C或其他编程语言进行编写。将SSAs静态链接到固件上,并使用BYOTEE提供的链接器脚本为其代码和数据段预留物理内存区域。由于SSAs无法直接使用libc函数,因此固件提供了HAL接口,并使用特定于系统的底层机制(例如BYOT_MemCpy)来实现在存储器之间移动数据。UAs是非特权应用程序,可在硬核系统的操作系统上执行,并与FPGA上运行的固件和SSA使用UIO接口进行通信。最后,开发人员可以使用SSAPACKER生成受保护的SSA二进制文件。
3. 安全性分析以及限制性
1.恶意和被妥协的硬核系统软件
a)飞地的读写操作。尽管核心系统软件不是BYOTEE中TCB的一部分,但攻击者即使破坏了该软件也无法访问enclave硬件资源上的数据,因为它们受到隔离地址空间的保护。此外,在构建时,SSA代码和数据被加密以保护其机密性。EnclaveHardcore系统的通信是基于中断和共享DRAM的,并通过复杂的软核处理器中的优先级中断来防止恶意硬核系统软件引发的DoS攻击。
b)重新配置FPGA。BYOTEE的安全或可信启动过程,即trust的静态根进程,确保了在启动时安全加载位流来配置FPGA。如果硬件支持运行时重新配置,则另一种动态信任根方法可确保受损的硬核系统软件无法加载攻击者控制的比特流来重新配置FPGA
2.被妥协的固件和SSA。当固件和SSA在运行时被硬核系统软件发送的不可信输入破坏时,飞地软件层可能会暴露在其地址空间中存储的信息,包括BRAM上的数据和来自外围设备的数据。但是,它无法从其他飞地的外围设备或BRAM读取数据,因为它们位于不同的地址空间并受到隔离保护,从而将攻击限制在受损的飞地内部。
3.硬件IP核与恶意的外部设备。无法加载恶意硬件IP,因为位流在加载前由受信任的开发人员签名并验证。即使外围设备是恶意的并且发出恶意DMA请求以访问敏感存储器区域,它们也会被限制在它们被分配到的飞地中。因此,恶意外围设备只能造成有限的损害。
4.冷启动攻击。虽然DRAM中存储的大部分数据被加密或不需要保护,但可以使用冷启动攻击转储SEB的输入和输出字段。然而,开发者密钥、明文SSA等敏感数据被放置在飞地的BRAM上,而对BRAM的冷启动攻击非常困难,因为BRAM单元在配置期间被硬件初始化,在未初始化情况下也很快衰减,且无法物理取出,所以攻击者必须绕过软件保护来转储其内容。
5.侧信道攻击
a)缓存侧信道攻击。因为在SGX和TrustZone中,CPU在REE和TEE之间是分时的,所以缓存侧通道攻击是有效的。在BYOTEE中,硬核系统端的REE和飞地不分时共享任何CPU资源;因此,在REE和TEE之间没有高速缓存侧通道。
b)电源侧通道。在基于FPGA的远程电源侧信道攻击中,攻击者构建一个基于片上环形振荡器的电源监控器,对同一FPGA上的其他模块或同一SoC上的CPU进行功耗分析攻击。BYOTEE不能直接缓解这些攻击,但可以通过只加载没有电源监视器的经过身份验证和信任的飞地比特流来降低这些攻击的可能性。
c)其他侧信道攻击。当多个飞地驻留在同一个SoC FPGA上时,它们共享FPGA硬件资源。因此,有可能进行其他基于共享的侧信道攻击,如基于FPGA长线的攻击。与电源侧通道攻击类似,BYOTEE不能直接阻止这些攻击。
文章来源: SecurityLabUJN
END
热文推
3.论文分享|容忍恶意行为的联邦学习安全聚合方案——IEEE S&P 2023论文速览
荐4. 论文分享|Forward secure searchable encryption with keyed-block chain