在 Windows 上全局禁用 Kerberos 的反向 DNS 查找?

在 Windows 上全局禁用 Kerberos 的反向 DNS 查找?

我知道,在 Kerberos 身份验证期间计算被调用服务器的 SPN 时,可以禁用单个客户端应用程序进行的反向 DNS 查找。有多种方法,例如:

我的问题是,是否可以在全球范围内的 Windows(即 Windows 10)客户端计算机上以某种方式实现这一点 -适用于所有应用。以下变体似乎不是一个解决方案:

  • 告诉 Windows 不要进行反向查找。我检查过MS Kerberos 注册表文档但我在那里看不到这样的场景。
  • 告诉 Windows / Windows 中的所有应用程序改用 MIT 实现。似乎有一些特殊设置(例如在 PuTTY 或 Firefox 中)可以选择具体的 GSSAPI/Kerberos 实现。但是其他应用程序(例如 Chrome 或 Windows 网络磁盘映射器)怎么办?
  • 理论性太强但不实用:更改、重新编译和部署负责查找的 Windows 硬连线部分。

答案1

不幸的是,没有。使用krb5.conf样式配置的实现可以使用 [1] 之类的指令dns_canonicalize_hostname = false,并且内置 javakrb5.conf确实支持此指令。但当然 90% 的客户端都是 Windows,因此 akrb5.conf是无关紧要的。

那么 Windows 会怎么做呢?虽然 Windows 本身不执行 DNS 规范化,但 Windows 库和应用程序经常会执行。例如,非 Chromium Windows 客户端将执行 Kerberos DNS 规范化。因此,Chrome 和 Firefox 等各种浏览器都遵循了这种行为。

Kerberos DNS 匿名化的工作原理:

客户端需要 SPN 才能获取服务票证。例如,对于 HTTP,它应该只使用 URL 中的主机名https://www.example.com来创建 SPN,例如。如果您在同一 IP 后面运行 10 个站点,这意味着您需要在帐户上为、、、、 等HTTP/www.example.com设置 SPN 。HTTP/as1.example.comHTTP/as1b.example.comHTTP/as1HTTP/dev3.example.corp

但是,这不是 Kerberos 客户端默认执行的操作。默认情况下,它们使用 DNS 将 URL 主机名扩展为 FQDN(根据需要添加域后缀)。然后,它们执行反向 DNS PTR 查找以获取 IP 的规范 FQDN 主机名。该主机名用于构建 SPN 以请求 Kerberos 票证。因此,由同一 IP 托管的所有主机名都将转换为SPN 之类的HTTP/s3US-66.example.corp

对于 Windows 上基于 Chromium 的浏览器,Chrome 中有一个设置DisableAuthNegotiateCnameLookup可以关闭 DNS 匿名化。但这必须应用于整个站点,这意味着所有现有的 HTTP 服务都必须为 URL 中使用的所有主机名添加 SPN。许多管理员会拒绝这样做,因为这太麻烦了。

有关基于 Chromium 的浏览器中此过程的更详细说明,请参阅本页上的 Kerberos SPN 生成部分:

https://www.chromium.org/developers/design-documents/http-authentication/

因此,现在几乎不可能从同一 IP 获得多个独立的 Kerberos 配置。Kerberos 客户端 DNS 规范化会在 IP 和在该 IP 后面运行的所有应用程序之间创建依赖关系。这不是我们现在部署应用程序的方式。如果您部署 Docker 应用程序,您必须知道该服务器的 Kerberos 配置适合您的应用程序,并且这假定您甚至可以访问现在必须共享的 kerberos 配置/密钥。您应该能够将应用程序从一个主机移动到另一个主机,而无需更改它用于接受身份验证的帐户。

另请注意,如果 DNS 可能被毒化,则 Kerberos 客户端 DNS 规范化会带来安全风险。

注意:这不是 Microsoftizm。MIT 使用相同的默认行为。

[1]https://web.mit.edu/kerberos/krb5-latest/doc/admin/princ_dns.html

相关内容