几天前 Google宣布开放Sandboxed API项目该 使您能够自动化沙箱创建过程,以便在C和C ++中隔离执行任意库。
从库中隔离代码 可以防止对库提供的句柄进行可能的攻击,如果您的代码中存在漏洞,可以通过对进入库的外部数据进行操作来利用这些漏洞,则会造成额外的障碍。 该代码是在Apache 2.0许可下打开的。
隔离或在Sandbox2运行时中使用它来完成,其中使用了名称空间,cgroup和seccomp-bpf。
传递到沙盒的代码在单独的进程中运行,可以访问系统调用和资源以及文件和网络连接受到限制。
进程只能访问执行隔离代码直接需要的系统功能。
Sandbox2定义了运行流程的组件或者,应用隔离规则并支持后续执行。
沙箱2 它可以与Sandbox API分开使用,不仅可以隔离库,还可以隔离任意进程。
除了增加保护之外,在单独的过程中消除代码的积极之处在于,可以对存储库和CPU的内存消耗限制进行单独的调节,以及针对故障的保护:该库不会导致整个应用程序崩溃。
关于沙盒API
沙盒API是Sandbox2插件 这简化了以隔离模式运行的现有库的传输。
沙盒API 提供一个中间软件界面,使您可以在沙盒环境中运行库代码以及在沙盒环境中组织对库的调用,并确保将库结果传递到主程序。
Se 通过基于ProtoBuffs协议的专用RPC访问隔离的库。
A 向库开发人员提供了一组允许访问变量的选项,与基本应用程序隔离的文件描述符,缓冲区和库函数,包括用于共享阵列和结构的自动和受控内存同步的工具。
当分析此类数据的软件库足够复杂时,它可能成为某些类型的安全漏洞的受害者:内存损坏错误或与分析逻辑有关的其他类型的问题(例如,路径遍历问题)。 这些漏洞可能会带来严重的安全隐患。
另外, 提供了一个API来监视隔离的进程的操作,并在出现故障的情况下重新启动它们。
对于隔离库,将自动为Bazel装配系统和程序接口(SAPI)生成隔离功能的注释代码,以实现基本过程和隔离过程之间的交互。
开发人员还必须创建带有隔离规则的头文件,该规则定义了所有允许的系统调用和操作 (读取,写入,打开文件,访问时间,安装信号处理程序的能力,通过malloc支持的内存分配等)。
库应有权访问的文件和目录是分别确定的。
安装
当前,该项目仅适用于Linux,但将来,他们承诺增加对macOS和BSD系统的支持,并从长期来看,增加对Windows的支持。 是的 您要安装沙盒API,可以按照给定的说明进行操作 在此链接。
在计划中,还应注意 能够以C和C ++以外的语言隔离库的能力, 附加的运行时支持隔离 (例如,基于硬件虚拟化)以及使用CMake和其他组装系统的能力(支持仅限于Bazel构建系统)。
数据来源: https://security.googleblog.com