BUDAlloc 中文解读

《BUDAlloc:通过解耦内核与虚拟地址管理来防御“释放后使用”漏洞》

这篇论文介绍了一种名为 BUDAlloc 的新型内存分配器,旨在高效地检测和防御“释放后使用”(Use-After-Free, UAF)这一严重的安全漏洞。

它的核心思想是 “用户态和内核态协同设计”,将虚拟地址的管理权从内核解耦到用户态分配器,同时利用 eBPF 技术定制内核的缺页中断处理程序。这种设计使得 BUDAlloc 能够在不修改应用程序二进制文件的情况下,实现了性能、内存开销和漏洞检测能力之间的出色平衡。

1. 背景:UAF漏洞与现有防御技术的挑战

什么是UAF漏洞?

当程序释放了一块内存后,如果仍然保留着指向这块内存的“悬空指针”,并在之后通过这个指针再次访问这块已被释放的内存时,就会发生UAF漏洞。攻击者可以利用这一点来读取敏感信息或执行恶意代码。

什么是一次性分配器(OTA)?

OTA的基本原理是:分配过的虚拟地址永远不会被重新用于新的分配请求。这样,即使程序中存在悬空指针,它也无法再访问到任何有效的、被重新分配的数据,从而使UAF攻击失效。

现有OTA方案的困境(“语义鸿沟”问题)

为了避免巨大的内存浪费,现代OTA普遍采用“虚拟地址别名”(Virtual Aliasing)技术,即多个内存对象共享同一个物理内存页,但每个对象都有自己独立的、一次性的“别名”虚拟地址。

这带来了一个核心挑战,论文称之为 “语义鸿沟” (Semantic Gap):用户态的分配器知道哪个“别名地址”对应哪个“真实地址”,但内核对此一无所知。如何跨越这道鸿沟,是所有OTA设计的关键,并直接影响其表现:

2. BUDAlloc 的核心设计与原理

BUDAlloc通过一种全新的“用户态-内核协同设计”方法,巧妙地解决了上述问题。

设计核心:分离与协同

  1. 管理权分离:BUDAlloc 将地址管理一分为二。用户态分配器 负责管理 虚拟地址的布局(制定策略),而 内核 则保留对 物理地址的管理 和最终的页表映射权(执行机制)。
  2. eBPF作为桥梁:BUDAlloc 使用 eBPF (extended Berkeley Packet Filter) 技术,向内核中安全地注入一个 自定义的缺页中断处理程序
  3. 共享元数据:用户态分配器和内核的eBPF处理程序之间共享一个Trie树结构的元数据,其中记录了“别名地址”到“规范地址”的映射关系。

工作流程

3. BUDAlloc 的主要优势

4. 实验评估结果

结论

BUDAlloc通过创新的“用户态-内核协同设计”,并巧妙利用eBPF技术,成功地打造了一个实用、高效、兼容且安全的UAF防御方案。它在性能、内存使用、可扩展性和漏洞检测能力之间取得了前所未有的平衡,为解决长期存在的UAF问题提供了一个极具前景的实践方向。

Defeating Use-After-Free Bugs.pdf
https://github.com/casys-kaist/BUDAlloc/tree/main