We present the design, implementation, and evaluation of FineIBT: a CFI enforcement mechanism that improves the precision of hardware-assisted CFI solutions, like Intel IBT and ARM BTI, by instrumenting program code to reduce the valid/allowed targets of indirect forward-edge transfers. We study the design of FineIBT on the x86-64 architecture, and implement and evaluate it on Linux and the LLVM toolchain. We designed FineIBT's instrumentation to be compact, and incur low runtime and memory overheads, and generic, so as to support a plethora of different CFI policies. Our prototype implementation incurs negligible runtime slowdowns ($\approx$0%-1.94% in SPEC CPU2017 and $\approx$0%-1.92% in real-world applications) outperforming Clang-CFI. Lastly, we investigate the effectiveness/security and compatibility of FineIBT using the ConFIRM CFI benchmarking suite, demonstrating that our nimble instrumentation provides complete coverage in the presence of modern software features, while supporting a wide range of CFI policies (coarse- vs. fine- vs. finer-grain) with the same, predictable performance.
翻译:我们提出了FineIBT的设计、实现和评估:FineIBT是一种CFI执行机制,通过对程序代码进行插装来降低间接前向传输的有效/允许目标,从而提高硬件辅助CFI解决方案(如Intel IBT和ARM BTI)的精度。我们在x86-64架构上研究了FineIBT的设计,并在Linux和LLVM工具链上实现和评估。我们的插装设计紧凑,运行时和内存开销低,并具有通用性,以支持各种CFI策略。我们的原型实现几乎没有运行时减速(在SPEC CPU2017中约为0%-1.94%,在实际应用中约为0%-1.92%),优于Clang-CFI。最后,我们使用ConFIRM CFI基准测试套件研究了FineIBT的效果/安全性和兼容性,证明我们的灵活插装在现代软件功能存在的情况下提供了完整的覆盖范围,同时支持同样可预测的性能下的各种CFI策略(粗粒度 vs。细粒度 vs。更细粒度)。