跳转至

隔离机制

在 Sandboxie 监管下启动的进程会以受限的用户令牌创建,因此它们基本上没有权限访问任何东西。在这种状态下,它们几乎毫无用处,会立即崩溃。

这种令牌操作使用 Windows 内核中的半打 未记录符号 完成。

下一步,Sandboxie 试图通过钩住大多数 ntdll.dll 系统调用来修复这一点,把它们替换为重定向到自己 SbieDrv 驱动。驱动随后评估调用并执行沙盒化规则,例如:不得在沙盒外写入、不得读取封闭资源。

当恶意应用程序试图取消 ntdll.dll 的钩子(例如尝试直接对 Windows 内核进行系统调用)时,内核会看到受限的用户令牌,操作将以访问被拒绝失败。

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

文件系统和注册表虚拟化在 SbieDll 中的用户层面实现,后者负责把来自真实系统的数据与来自沙盒的数据结合起来,并正确重定向所有访问尝试。如果该机制被不当绕过,会导致访问被拒绝错误。