开篇导语:
Secure memory作为一种硬件安全保障技术,通常具有confidentiality, integrity, freshness三种特性。它允许用户进程创建一块私有内存区域,这片区域会受到软硬件技术的保护,从而使得外部的应用程序无法在未经许可的情况下访问其中的内容,甚至包括拥有特权的操作系统和虚拟机监视器(Hypervisor)也无法访问。
Persistent Memory(简称PM)可以在创建或最后一次修改它的进程退出后仍然保存内存中的数据,同时这些数据可以被进程直接使用load和store指令进行读写而不需要经过系统调用,这样PM兼顾了内存和存储的特点。但也正因如此,PM在硬件和软件两方面都存在安全性问题。
PM自从被提出以来一直被人们寄予厚望,但是PM的安全性问题导致关于PM的编程变得非常有挑战性。将secure memory和PM结合成为了一种可能的构建安全可持久化内存(secure persistent memory)的方案。同时,安全可靠的PM编程框架也是新兴的重要研究问题。
安全的持久化内存(secure persistent memory)
作者:李世阳 宫晓利(南开大学)
InfoBox:
中文名:安全的持久化内存
外文名:secure persistent memory
背景与动机:
随着云计算、边缘计算、移动计算等技术的兴起,用户的安全性保障对处理器制造厂商提出了更高的要求,先后提出了可信执行环境(TEE)、安全存储器(secure memory)、可信计算(trusted computing)等概念,以保护用户的数据安全和隐私,这些措施的必要性已经得到了学术界和工业界的一致认可。众多处理器厂商试图通过硬件扩展的方式来构建可信执行环境,安全存储器是其中关键的一环,例如Intel SGX[5],AMD SEV[6],ARM TrustZone[7],以及上海交大提出的基于RISC-V处理器的蓬莱[10]。除了在传统的CPU端,近年也不断有学者提出要将TEE或者secure memory扩展至GPU[8]和嵌入式领域[9]。
通常Secure memory的数据加密和可恢复性通过Counter-Mode Encryption和integrity tree实现。一个普遍的加密过程如下图所示,当一个块被写回内存时,seed会使用数据加密算法(例如AES)和一个只有处理器知道的密钥进行加密。
integrity tree的常见实现方式是Bonsai Merkle Trees (BMT) [11],在内存上构建一棵MAC(message authentication code)树。这个树的root永远不会off-chip,因为一个特殊的片上寄存器被用来保存它的当前值,当一个内存块被获取时,可以通过验证它的MAC链直到根MAC的值来检查完整性。由于片上根MAC包含物理内存中每个块的信息,攻击者不能修改或重放内存中的任何值。
由于复杂的保护机制使得Secure memory的性能并不理想,因此其性能优化也成为了学术界关注的重点。例如,犹他大学盐湖城分校的Meysam Taassor针对Intel SGX提出了名为VAULT[12]的版本管理手段,通过修改integrity tree的数据结构降低BMT的深度、利用压缩技术降低MAC的存储开销,提升了SGX的整体性能。Eleos[14], Hotcalls[15], CosMIX[16]则是针对现有SGX的硬件,在内存缺页、系统调用等事件处理上做出了性能优化。
相比于传统的DRAM,PM可以提供更高的存储密度,更低的静态功率,并且在支持字节访存寻址的同时,由于不需要系统调用,访问速率并不会慢很多,因此IO操作的延迟被大大降低,存储和内存之间的边界变得模糊,CPU和存储之间的性能鸿沟也显著降低。同时,基于持久化事务(persistent transaction)的数据恢复功能,使得长久的存储复杂的数据结构成为可能,且相比于传统的存储(例如文件系统)具有快速存储和快速启动的优势。当遇到程序崩溃或者系统错误时,存储在PM中的数据可以通过更新日志来快速恢复数据。2018年,英特尔Optane DC持久化内存[1]的发布标志着PM开始在主存中得以应用。
但是PM自身以及在PM上的编程存在许多安全性问题,常见的threat model包括replay attack、cold boot attack with stolen DIMM 和 bus snooping attacks,以及常见的在编程时可能出现的内存管理以及由PM自身特性引起的指针安全问题等,还必须保证对PM的日志更新不会出错以在程序崩溃时进行数据恢复。因此,logging errors, unsafe inter-pool pointers, 和pointers into closed pools成为PM编程当中最常见的三种bug。logging errors的发生主要原因有两个,一是更新过程当中系统崩溃导致数据丢失;二是针对PM的更新操作有时难以在代码中识别,比如将指向PM的指针传递给库函数,而库函数意外的修改了这个指针所指向的PM地址的值。除了常规的、易失性的堆和栈之外,PM程序还可以同时访问几个独立的PM池。PM池需要是自包含的,以保证一个PM池不会包含指向另一个PM池或易失性内存的指针,而在系统重新启动后,解引用这样的指针肯定是不安全的,这就是unsafe inter-pool pointers。而如果一个PM池被关闭,系统必须unmap它所包含的内存映射,这使得从DRAM到这个PM池的任何指针(pointers into closed pools)都是不安全的。
研究概况:
在secure persistent memory设计方面:
华中科技大学左鹏飞等人[2]提出了名为“SuperMem”的安全持久化内存设计,相比于传统的使用写回计数器缓存(write-back counter cache)的PM,SuperMem使用写透计数器缓存(write-through counter cache),从而减少了对计数器的写请求并提高了对PM的写速度。SuperMem利用位置感知的计数器写合并(CWC)方案来利用计数器存储和数据写的空间局部性以减少对计数器的写请求数量。此外,SuperMem利用cross-bank计数器存储(XBank)方案来有效地将对数据和计数器的写操作分发到不同的bank,从而采用bank级别的并行性来加快写操作。在提升效率的同时,SuperMem结合自身特点使用了改进的Counter-Mode Encryption加密方法对PM进行加密(如下图所示),通过使用全局密钥和行地址以及逐行计数器加密每条内存行。每写一次,计数器加1,对同一行进行连续的内存写操作,使用不同的密钥进行加密,提供了较高的安全性保障。
SuperMem的实现只需要在硬件层上做微小的修改,而不需要在软件层(编程语言和编译器)上做任何修改,这些对程序员和应用程序来说都是透明的。因此,最初运行在未加密的PM上的应用程序可以通过SuperMem直接运行在加密的PM上。
Alexander Freij等人则是在使用integrity tree的思想构建secure persistent memory时,把BMT扩展为BMF(Bonsai Merkle Forests)[13],显著降低了integrity tree的深度,从而加速了crash recovery过程。
在secure persistent memory的编程支持方面:
目前有许多主流编程语言都有自己的PM库,例如C++、Java、Go等,但是这些库或多或少的仍然存在内存泄漏、指针安全等问题。加利福尼亚大学圣地亚哥分校的Morteza Hoseinzadeh和Steven Swanson提出了首个用Rust构建的PM编程库Corundum [3],利用Rust语言高安全性的类型系统,让一些在C或C++中常见的错误消失,保证PM中不会出现空指针,并强制保证了所有对PM的修改都会提交到日志、内存泄漏不会出现在无环的数据结构中、对于共享的PM不会出现数据冒险,最终整体上提高了PM编程的可靠性与安全性。
目前大多数关于PM安全性的研究仍局限于PM自身,而没有定位到可持久化对象(persistent memory object,简称PMO),然而事实上攻击者可以利用PMO自身的漏洞(例如缓冲区溢出、格式化字符串等),在PM数据被使用过程中对目标进程进行恶意攻击(例如代码注入)以窃取数据或使得目标程序崩溃。由于PM中数据可以长期保存,这样的攻击可以在攻击进程生命周期结束后仍然长久的起作用,可以在目标进程还未执行前就进行“埋伏”。而自身存在安全漏洞的PMO也可能成为被攻击者利用的“跳板”来攻击其他进程,而攻击者本身得以隐藏。来自中佛罗里达大学和北卡罗莱纳州立大学的Naveed和Yuanchao Xu,对以上问题进行了详细的分析[4]。这些问题使得传统的对DRAM或者secure memory的保护策略不足以完全保证PM和PMO的安全性,虽然Corundum利用Rust严格的类型系统避免了部分问题,但也正是由于过于严格的类型系统和所有权机制,使得PM的功能受到了限制(例如由一块PM指向另一块PM或者普通内存的指针将被禁止)。因此如何在保证PM自身和PM编程安全性的同时兼顾甚至扩展其功能性仍然是值得研究的话题。
参考文献:
[1] Intel. 2015. Intel and Micron Produce Breakthrough Memory Technology. (2015).
[2] Pengfei Zuo, Yu Hua, and Yuan Xie. 2019. SuperMem: Enabling Application-transparent Secure Persistent Memory with Low Overheads. In MICRO ’52: The 52nd Annual IEEE/ACM International Symposium on Microarchitecture, October 12–16, 2019, Columbus, OH, USA. ACM, New York, NY, USA, 14 pages.
[3]Morteza Hoseinzadeh and Steven Swanson. 2021. Corundum: Statically-Enforced Persistent Memory Safety. In Proceedings of the 26th ACM Interna-tional Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS ’21), April 19–23, 2021, Virtual, USA. ACM, NewYork, NY, USA, 14 pages.
[4] N. U. Mustafa, Y. Xu, X. Shen and Y. Solihin, "Seeds of SEED: New Security Challenges for Persistent Memory," 2021 International Symposium on Secure and Private Execution Environment Design (SEED), 2021, pp. 83-88, doi: 10.1109/SEED51797.2021.00020.
[5] V. Costan and S. Devadas, “Intel sgx explained,” Cryptology ePrint Archive, Report 2016/086, 2016.
[6] D. Kaplan, J. Powell, and T. Woller, “Amd memory encryption,” 2016
[7] S. Pinto and N. Santos, “Demystifying arm trustzone: A comprehensive survey,” ACM Comput. Surv., vol. 51, no. 6, pp. 130:1–130:36, 2019. [Online]. Available:
[8] S. Yuan, A. W. Baskara Yudha, Y. Solihin and H. Zhou, "Analyzing Secure Memory Architecture for GPUs," 2021 IEEE International Symposium on Performance Analysis of Systems and Software (ISPASS), 2021, pp. 59-69, doi: 10.1109/ISPASS51385.2021.00017.
[9] D. Serpanos and D. Stachoulis, "Secure Memory for Embedded Tamper-proof Systems," 2019 14th International Conference on Design & Technology of Integrated Systems In Nanoscale Era (DTIS), 2019, pp. 1-4, doi: 10.1109/DTIS.2019.8735073.
[10] InProceedings (273705) Feng, Erhu / Lu, Xu / Du, Dong / Yang, Bicheng / Jiang, Xueqiang / Xia, Yubin / Zang, Binyu / Chen, Haibo. Scalable Memory Protection in the PENGLAI Enclave.
2021-07 15th USENIX Symposium on Operating Systems Design and Implementation (OSDI 21) USENIX Association p. 275-294
[11] Brian Rogers, Siddhartha Chhabra, Milos Prvulovic, and Yan Solihin. 2007. Using Address Independent Seed Encryption and Bonsai Merkle Trees to Make Secure Processors OS- and Performance-Friendly. 40th Annual IEEE/ACM International Symposium on Microarchitecture (MICRO).
[12] Meysam Taassori, Ali Shafiee, and Rajeev Balasubramonian. 2018. VAULT: Reducing Paging Overheads in SGX with Efficient Integrity Verification Structures. In ASPLOS ’18: 2018 Architectural Support for Programming Languages and Operating Systems, March 24–28, 2018, Williamsburg, VA, USA. ACM, New York, NY, USA, 14 pages.
[13] Alexander Freij, Huiyang Zhou, and Yan Solihin. 2021. Bonsai Merkle Forests: Efficiently Achieving Crash Consistency in Secure Persistent Memory. In MICRO’21: 54th Annual IEEE/ACM International Symposium on Microarchitecture (MICRO ’21), October 18–22, 2021, Virtual Event, Greece. ACM, New York, NY, USA, 14 pages
[14] M. Orenbach, P. Lifshits, M. Minkin, and M. Silberstein, “Eleos: Exitless OS Services for SGX Enclaves,” in Proceedings of the Twelfth European Conference on Computer Systems. ACM, 2017, pp. 238–253
[15]O. Weisse, V. Bertacco, and T. Austin, “Regaining lost cycles with hotcalls: A fast interface for sgx secure enclaves,” in ACM SIGARCH Computer Architecture News, vol. 45, no. 2. ACM, 2017, pp. 81–93
[16] M. Orenbach, Y. Michalevsky, C. Fetzer, and M. Silberstein, “Cosmix: A compiler-based system for secure memory instrumentation and execution in enclaves,” in 2019 USENIX Annual Technical Conference (USENIX ATC 19). Jul. 2019, pp. 555–570.
计算机术语审定委员会(Committee on Terminology)主要职能为收集、翻译、释义、审定和推荐计算机新词,并在CCF平台上宣传推广。这对厘清学科体系,开展科学研究,并将科学和知识在全社会广泛传播,都具有十分重要的意义。
术语众包平台CCFpedia的建设和持续优化,可以有效推进中国计算机术语的收集、审定、规范和传播工作,同时又能起到各领域规范化标准定制的推广作用。
新版的CCFpedia计算机术语平台(http://term.ccf.org.cn)将术语的编辑运营与浏览使用进行了整合,摒弃老版中跨平台操作的繁琐步骤,在界面可观性上进行了升级,让用户能够简单方便地查阅术语信息。同时,新版平台中引入知识图谱的方式对所有术语数据进行组织,通过图谱多层关联的形式升级了术语浏览的应用形态。
主任:
刘挺(哈尔滨工业大学)
副主任:
王昊奋(同济大学)
李国良(清华大学)
主任助理:
李一斌(上海海乂知信息科技有限公司)
执行委员:
丁军(上海海乂知信息科技有限公司)
林俊宇(中国科学院信息工程研究所)
兰艳艳(清华大学)
张伟男(哈尔滨工业大学)