华为工程师 Petr Tesarik 向 Linux 内核提交了添加“沙盒模式”(SandBox Mode, SBM)的新补丁——用于提升内存安全性。
https://lore.kernel.org/lkml/20240214113035.2117-1-petrtesarik@huaweicloud.com/
Petr Tesarik 在邮件写道:
沙盒模式的最终目标是在只允许访问预定义地址内存的环境中执行本地内核代码,因此潜在漏洞无法被利用,或不会对内核的其他部分产生影响。
该补丁为内核添加了沙盒模式的 API 和独立于操作系统的基础架构。它在所有输入和输出数据的 vmalloc() 副本上运行目标函数。由于有了保护页,仅此一项就能防止一些越界访问。
根据文档的描述,沙盒模式的主要目标是通过分解内核来减少内核代码中潜在内存安全错误的影响。SBM API 支持在隔离的执行环境中运行每个组件,特别是用作输入的内存区域和 / 或输出与内核的其余部分隔离,并被保护页包围。
在实现必要的 arch hook 的架构上,沙盒模式利用硬件分页设施和 CPU 特权级别来强制仅使用这些预定义的内存区域。有了 arch 的支持,SBM 还可以从 protection violation 进行恢复。这意味着 SBM 可强制终止沙盒,并向调用者返回错误代码(例如-EFAULT
),以便执行可以继续。这种实现提供了强隔离机制。