Skip to main content

SGX 当前存在的问题(截至 23 年 8 月)

· 17 min read
therainisme

在构建 SGX 应用程序时,必须考虑在使用 Enclave 时它们可能遭受的性能下降。这种性能开销主要是由于 Enclave 初始化、PRM 数据的加密/解密以及在普通代码和 Enclave 代码 (Ocall / Ecall)之间切换等因素造成的。其中一些问题与 SGXv1 有关,本文中提出的解决方案,有些已经被 SGXv2 甚至 SGX SDK 的更新所包含。

1 内存问题

在 SGX 一代中,Enclave 内部不能使用动态链接库,只能使用静态链接,不仅使初始化速度变慢,而且还使得原本仅仅 128MB 可用内存(EPC)更小了。如果 Enclave 内存不足,会频繁的进行 EPC 页面的换入换出,严重影响性能。

DynSGX1 实现了一种动态加载函数到 Enclave 内部的方法:它从编译代码中提取的连续字节序列,加载到 Enclave 的堆中,允许将函数转化为常规函数执行。还有的解决方案是在运行时更新二进制代码2,只将 Enclave 的一部分存储在受保护的内存中。

SGX 二代实现了动态内存管理(Dynamic Memory Management)3 4。可以创建较小的 Enclave,在需要时扩大它。SGX-DL5 提出了一种解决方法,允许在运行时使用热补丁更新 Enclave,无需重新启动它。在 VAULT6 的文章中,作者甚至提议拓展 PRM 的大小,最好拓展所有可用的物理内存,允许使用其它消耗更低的完整性验证手段作为补偿。

Enclave 页面在被带入 CPU 缓存时被解密,在写回 RAM 之前重新加密,这些操作也会增加内存的访问开销。EA-PLRU7 提出,加密/解密过程带来的开销可以通过缓存替换策略来降低。

Enclave 代码仅在加载时进行完整性校验,没有解决方法可以在运行时校验代码完整性或者是在加载之前提供机密性。Scanclave8 提出了一种在运行时验证 Enclave 的方法,使远程验证者能够评估 Enclave 的完整性。SGXElide9 提出,Enclave 代码的机密性可以通过将代码视为数据,并在 Enclave 启动后动态恢复机密来实现。

尽管 SGX 对内存进行了加密保护,但依然存在测信道攻击的威胁。

2 Enclave 上下文切换问题

有篇关于 SGX 性能的论文指出10,Enclave 在执行 Ocall 或 Ecall 时,这种切换的成本是系统调用切换的 35 倍。所以就有许多工作,围绕如何减少 Ocall 和 Ecall 上下文切换的开销。

SCONE11 中,使用一个共享内存区和一组线程,用于管理在 Enclave 内发出的系统调用请求。Enclave 内部的代码调度一个线程将系统调用请求放入共享内存区域的队列中,并唤醒一个外部线程来执行系统调用,然后回复请求。HotCalls12 中,它使用共享内存,将 Enclave 线程直接绑定到外部应用程序线程,在两者之间使用自旋锁机制同步通信。论文13对这个解决方案进行了拓展,它允许在单个 Enclave 的转换中执行多个 Enclave 函数。Eleos14 引入了一种内存抽象,它允许在 Enclave 内部进行分页,消除因为分页导致的 Enclave 退出,并使用在另一个应用程序线程中运行的 RPC 服务,使 Enclave 无需切换上下文即可进行系统调用。

论文15 也研究了这种 switchless 特性,作者建议在 Enclave 之外维护一个线程池来处理任何来自 Enclave 的请求。Intel SGX SDK 已经包含了对 switchless 调用的支持,且建议这个特性只用于简短的、非阻塞的、频繁调用的函数。针对何时使用 switchless 特性,论文16 也提出了一种应用级优化的使用策略。

3 数据和 Enclave 的迁移问题

