Google开源C/C++函数库沙盒项目Sandboxed API

Google对外开源了Sandboxed API项目,Sandboxed API能够自动为C/C++函数库产生沙盒,在热门软件函数库产生可重用且安全的功能实例,以保护剩余软件基础设施。 Google还创建核心沙盒子项目Sandbox2,提供低端沙盒原语,可以单独使用于隔离任意Linux程序。

由于许多软件处理外部产生的数据,像是将用户的图片转文件,或甚至执行用户产生的程序代码,过程通常存在不少的风险,而且 Google提到,当处理这些外部数据的函数库太过复杂时,就有机会出现特定类型的安全漏洞,像是内存破坏bug或是解析逻辑相关的问题。

因此开发者为了预防问题发生,会使用沙盒技术来隔离这些软件,以确保解析外部数据的程序代码,只能访问必要的资源,即便在最糟的情况下,黑客取得远程攻击控制权时,沙盒技术还是能包住他们,保护其他软件基础设施。沙盒除了需要能有效抵御攻击保护操作系统外,还必须要易于开发人员使用,然而某些沙盒解决方案,却要求用户花时间为每个项目重新定义安全边界。

为此Google发布了简单好用的Sandboxed API项目,讲求沙盒化一次就能重复使用。 Sandboxed API是针对C语言撰写的软件函数库实例,以高端观点来说,Sandboxed API把沙箱化的函数库,以及其调用者(Caller)分为两个独立的操作系统程序,主机二进制文件以及沙盒。实际上函数库调用则是由主机端API对象编组(Marshalling),并通过中介程序发送至沙盒,在沙盒中由RPC stub解编并转送调用到原始函数库。

API对象以及RPC stub都由Sandboxed API项目本身提供,前者由接口产生器自动产生,用户只需要提供沙盒策略,允许低层函数库进行一系列系统调用,并同时准备好供访问和使用的资源。以Sandboxed API沙盒化的函数库,将可以简单地被重复使用在其他项目中。

在Google中,不少团队已经大量使用Sandboxed API和Sandbox2,由于目前只支持Linux,Google正在研究Unix的系统如FreeBSD、OpenBSD和macOS支持的可能性。而Google提到,Windows的移植是更大的工程,需要完成更多基础工作。

他们也在思考新的沙盒技术,由于随着硬件虚拟化普及,把程序代码限制在沙盒虚拟机,打开了更多应用的可能性。另外,Google在设法改善构建系统,由于Sandboxed API现在正在使用Bazel构建所有内容包含相依文件,而CMake显然是更为友善的选项,因此更换构建系统为Google的优先工作之一。