hardware-assisted-safety

5 posts

你的 C 代码无需全面 rewrite 即可在 capability 硬件上运行

CHERI 的 hybrid ABI 让你可以逐步将 C 代码移植到 capability 硬件上。本文介绍如何编译、哪些代码会出问题,以及如何在不 rewrite 整个 codebase 的情况下修复它们。

你有一个用 C 编写的codebase,它大到无法全部用 Rust rewrite,又关键到不能任由缓冲区溢出威胁。CHERI capability 硬件承诺在 CPU 层面捕获内存安全违规,但网上一直有人说 CHERI 指针是 128 位的,而你的代码默认指针是 64 位。 好消息是,CHERI…

权能硬件没有失败。它只是提前 40 年到来。

自 1970 年代以来,硬件层面的内存安全性就已可行。以下是权能架构为何一直败给扁平内存模型,以及为什么 CHERI 终于正在改变这一等式。

70% 的 CVE 是内存安全缺陷。缓冲区溢出、释放后使用、重复释放。这类漏洞让攻击者可以从一张畸形 JPEG 一路提权到 root 访问。 自 1975 年以来,我们就知道如何在硬件层面阻止其中的大部分。剑桥 CAP 计算机使用了基于权能的寻址。卡内基梅隆大学的 Hydra…

你的 C 依赖库可能让整个进程崩溃。WebAssembly 可以阻止它。

用容器来隔离单个 C 库未免小题大做。将其编译为 WebAssembly,在 WASI 沙箱中运行,即可实现内存安全、基于权能的文件系统访问和崩溃隔离,无需 Docker。

C 库内部的一次空指针解引用就可能导致整个应用程序崩溃。如果该库负责解析用户输入、解压图像或处理网络协议,那么一个畸形的数据包就足以引发崩溃。容器确实能解决这个问题,但仅为一个依赖项就启动 Docker,无异于为盆栽雇佣保镖。你需要的是没有额外开销的隔离。 WebAssembly 加上 WASI…

你的手机已经拥有能检测内存损坏的硬件

ARM Memory Tagging Extension 和 GWP-ASan 让现代移动设备在生产环境中检测内存安全成为可能。本文介绍它们的工作原理和权衡取舍。

你的手机可以在生产环境中检测内存损坏。不是用你在 CI 中运行的完整插桩,也不是针对每一次分配。但你口袋里的硬件在几年前就已经搭载了必要的原语,而且越来越多的生产应用正在悄悄启用它们。 简而言之:AddressSanitizer 对生产环境来说太贵了。ARM Memory Tagging Extension…

缓冲区溢出之所以反复发生,是因为我们在软件层面修复它

CHERI是一种硬件扩展,它将每个指针转变为带有边界的权能。本文介绍它如何在CPU层面阻止缓冲区溢出、代价几何,以及如何在真实硬件上试用。

缓冲区溢出在CWE Top 25榜单上盘踞了二十年之久。我们拥有栈金丝雀、ASLR、DEP、控制流完整性以及内存安全语言,然而它们仍然不断出现在关键代码中。原因很简单:这些缓解措施无一不是在软件中运行的,而软件可以被绕过、被错误配置,或者干脆未被启用。 倘若硬件本身拒绝让你读取数组末尾之后的数据呢?…