SGX 保证了,使用 CPU 来确定密封密钥。如果 CPU 发生更换,Enclave 将不能再打开先前由它密封的数据。SGX 开发人员指南中也指出,在需要将密封数据迁移到另一台计算机时,必须在 Enclave 之间使用远程证明过程来完成。在需要负载平衡的多处理器环境中,数据经常在可用的处理器之间进行迁移,这肯定是一个问题。

Intel 官方提供了一种 SGX 拓展卡17,它包含三个支持 SGX 的 Xeon E3 处理器,每个处理器都有自己的本地 RAM 和完整的软件堆栈,允许应用程序跨卡的处理器拓展,以获得额外的安全内存。这篇论文18中,提出了一种使用公共密钥对数据进行封装和解密,实现异构平台间数据封装共享的方案。该解决方案创建平台组,使用认证机制来证明其可信度,使 Enclave 能够访问其组成员密封的数据。

使用 CPU 派生的加密密钥也限制了虚拟化环境中 Enclave 在不同硬件上的动态迁移。因此,Enclave 在不可信云中的安全实时迁移是一个重要的研究对象,其挑战是在遵守 SGX 认证约束的同时,保存和远程恢复 Enclave 的整个状态。论文19克服这一限制的一些方法设计硬件级别的更改。但另一篇论文20也提出了纯软件的解决方案,确保迁移密封数据和其他 CPU 安全敏感信息(如单调计数器)的同时,还保持 SGX 的安全性保证。eMotion21 提出,Enclave 的远程认证也可以建立一个安全的通信信道,用以迁移 Enclave 数据。MigSGX22 提出了 Enclave 状态迁移的方案,其中 Enclave 执行状态转储(state dump),在迁移后恢复其状态,然后恢复其执行。

4 信任路径问题

另一个问题是,用户将不可避免地必须在某些时候,向在其 Enclave 中受保护的应用程序提供数据,但是输入设备(键盘、麦克风等)没有准备好安全地向系统提供这些数据,这使得它们在达到 Enclave 之前被拦截了。注意,这种风险同样出现在输出设备中。

SGXIO23 提出了一个安全通用的通信信道,它将 SGX 的使用与传统架构相结合,以创建可靠的 Hypervisor-based 的通信信道,它可用于向任何设备发送和接收数据。BASTION-SGX24 提出了一种解决方案,将数据传输通道的安全性从蓝牙设备拓展到了 Enclave。还有的提出了另一种架构,通过在 Enclave 和设备(时钟、网络和文件系统等)之间的安全通道提供可信系统服务(TSS),并使用这篇论文25提出的可信时钟服务。

ProximiTEE26 中,SGX 远程认证也用于近距离验证,在受信任的嵌入式设备和 Enclave 之间建立安全连接,并使用 SGX Enclave 作为信任的硬件根而不是根证书颁发机构来建立 TLS 连接。TaLoS27 也提出使用 Enclave 内部连接端点代替 TLS 库的构建。许多库也在 SSL 中集成了 SGX,例如 mbedtls-SGX28Intel SgxSSL29。最后,SecureFS30 也提出了一种针对 Intel SGX 的安全文件系统,保证了数据的机密性和完整性、存储数据的新鲜性。

5 最后几句

如前几节所述,SGX 的主要问题的限制,与安全机制带来的开销有关。由于所有数据都在主存中加密,因此当数据在内存和 CPU 之间传输时,加密/解密数据需要计算成本。Enclave 指令和不可信指令之间的上下文切换也会带来开销,在某些情况下可以将其最小化。最后,缺少与 I/O 设备交换敏感数据的可信路径是一个重要的限制。关于这些问题,也有一些论文提供有用的工具和指导建议。

论文31提出了一组用于 SGX 应用程序的性能分析工具,提供了如何评估 Enclave 性能的建议。论文32提出了应用程序分区的指导方针,它考虑了可信环境中处理敏感数据的性能和安全方面。论文33还在发布/订阅用例中评估了 SGX 的性能,提供了延迟、吞吐量、处理时间和能源需求的 Benchmark。

