Source: https://www.usenix.org/system/files/sec22-gu-jinyu.pdf
Authors: Jinyu Gu, Bojun Zhu, Mingyu Li, Wentai Li, Yubin Xia, Haibo Chen
Download Note: https://jbox.sjtu.edu.cn/l/X19mia
Contributor: ydh
Overview
现在的SGX程序为了最大程度地减少代码重构的工作量,避免应用程序分块带来的性能损失,现在流行的编程趋势是在单个SGX Enclave中使用第三方库或者是LibOSes运行整个应用程序。但这会使得TCB膨胀并危及敏感代码/数据。一旦三方库或是LibOS中存在漏洞,都会威胁到整个enclave的安全性。
为了解决这个问题,现在存在几种解决方法:
- 将一个程序拆分并放到不同的相互独立的enclaves中(Ryoan,Panoply),这种方式利用了不同enclave之间的隔离性,但是很明显在enclave交互过程中有很大的overhead。
- 于是就有了在enclave内部的隔离(CHANCEL,Spons & shields,Occlum,Nested Enclave)。但是这些方案都在灵活性和效率上存在限制。前三种是通过对enclave内存访问指令插桩的方法(软件方法)来做强制性的边界检查来实现的。插桩的方式会带来在运行时不可忽略的开销,并且
也会增大代码的体积。Nested Enclave使用了硬件拓展的方式,将它分为inner和outer enclave,但是inner和outer之间的交互边界的overhead依然很大。
本文的工作是设计一个有效率且安全的intra-enclave隔离方案。使用Intel MPK这个硬件特性对enclave内部的地址空间做细粒度的划分以完成隔离。