皇上,还记得我吗?我就是1999年那个Linux伊甸园啊-----24小时滚动更新开源资讯,全年无休!

LLVM 合并了面向进程内沙箱防护的 x86 架构 LFI「轻量级故障隔离」目标后端

斯坦福大学研究人员长期以来一直在为LLVM开发轻量级故障隔离(LFI)编译器Pass与目标后端,以此作为实现高效原生代码沙箱防护的技术方案。此前AArch64架构的LFI目标后端已正式并入上游主线代码库,而本周x86/x86_64架构的LFI目标后端也已完成上游合入,用于支撑这类进程内沙箱能力。

轻量级故障隔离是一种基于编译器实现的高效进程内沙箱方案,既能保留现有代码的运行性能与兼容性,又能防范C、C++及汇编语言代码中的内存安全漏洞等风险。LFI的设计目标是实现「最低限度的性能开销与工程改造成本」。

LFI脱胎于斯坦福大学的相关研究,谷歌及其他机构长期关注该技术方向,希望以极低的额外成本为C/C++代码补充额外的内存安全防护能力,谷歌也已为LFI项目投入了工程研发资源。

去年发布的LFI征求意见稿(RFC)中的部分核心要点如下:

“轻量级故障隔离(LFI)旨在以最小的额外约束支持低级软件沙箱技术。LFI不追求平台独立性,而是赋予编译器和运行时最大的自由度,以利用平台特定的硬件或新颖的优化技术。同时,LFI尽量贴近现有的目标ABI和二进制约定(如ELF和Dwarf规范),仅在少数情况下(如保留寄存器)做出调整,以保持与现有代码和工具的兼容性。

我们当前的LFI(逻辑故障注入)实现同时支持ARM64和x86-64处理器。由于LFI沙箱是进程内的,沙箱上下文切换只需几十个周期,通常比基于进程的沙箱快约100倍甚至更多。
与最先进的Wasm工具链相比,LFI的接近底层方法可将沙箱开销降低3倍至10倍。在Spec2017测试中,与本机代码相比,对于完全沙箱化,它在AArch64上大约会产生7%的开销;而对于仅沙箱化写入(提供完整性但不提供保密性),则会产生2%的开销。
LFI对系统调用/库接口保持中立,因此我们能够通过使用不同的运行时来同时支持未修改的库(使用Linux系统调用接口)和设备驱动程序。”

继AArch64架构的LFI目标后端正式并入LLVM上游主线代码库后,随着本次面向LLVM 23版本的PR(拉取请求)完成合并,x86_64架构的初代LFI目标后端也已正式落地。

LLVM 合并了面向进程内沙箱防护的 x86 架构 LFI「轻量级故障隔离」目标后端

后续LFI技术的演进方向、最终能获得多大范围的落地采用,以及它在为现有C/C++代码提供额外内存安全防护时能展现出多强的鲁棒性,都值得持续关注。

转自 LLVM Merges x86 LFI “Lightweight Fault Isolation” Target For In-Process Sandboxing – Phoronix