如何防止 Firefox 和 Chrome 在防火墙中打开端口?

信息安全 铬合金 火狐 windows-10 Windows 7的
2021-09-09 03:52:17

我注意到 Firefox 和 Chrome 在 Windows 防火墙中为未经请求的入站流量打开了端口。这发生在 Windows 7 x64 和 Windows 10 上。(这里,我说的是集成在最新 Windows 版本中的标准防火墙,而不是某些第三方产品)。

通常,当程序尝试更改防火墙配置时,我会在桌面上收到一条通知(对话框),询问我是否要允许该操作。但是对于 Firefox 和 Chrome,情况有所不同:

我会定期从防火墙配置中删除 Firefox 和 Chrome 的所有规则。然而,每次这些浏览器更新自己时(这是相当频繁的),它们会重新创建这些规则,而不会出现通常的确认对话框。

我不明白这怎么可能。我目前怀疑这些规则不是由 Firefox 或 Chrome 本身重新创建的,而是由它们在后台运行的维护(更新)服务重新创建的,可能具有管理权限。

我不希望 Firefox 向我的防火墙添加规则,让未经请求的入站流量从 TCP 和 UDP 的任何地址传递到任何端口同样,我不希望 Chrome 向我的防火墙添加规则,让未经请求的入站 UDP 流量通过自身传递到某个端口,但也可以从任何地址传递。鉴于浏览器的许多安全漏洞,我正在考虑这是一个重大的安全漏洞。

因此,问题是:如何防止 Firefox 和 Chrome 及其维护/更新服务默默地向 Windows 防火墙添加规则?

我已经看到我可以通过组策略控制防火墙,但是当唯一的原因是上述问题时,这对我来说似乎有点极端。我的客户不是域的一部分,所以我必须对他们每个人都这样做。此外,我不确定浏览器及其维护/更新服务是否也能够规避组策略。

重现步骤:

  • 安装火狐

  • 安装 Chrome

  • 打开用于 Windows 防火墙管理的 GUI(“具有高级安全性的 Windows 防火墙”)

  • 在左侧,选择“入站规则”

  • 右侧出现规则列表;注意两个名称以“Firefox”开头的规则和一个名称以“Chrome”开头的规则

  • 当您双击其中一个规则时,会出现一个对话框,其中详细列出了规则的属性、打开的端口、允许接收该流量的程序等

  • 请注意,Firefox 的两条规则几乎相同。唯一的区别是一个用于 TCP,另一个用于 UDP。两者都允许从任何地址到任何端口到 Firefox的未经请求的入站流量。

  • 请注意,Chrome 的规则允许将 UPD 流量从任何地址传递到端口 5353 到 Chrome。

  • 删除上面提到的三个规则

  • 等到 Firefox 更新可用并安装它

  • 请注意,安装更新时会重新创建 Firefox 的两条规则,但不会出现任何确认对话框

  • 等到 Chrome 更新可用并安装它

  • 请注意,安装更新时会重新创建 Chrome 规则,但不会出现任何确认对话框

提示:测试时,请注意,您可能需要右键单击左侧的“入站规则”,然后从上下文菜单中选择“刷新”,以实际查看可能已在后台完成的规则​​的最新更新通过服务或应用程序。

提示 2:其实,如果你想对此进行测试,你不需要等待下一次 Firefox 或 Chrome 更新。只需安装旧版本的浏览器并确保已创建上述防火墙规则,然后删除这些规则。因为您已安装旧版本,更新将立即可用。安装更新并注意防火墙规则已被静默重新创建。

2个回答

一种选择是使用 Windows 访问控制来防止更改防火墙规则。如果您首先将规则设置为已禁用(或简单地将其删除),然后更改防火墙规则存储上的 ACL,应该可以避免规则重新出现。虽然任何管理员帐户都可以覆盖或绕过您修改的 ACL,但自动安装程序极不可能尝试这样做,因此更改防火墙的尝试只会得到“拒绝访问”。

好消息是防火墙规则存储在可预测的位置,HKLM\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\FirewallRules. 除了它们的名称(GUID)之外,它们甚至完全是人类可读的;实际规则是用竖线分隔的英文文本(我现在很好奇,如果我在描述中使用竖线字符创建防火墙规则会发生什么)。

