CHERI Capability:如果指针自带访问范围和权限,会怎样?
TL;DR
CHERI capability 为指针加入受保护的边界和权限,使硬件能够限制内存访问。本文讲解它能缓解的漏洞类型,以及时间安全与生态迁移限制。
CHERI capability 为指针加入受保护的边界和权限,使硬件能够限制内存访问。本文讲解它能缓解的漏洞类型,以及时间安全与生态迁移限制。

在许多程序中,指针看起来只是一个内存地址。若程序拿到错误的地址、越过数组边界,或访问了不该触碰的对象,硬件和语言运行时未必能仅凭这个数字判断权限。CHERI(Capability Hardware Enhanced RISC Instructions)研究一种不同思路:让指针不仅携带位置,还携带可验证的边界与权限信息。
可以把普通地址想成一串门牌号,而 CHERI capability 更像一张带有效范围和通行权限的门禁卡。它与地址关联,但还包含边界、权限等元数据,并由硬件保护其完整性。访问发生时,处理器能够检查 capability 是否有效、目标地址是否落在授权范围内、操作是否允许。程序若试图越过对象边界或使用缺失的权限,硬件就可以阻止该访问。
这种方法针对的是常见内存安全漏洞的一大类根源,例如越界访问和不受控指针权限。它不只是给 C/C++ 加上一层事后检查,而是在指针表示和硬件执行模型层面加强约束。研究和生态还涉及操作系统、编译器、ABI、调试工具以及应用迁移,因此不是普通软件仅靠改一个编译选项就能获得全部能力。
边界必须说清楚:能力指针可以帮助限制空间访问范围,却不等于自动解决所有时间安全问题。对象已经释放后,仍需其他机制或编程约束避免使用失效引用;越权但逻辑上错误的合法操作也可能通过检查。CHERI 不能替代认证、输入校验、业务逻辑审计或完整的安全工程。
如果要把它带入现实系统,还要考虑旧代码兼容、指针和数据结构布局变化、第三方库支持、性能特征与开发工具。原型研究的结果不能直接推导为所有生产工作负载都适用。CHERI 的价值更像是建立一种硬件可执行的安全边界,让程序中的引用更难悄悄获得过大的权力。
它值得关注之处,是把“最小权限”从账号和进程层进一步带到对象引用本身:一个指针只能访问它被授予的范围,而不是仅仅因为它握有地址就能做任何事。



