前几天读完了ASPLOS ’22上的《Adelie: Continuous Address Space Layout Re-randomization for Linux Drivers》论文, 特此总结如下。
这个工作通过动态重随机化内核模块的虚拟地址来缓解代码复用攻击(如ROP)。该工作首先解决了给内核模块开启PIC的一些工程问题。然后, 该工作将每个内核模块拆成两部分, 可移动的部分和不可移动的部分。不可移动的部分以及内核的核心代码的地址是确定的, 而可移动的部分的地址是可以动态重随机化的。该工作在这两部分分别加入了两张GOT表, 一张用于记录模块(包括两部分)内部的可移动的符号, 另一张用于记录整个系统中不可移动的符号。其中, 前一个GOT表需要在模块(可移动的部分)每次重随机化时更新。此外, 该工作将模块的每个函数放置在可移动的部分, 并为每个函数在不可移动的部分增加一个wrapper函数来随机化栈以及调用到函数的实际实现。其他模块对该模块函数的调用都需要通过GOT来调用这个wrapper函数。这样, 攻击者就难以获得模块的可移动部分的(gadget)代码地址了。
发表评论