坏消息是规则存储为单个键(上面给出的那个)上的值,并且注册表 ACL 仅在键的粒度上可用。这意味着,如果您拒绝帐户对该密钥的写入访问权限,则您拒绝该帐户更改任何防火墙规则的能力。这可能会以多种方式损害功能;在极端情况下,您需要在自己更改任何防火墙规则之前手动更改该密钥上的 ACL。

理想的方法是对要阻止的帐户使用拒绝访问控制条目。对于给定的特定性级别,拒绝条目优先于允许条目(如果帐户同时被允许和拒绝操作,则拒绝获胜),并且特定(帐户)同样胜过通用(组)。因此,您可以为特定帐户添加拒绝条目以阻止该帐户,而不会做一些尴尬的事情,例如阻止整个管理员组。不幸的是,我的机器上安装了所有四个与 Mozilla 或 Google 相关的服务(MozillaMaintenanceGoogleChromeElevationServicegupdategupdatem) 被配置为作为 LocalSystem (aka SYSTEM) 运行。阻止 SYSTEM 对该键的写访问可能不是灾难性的——事实上,阻止 SYSTEM 写入选择注册表键是阻止管理员通过组策略对机器进行特定更改的常用方法——但它可能会破坏一些东西。如果您最终需要阻止通过普通 UAC 提升的操作,您将需要阻止您自己或管理员组,这比阻止 SYSTEM 更尴尬。

一种解决方案是在机器上创建一个新的管理员级服务帐户,然后修改 Google 和 Mozilla 服务以使用该帐户并在注册表项中阻止该特定帐户。这不是微不足道的——特别是如果服务依赖于系统的任何特殊权限,默认情况下,即使管理员帐户也无法获得所有权限(当然,这可以更改)——但可以做到。

您还可以尝试删除浏览器(以及任何相关服务,如果需要,手动删除)并使用非特权安装程序重新安装它们。这会将他们的安装程序爆炸半径限制为您的本地帐户,并且让他们无法自行提升。Firefox 支持便携式安装,而 Chrome 实际上习惯于默认安装到您的用户配置文件(而不是您的 Program Files 目录)使用每个用户安装,因此理论上应该可以在不授予安装程序管理员权限的情况下安装任何一个。没有管理员权限的任何东西都无法创建获得管理员权限的方法(没有 UAC 提示或 EoP 漏洞),因此他们将无法默默地扰乱您的防火墙,他们甚至可能不会尝试(毕竟,一个程序没有管理员安装可以在没有管理员的情况下更新,非管理员可以'

您已达到计算机安全的一项限制最佳实践要求只允许所谓的受信任程序的特权提升。但是我们都知道,为了通用,我们必须信任操作系统和浏览器(*)您面临的问题是,其中一种产品做了您不喜欢的事情,几乎无能为力:一旦您允许提升权限,系统就不会提供额外的保护。

我很难想象这里有一个真正的预防策略,因为很难猜测安装过程可以做什么,而且我知道没有人会说他们可以检测和理解 Windows 系统上的任何变化。但是,当发现一个问题时,通常可以采取变通方法。在这里我可以想象:

  • 如您所说的组策略。顺便说一句,如果你有很多客户端机器,你真的应该考虑使用 AD。您甚至不需要 AD 服务器许可证,因为最新版本的 SAMBA 提供了它。在客户端机器安全方面,AD 确实可以增加很多
  • 自动化检测/重置防火墙规则的过程。一旦自动化,它将作为浏览器升级的附加步骤出现
  • 使用专用防火墙(专用机器)并在那里实施防火墙规则。
  • 也许其他我无法想象...

哪个更相关将在很大程度上取决于实际用例......

最好的办法是要求编辑停止默默地打开防火墙规则,但我担心这个请求不太可能成功:这些规则肯定有充分的理由。这就是我只搜索解决方法的原因。


我在这里并不是说浏览器将使用升级的权限运行,但每次升级都需要它们。出于安全原因,我们不能使用过时的软件......