生产指南

本文档旨在提供记录的生产配置和注意事项的位置。包括常见的错误配置、攻击缓解技术和其他相关提示。

DNS 区域抢注

Designate 的多租户特性允许任何用户创建(几乎)任何区域,这可能导致合法所有者无法在 Designate 中创建该区域。这种情况有几种发生方式

  1. 抢注者简单地在合法所有者之前在 Designate 中创建“example.com。”。

  2. 抢注者将“foo.example.com.”作为区域在 Designate 中创建,阻止任何其他租户创建任何父区域(example.com.、com.)。

  3. 抢注者将“com.”作为区域在 Designate 中创建,阻止任何其他租户创建任何以“com.”结尾的区域。

  4. 抢注者将“co.uk.”作为区域在 Designate 中创建,阻止任何其他租户创建任何以“co.uk.”结尾的区域。

场景 #1 和 #2 缓解

这里无法执行合理的自动化缓解措施。DNS 提供商通常使用手动流程,通过支持请求识别合法所有者,并请求非法所有者放弃控制权,或采取任何其他提供商特定的策略来处理这些场景。

场景 #3 缓解

可以通过确保 Designate 已配置并定期更新为最新的 gTLD 列表来缓解此场景,该列表由 IANA TLD 列表 发布。这些 TLD 可以通过 TLD API 输入到 Designate 中

场景 #4 缓解

这是场景 #3 的变体,其中公共注册可用于二级域名,例如“co.uk.”的情况。由于二级公共域名的性质,IANA 没有权限,因此这些域名不包含在 IANA TLD 列表 中。由 Mozilla 赞助的倡议已采取行动填补这一空白,众包“公共后缀”列表,其中包括标准 TLD 和公共二级域名。我们建议配置并定期使用 Mozilla 的 公共后缀列表 更新 Designate。这些公共后缀可以通过 TLD API 输入到 Designate 中

DNS 缓存中毒

多租户名称服务器可能导致 DNS 缓存中毒的有趣变体,如果未考虑配置,则可能发生。在正确的情况下,拥有不同区域的两个租户可以将内容注入到其他租户区域的 DNS 响应中。让我们考虑一个例子

租户 A 拥有“example.com.”,并在其区域内创建了一个额外的 NS 记录,指向“ns.example.org.”。攻击者租户 B 现在可以在其租户中创建“example.org.”区域。在此区域内,他们可以合法地创建一个名称为“ns.example.org.”的 A 记录。在默认配置下,许多 DNS 服务器(例如 BIND)现在将在“example.com.”的几个查询的响应中包含租户 B 的 A 记录。如果最终用户使用的递归解析器未配置为忽略区域外的响应,则此潜在的无效 A 记录“ns.example.org.”将被注入到解析器的缓存中,从而导致缓存中毒攻击。

这是 DNS 缓存中毒的“有趣变体”,因为毒性记录是由给定区域的权威名称服务器返回的,而不是来自攻击者区域的响应。

Bug 1471159 包含此攻击的更多工作示例。

BIND9 缓解

BIND9 默认情况下将包含区域外的附加信息,导致容易受到此攻击。我们建议配置 BIND 以发送最小响应 - 防止处理区域外的附加信息。

在 BIND 的全局选项子句中,包含以下语句

minimal-responses yes;

PowerDNS 缓解

PowerDNS 默认情况下将包含区域外的附加信息,导致容易受到此攻击。我们建议将 out-of-zone-additional-processing 配置标志设置为“no” - 防止处理区域外的附加信息。

在主 PowerDNS 配置文件中,包含以下语句

out-of-zone-additional-processing=no