跳转至

隔离机制

常规安全隔离沙盒中的进程通常使用受到严格限制的 Windows 主令牌运行。这会限制它们在 Windows 访问检查下能够访问的资源,而应用程序所需的虚拟化和兼容性行为由 Sandboxie 的其他机制提供。令牌的具体处理方式取决于配置;应用隔间(Application Compartment)模式会跳过常规的主令牌替换。

Sandboxie 支持多种令牌构造和筛选路径。当前的常规路径会构造一个新的、受到严格限制的主令牌;历史上的筛选路径仍然可用,它依赖 Windows 内核的具体实现。详见访问令牌隔离(英文)和令牌内部实现(英文)。

Sandboxie 还会拦截部分原生系统调用的桩代码,并将这些调用转交给 SbieDrv。对于通过该路径处理且符合条件的操作,驱动可以在处理调用时使用保留的原始令牌或线程令牌上下文。独立的驱动过滤机制会根据实际生效的策略执行资源访问限制,包括已配置的直接访问例外。Windows 本身的权限检查仍然适用。

如果应用程序通过直接发起系统调用,绕过已修补的用户态系统调用桩代码,它并不会因此重新获得 Sandboxie 保留的原始令牌上下文。调用通常仍使用沙盒令牌,并受适用的 Windows 访问检查和 Sandboxie 独立执行的限制约束。

并非所有功能都能以这种方式恢复,因此 Sandboxie 还钩住标准 Windows DLL 中大量其他函数,通过辅助服务 SbieSvc 提供变通方案和重定向,不过有时它选择直接禁用某些功能。

文件系统和注册表虚拟化主要由用户态的 SbieDll 实现。它将受支持的操作映射到沙盒存储,并将符合条件的主机数据与沙盒数据合并呈现。虚拟化、驱动执行的限制和 Windows 本身的权限检查是不同的机制:如果某条虚拟化路径不可用或被绕过,结果取决于具体操作、生效的令牌、资源规则以及仍在执行的其他限制。既不能保证访问一定被拒绝,也不能保证能成功访问主机资源。