DangZero: Efficient UAF Detection via Direct Page Table Access 论文阅读笔记

黎 浩然/ 25 10 月, 2023/ 内存错误检测工具/SANITIZER, 研究生/POSTGRADUATE/ 0 comments

DangZero | Proceedings of the 2022 ACM SIGSAC Conference on Computer and Communications Security

DangZero主要使用的是基于页面权限的UAF检测技术。DangZero通过基于Kernel Mode Linux构建特权后端获得直接操作页表(Page Tables)能力,使用别名页技术大幅压缩内存的使用。DangZero充分使用页表中空闲位,用于提供页表别名回收和页表压缩的元信息。

Kernel Mode Linux: Execute user processes in kernel mode

在Dangzero设计中,用户程序需要先经过中继内存分配器(overlay allocator),然后才真正地调用默认的内存分配器(glibc), 中继内存分配器在每次内存分配/释放时都会对当前对象进行页表别名(alias)的处理。

使用malloc(n)分配堆对象时,中继内存分配器主要工作:

  1. 调用原生malloc(n + sizeof(void*)),获得canonical address;
  2. 强制写入,使物理地址和canonical address在页表完成映射;
  3. 在虚拟地址上分配别名地址(alias address),并使物理地址和别名地址完成映射;
  4. 给用户程序返回别名地址,同时在别名回收器上创建元数据。

使用free释放堆对象时,中继内存分配器主要工作:

  1. 通过别名地址找到堆对象,从sizeof(void*)中找到canonical address;
  2. free(canonical address);
  3. 别名回收器上标识该位为非法。

另外DangZero为防止虚拟地址被耗尽,别名回收器(Alias Reclaimer)使用保守垃圾回收算法回收别名对象,保证该对象可以安全地重用。另外DangZero的别名回收器会压缩空闲页表项。

Share this Post

Leave a Comment

您的邮箱地址不会被公开。 必填项已用 * 标注

*
*