论文34给出了在使用 Enclave 时减少开销的建议,例如小心地对应用程序进行分区,以减少复制到 Enclave 中的数据量,使 Enclave 的大小限制在 64KB,并创建一个 Enclave 池以降低初始化成本。它还考虑了应用程序所需的隔离粒度,因为更高级别的隔离,需要更多的 EPC 内存,使得创建 Enclave 的成本更高。最后,还有三篇论文35 36 37给出了 SGX 性能的 Benchmark。


  1. R. Silva, P. Barbosa, and A. Brito. 2017. DynSGX: A privacy preserving toolset for dinamically loading functions into Intel SGX enclaves. In Proceedings of the CloudCom. IEEE.
  2. S. Krieter, T. Thiem, and T. Leich. 2019. Using dynamic software product lines to implement adaptive SGX-enabled systems. In Proceedings of the VaMoS. ACM.
  3. F. McKeen, I. Alexandrovich, I. Anati, D. Caspi, S. Johnson et al. 2016. Intel software guard extensions (Intel SGX) Support for Dynamic Memory Management Inside an Enclave. In Proceedings of the HASP. ACM.
  4. B. Xing, M. Shanahan, and Rebekah L.-H. 2016. Intel software guard extensions (Intel SGX) Software support for dynamic memory allocation inside an enclave. In Proceedings of the HASP. ACM.
  5. N. Weichbrodt, J. Heinemann, L. Almstedt, P.-L. Aublin, and R. Kapitza. 2021. Experience paper: SGX-DL: Dynamic loading and hot-patching for secure applications. In Proceedings of the Middleware. ACM.
  6. M. Taassori, A. Shafiee, and R. Balasubramonian. 2018. VAULT: Reducing paging overheads in SGX with efficient integrity verification structures. In Proceedings of the ASPLOS. ACM.
  7. A. Shimizu, D. Townley, M. Joshi, and D. Ponomarev. 2019. EA-PLRU: Enclave-aware cache replacement. In Proceed- ings of the HASP. ACM.
  8. M. Morbitzer. 2019. Scanclave: Verifying application runtime integrity in untrusted environments. In Proceedings of the WETICE. IEEE.
  9. E. Bauman, H. Wang, M. Zhang, and Z. Lin. 2018. SGXElide: Enabling enclave code secrecy via self-modification. In Proceedings of the CGO. ACM.
  10. C. Zhao, D. Saifuding, H. Tian, Y. Zhang, and C. Xing. 2016. On the performance of Intel SGX. In Proceedings of the WEBIST. IEEE.
  11. S. Arnautov, B. Trach, F. Gregor, T. Knauth, A. Martin et al. 2016. SCONE: Secure Linux containers with Intel SGX. In Proceedings of the OSDI. USENIX.
  12. O. Weisse, V. Bertacco, and T. Austin. 2017. Regaining lost cycles with HotCalls: A fast interface for SGX secure enclaves. In Proceedings of the ISCA. ACM.
  13. J. Svenningsson, N. Paladi, and A. Vahidi. 2021. Faster enclave transitions for IO-intensive network applications. In Proceedings of the SPIN. ACM.
  14. M. Orenbach, P. Lifshits, M. Minkin, and M. Silberstein. 2017. Eleos: ExitLess OS services for SGX enclaves. In Proceedings of the EuroSys. ACM.
  15. H. Tian, Q. Zhang, S. Yan, A. Rudnitsky, L. Shacham et al. 2018. Switchless calls made practical in Intel SGX. In Proceedings of the SysTEX. ACM.
  16. S. Kim. 2021. An optimization methodology for adapting legacy SGX applications to use switchless calls. Appl. Sci. 11, 18 (2021).
  17. S. Chakrabarti, M. Hoekstra, D. Kuvaiskii, and M. Vij. 2019. Scaling Intel software guard extensions applications with Intel SGX card. In Proceedings of the HASP. ACM.
  18. D. Andrade, J. Silva, and M. Correia. 2022. SRX—Secure data backup and recovery for SGX applications. IEEE Access 10 (2022).
  19. J. Gu, Z. Hua, Y. Xia, H. Chen, B. Zang et al. 2017. Secure live migration of SGX enclaves on untrusted cloud. In Proceedings of the DSN. IEEE.
  20. F. Alder, A. Kurnikov, A. Paverd, and N. Asokan. 2018. Migrating SGX enclaves with persistent state. In Proceedings of the DSN. IEEE.
  21. J. Park, S. Park, B. Kang, and K. Kim. 2019. eMotion: An SGX extension for migrating enclaves. Comput. Secur. 80 (2019).
  22. K. Nakashima and K. Kourai. 2021. MigSGX: A migration mechanism for containers including SGX applications. In Proceedings of the UCC. ACM.
  23. S. Weiser and M. Werner. 2017. SGXIO: Generic trusted I/O path for Intel SGX. In Proceedings of the CODASPY. ACM.
  24. T. Peters, R. Lal, S. Varadarajan, P. Pappachan, and D. Kotz. 2018. BASTION-SGX: Bluetooth and architectural support for trusted I/O on SGX. In Proceedings of the HASP. ACM.
  25. H. Liang and M. Li. 2018. Bring the missing Jigsaw back: TrustedClock for SGX enclaves. In Proceedings of the EuroSec. ACM.
  26. A. Dhar, I. Puddu, K. Kostiainen, and S. Capkun. 2020. ProximiTEE: Hardened SGX attestation by proximity verifi- cation. In Proceedings of the CODASPY. ACM.
  27. P.-L. Aublin, F. Kelbert, D. Muthukumaran, C. Priebe, J. Lind et al. 2017. TaLoS: Secure and transparent TLS termi- nation inside SGX enclaves. Imperial College London, Te c h . Rep 5 (2017).
  28. Fan Zhang. 2018. mbedtls-SGX: A TLS Stack in SGX. Retrieved from https://github.com/bl4ck5un/mbedtls-SGX.
  29. Intel. 2018. Intel Software Guard Extensions SSL (Intel SGX SSL) Library Linux Developer Guide. Intel Corporation.
  30. S. Kumar and S. Sarangi. 2021. SecureFS: A secure file system for Intel SGX. In Proceedings of the RAID. ACM.
  31. T. Dinh Ngoc, B. Bui, S. Bitchebe, A. Tchana, V. Schiavoni et al. 2019. Everything you should know about Intel SGX performance on virtualized systems. Proc. ACM Meas. Anal. Comput. Syst. 3, 1 (2019).
  32. S. Brenner, M. Behlendorf, and R. Kapitza. 2018. Trusted execution, and the impact of security on performance. In Proceedings of the SysTEX. ACM.
  33. C. Göttel, R. Pires, I. Rocha, S. Vaucher, P. Felber et al. 2018. Security, performance and energy trade-offs of hardware-assisted memory protection mechanisms. In Proceedings of the SRDS. IEEE.
  34. A. Gjerdrum, R. Pettersen, H. Johansen, and D. Johansen. 2017. Performance of trusted computing in cloud infras- tructures with Intel SGX. In Proceedings of the CLOSER. SciTePress.
  35. M. El-Hindi, T. Ziegler, M. Heinrich, A. Lutsch, Z. Zhao, and C. Binnig. 2022. Benchmarking the second generation of Intel SGX hardware. In Proceedings of the MOD. ACM.
  36. S. Kumar, A. Panda, and S. Sarangi. 2022. SGXGauge: A comprehensive benchmark suite for Intel SGX. In Proceedings of the ISPASS. IEEE.
  37. K. Maliszewski, J.-A. Quiané-Ruiz, J. Traub, and V. Markl. 2022. What is the price for joining securely? Benchmarking equi-joins in trusted execution environments. Proc. VLDB Endow. 15, 3 (2022).