跳转至

WFP(Windows 过滤平台)支持

Sandboxie Plus v0.9.3 引入了一种独特的网络连接管理方法,不仅实现了基于 Windows 过滤平台(WFP)的 内核模式(使用驱动程序)“按沙箱”防火墙,还实现了基于规则的 用户模式 出站数据包过滤器。

WFP 实现

要启用 WFP 功能,请在配置文件 Sandboxie Ini[GlobalSettings] 部分添加 NetworkEnableWFP=y,并 重启计算机或重新加载驱动程序 以使更改生效。WFP 过滤 同时适用于入站和出站 流量。

  • 要全局启用阻止功能,请在 [GlobalSettings] 部分添加 AllowNetworkAccess=n
  • 要为某个沙箱(如 DefaultBox)启用 WFP 阻止功能,请在 [DefaultBox] 部分添加 AllowNetworkAccess=n
  • 要豁免某个沙箱(如 DefaultBox)的阻止功能,请在 [DefaultBox] 部分添加 AllowNetworkAccess=y
  • 要允许某个沙箱(如 DefaultBox)中的特定程序访问网络,请在 [DefaultBox] 部分添加 AllowNetworkAccess=program.exe,y
  • 要阻止某个沙箱(如 DefaultBox)中的特定程序访问网络,请在 [DefaultBox] 部分添加 AllowNetworkAccess=program.exe,n

WFP 实现的局限性: WFP 过滤 TCP/UDP 协议。WFP 过滤规则可以通过基于 "NetworkAccess=..." 的规则层次结构(后文将详细描述),将通信限制为 指定的 IP 地址或选定的端口号 来实现。受限的沙箱进程仍然可以使用系统服务解析域名,但无法直接发送或接收数据包。

用户模式数据包过滤器实现

当未设置 NetworkEnableWFP=y 时,Sandboxie Plus v0.9.3 还在用户模式下添加了一个功能齐全的基于规则的数据包过滤器。此机制还取代了旧版本中原始的 "BlockPort=..." 功能。

用户模式过滤器的局限性: 如果未启用 WFP 支持,仍然可以设置和使用相同的规则,但这些规则将仅通过用户模式挂钩应用。与 WFP 实现不同,它们 仅适用于出站连接,并且由于用户模式挂钩可能会被恶意应用绕过或禁用,因此无法保证强制实施。

注意事项: 为了实现可靠的隔离,强烈建议使用基于内核模式 WFP 的过滤

两种过滤模式的原理: 在用户模式和内核模式(驱动程序)中实现网络功能的原理有两个方面。首先,这允许更轻松地调试规则处理代码(在用户模式下调试更简单),因为两种模式都使用相同的代码根据预设规则做出决策。 其次,WFP 回调是全局的,即无论进程是否在沙箱中,系统上的任何进程都会触发这些回调。在非沙箱进程的情况下,它们不执行任何操作,并且使用哈希映射来识别需要采取行动的沙箱程序可以提供最佳性能。

结合 WFP 和用户模式过滤: 如果为给定进程设置了“阻止互联网访问”并启用了(用于 WFP 的)驱动程序,您可以为该沙箱选择应用哪种方法:使用 WFP 或阻止网络设备。尽管阻止网络设备端点的方法更为绝对,但已知这种方法会导致某些应用程序崩溃。

WFP 和多个防火墙

商业可用的防火墙通过安装过滤规则的 提供程序 来实现 Windows 过滤平台(WFP)。有些使用标准的 Windows 防火墙提供程序,而其他的则创建自己的提供程序。有些在用户模式级别使用 WFP(无驱动程序),而其他的则在内核模式下使用 WFP(基于自己的驱动程序)。如果同时安装并激活了多个防火墙,每个驱动程序都会在网络堆栈中它想要控制的位置安装自己的回调函数,然后内核会为所有驱动程序(提供程序)调用这些函数。这会导致每个防火墙设置的规则合并在一起。WFP 中的内置仲裁机制会决定哪些规则具有更高的优先级。有些防火墙建议关闭原生 Windows 防火墙以有效工作,而其他的则即使在 Windows 防火墙激活的情况下也能正常工作。找到自己喜欢的防火墙的用户通常非常不愿意更换。

Sandboxie Plus 是否与其他防火墙冲突? 系统上安装的其他防火墙(包括 Windows 防火墙)与 Sandboxie Plus 不冲突,可以用于阻止程序(无论是否在沙箱中),但其规则通常是全局的,并且基于绝对的程序路径。另一方面,Sandboxie Plus 中的 WFP 实现提供了“按沙箱”规则的额外优势,这些规则仅影响给定沙箱内的进程(无需指定程序路径)。例如,Box1 可能允许 Program1 访问网络,而在 Box2 中,同一个 Program1 可能被阻止,或者即使被允许访问网络,也会有不同的网络访问规则。

在 Sandboxie Plus 中实现网络访问规则

Sandman 用户界面为我们提供了一种编辑和测试网络规则的方法。右键单击一个沙箱,然后从下拉菜单中选择“沙箱选项”(或者直接双击一个沙箱)以打开沙箱选项用户界面。然后点击左侧面板中的“网络选项”,并选择“网络防火墙”选项卡。“测试规则”行出现在规则列表下方(规则列表可能已经填充,也可能为空)。您可以输入程序名称、端口号、IP 地址和协议,以查看哪些规则正在起作用,以及最终将应用哪条规则。阻止方式(使用 WFP 或拒绝访问网络设备)的选择在“进程限制”选项卡中进行。

我们可以使用的 属性(附带一些语法示例)如下:

  • 操作 = 允许 | 阻止(从“网络限制”选项卡中选择)
  • 程序 = program.exe
  • 端口 = 80,443,1000-2000
  • 地址 = 111.222.333.444,0.0.0.0-255.255.255.255
  • 协议 = TCP | UDP

以下 规则优先级 方案确定规则层次结构:

  1. 针对指定程序的规则优先于除给定程序外的所有程序的规则,而这些规则又优先于所有程序的规则。
  2. 包含端口号或 IP 地址的规则优先于不包含这些信息的规则:

    • 2a. 同时包含 IP 地址和端口号的规则优先于仅包含 IP 地址或仅包含端口号的规则。
    • 2b. 包含单个 IP 地址的规则优先于包含 IP 地址范围且处于同一层次的规则。
  3. 阻止规则优先于允许规则。

  4. 不包含协议的规则意味着适用于所有协议。

    • 4a. 如果唯一的区别是是否包含协议,那么包含协议的规则优先于不包含协议的规则。

一些示例:

  • NetworkAccess=*,Block;Port=80,443 - 针对选定端口号的阻止规则
    NetworkAccess=*,Block;Port=80,443;Protocol=TCP - 针对所有 TCP 连接的阻止规则
    NetworkAccess=*,Block;Port=80,443;Address=0.0.0.0-255.255.255.255 - 拒绝网络访问的阻止规则

  • NetworkAccess=*,Allow;Port=80,443;Address=111.222.333.444 - 允许任何程序访问此 IP 地址
    NetworkAccess=chrome.exe,Allow;Port=80,443 - 允许 chrome.exe 访问任何 IP 地址
    NetworkAccess=chrome.exe,Allow;Port=80,443;Address=111.222.333.444 - 允许 chrome.exe 访问一个 IP 地址

阻止端口模板:

  • NetworkAccess=*,Block;Port=137,138,139,445 - 自版本 1.3.4 / 5.58.4 起默认启用