今天的文字编辑工作是在CHERRY经典款上完成的,和主题很契合)
我们的阅读推荐栏目今天要介绍的是一系列研究工作。这一系列工作始于剑桥大学研究人员在2015 ASPLOS上发表的论文 Beyond the PDP-11: Architectural support
for a memory-safe C abstract machine 和在同年IEEE S&P上发表的论文 CHERI: A Hybrid Capability-System Architecture for Scalable Software Compartmentalization,,并在随后的时间里面得到了微软和ARM的支持;在2019年发表的研究报告 An Introduction to CHERI 中,进一步提出了 Capability Hardware Enhanced RISC Instructions 这一安全设计并形成了一整套基于CHERI
的安全体系。2023年2月6日,微软网站上公布了最新的技术报告 CHERIoT: Rethinking security for low-cost embedded systems 发布(虽然现在没人关心这个,大家只知道ChatGPT)。下面我们就带大家去了解一下CHERI
安全体系。
简单总结一下,CHERI
是为了解决代码内存安全问题,从硬件设计层面出发的一种解决思路。和Rust这种动辄号称要改写整个上层软件的解决方法不同,CHERI
首先只是扩展了已有的 Instruction-Set Architecture 也就是我们常说的ISA,从硬件层面上支持更灵活的软件隔离(compartmentalization)和内存保护。有了CHERI
支持,C/C++代码无需做太多改动就可以实现更好的内存安全。
想要了解CHERI
,最好的入门资料当然是2019年公布的技术报告 An Introduction to CHERI:
https://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-941.pdf
为了实现内存安全,CHERI
对内存地址的表示进行了扩展,使用了更多的metadata来记录相关的信息,这样在运行期就可以实现较为严格的安全检查。
由于传统的硬件体系结构,特别是在microarchitecture层面上并没针对内存地址的metadata(或者说tag)的考虑,因此CHERI
体系首先需要对当前的CPU和内存模型进行更改:
目前CHERI
已经在主流的ISA上得到了初步实现:
有了CHERI
在底层的支持,我们过去这几年经常读到的各种关于软件模块化和隔离的工作,都可以利用CHERI
提供的硬件来做(想想Intel MPK催生了多少论文,大家赶紧把CHERI
用起来)
当然,CHERI
一个非常吸引人的特性在于项目组实现了一整套完整的软件栈(software stack),包括:
-
CHERI Clang/LLVM/LLD
-
CHERI GDB
-
CheriFreeRTOS
-
CheriOS microkernel
-
CHERI Hafnium(一个hypervisor)
-
CheriBSD kernel
等等,看上去是不是非常的fancy!此外,CHERI
社区还公布了相关的开指南:
CHERI C/C++ Programming Guide: https://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-947.pdf
关于CHERI
体系的另一篇比较综述性质的文章 Redesigning Hardware to Support Security: CHERI 来自USENIX官方网站,这篇发表于2022年的文章更加简明扼要地总结了CHERI
从硬件层面上是如何为软件安全提供帮助的:
https://www.usenix.org/publications/loginonline/redesigning-hardware-support-security-cheri
除了基本的概念,大家可能也很关心CHERI
在实际应用中的安全性到底如何,微软MSRC的安全研究人员在2021年Blackhat上做了一个关于的CHERI
的安全性分析的报告:
https://i.blackhat.com/USA21/Wednesday-Handouts/us-21-Security-Analysis-Of-Cheri-Isa.pdf
在这个报告中,研究人员指出,尽管CHERI
能够比较好的检测出内存越界操作,但像更复杂的内存安全问题(例如UAF、类型混淆、堆栈未初始化等)仍可以被利用。作者针对CheriBSD(一个基于CHERI构建的FreeBSD原型)的研究表明,引入CHERI
之后,由于增加了capability的限制,传统上任意内存读写漏洞的攻击能力大为下降,但是仍然有一些特定的代码可以帮助攻击者获取相关的capability,用于绕过限制实现漏洞利用:
有意思的是,Rust社区也很关心CHERI
,大家也在讨论,如果有了这一套底层硬件的支持,是否要革掉我们Ruster的命呢?感兴趣的读者可以去看看下面的帖子:
https://lobste.rs/s/haorfd/cheriot_rethinking_security_for_low_cost
https://lobste.rs/s/knclgq/what_s_smallest_variety_cheri
CHERI
这套体系一个非常吸引人的地方在于,它得到了ARM的大力支持,弄出来了很多硬件原型,其中比较有名的是叫做Morello的硬件平台原型系统,这套系统在看得见摸得着的芯片上真正实现了扩展ISA,这样开发人员就能实际测试评估到底CHERI
体系能否在真实世界里面使用起来了。ARM还提供了大量相关参考资料,感兴趣的研究人员只要访问:
https://www.arm.com/architecture/cpu/morello
就可以获取海量的信息了!
最后,当然是要讲一下2月6日刚刚发布的最新技术报告 CHERIoT: Rethinking security for low-cost embedded systems
https://www.microsoft.com/en-us/research/uploads/prod/2023/02/cheriot-63e11a4f1e629.pdf
在这篇技术报告中,研究人员基于CHERI ISAv8,实现了一个叫做CHERIoT
的RISC-V extension,从这个名字上就看得出来,CHERIoT
是为IoT系统准备的,具体地,作者搞出来了一套CHERIoT RTOS作为trusted computing base(TCB),然后定义了一系列的编程语言扩展和ABI接口,最终希望在低功耗嵌入式系统上实现高效的compartmentalization~
CHERI
这个设计已经发展了接近10年的时间,社区逐渐扩大,也有软件和硬件巨头支持,我们衷心希望在未来我们都能用上更为安全的硬件ISA,让那些搞内存安全(挖漏洞)的研究人员全部失业!
原文始发于微信公众号(安全研究GoSSIP):G.O.S.S.I.P 阅读推荐 2023-02-08 CHERI