有人可以使用与我相同的 DNS 服务器来劫持我的域吗?

Era*_*rin 48 domain-name-system a-record dns-hosting domain-name dns-zone

当我注册一个新域时,我会通过在注册商的设置中为其分配域名服务器来将其发送给我的托管服务提供商。例如,使用 Digital Ocean,我输入以下内容:

ns1.digitalocean.com
ns2.digitalocean.com
ns3.digitalocean.com
Run Code Online (Sandbox Code Playgroud)

然后我在我的服务器的 A 记录中添加域设置。我突然想到同一托管服务提供商的任何其他人都可以使用我拥有的域添加 A 记录。

有什么可以阻止这种情况发生吗?如果使用同一个域名服务器的 2 个不同的服务器尝试通过 A 记录为自己分配一个域,那么当您在浏览器中输入该域时,该域实际上会解析到哪里?什么可以防止同一 DNS 服务器上的域名冲突?

Wes*_*ley 60

别介意下面的评论部分,也别介意编辑历史中以前的答案。在与朋友(谢谢@joeQwerty、@Iain 和@JourneymanGeek)进行了大约一个小时的交谈之后,经过一些愉快的黑客攻击,我们深入了解了您的问题和整体情况。抱歉,一开始的鲁莽和完全误解了情况。

让我们逐步完成整个过程:

  1. 您可以wesleyisaderp.com在 NameCheap.com 上购买。
  2. Namecheap 作为您的注册商将是您填充 NS 记录的地方。假设您实际上想要在 Digital Ocean 上托管 DNS 区域。
  3. 您将闪亮的新域的 NS 记录指向ns1.digitalocean.comns2.digitalocean.com
  4. 但是,假设我能够确定您已经注册了该域,而且您已将您的 NS 记录更改为 Digital Ocean 的. 然后我打败你到一个 Digital Ocean 帐户,并将区域 wesleyisaderp.com 添加到我自己的。
  5. 您尝试在*您的*帐户中添加该区域,但 Digital Ocean 说该区域已存在于他们的系统中!哦不!
  6. 我 CNAMEwesleyisaderp.comwesleyisbetterthanyou.com.
  7. 欢闹随之而来。

我和一些朋友刚刚玩了这个确切的场景,是的,它有效。如果@JoeQwerty 购买了一个域并将其指向 Digital Ocean 名称服务器,但我已经将该区域添加到我的帐户中,那么我就是区域主并且可以随心所欲地使用它。

但是考虑到有人必须首先将区域添加到他们的 DNS 帐户,然后您必须将您的 NS 记录指向同一主机的名称服务器,以防发生任何恶意事件。此外,作为域所有者,您可以随时切换 NS 记录并将解析从坏区主机移开。

至少可以说,这种情况发生的可能性有点低。据说,从统计学上讲,你可以洗一副 52 张扑克牌,然后得到一个其他人从未得到过的顺序,也没有其他人会得到。我认为这里存在同样的推理。有人利用它的可能性非常低,而且存在更好的捷径,它可能不会在野外偶然发生。

此外,如果您在注册商处拥有一个域,并且有人碰巧在与您发生冲突的 Digital Ocean 这样的提供商上创建了一个区域,我敢肯定,如果您提供所有权证明,他们会询问创建该域的人zone 在他们的帐户中删除它,因为它没有存在的理由,因为他们不是域名所有者。

但是A记录呢

第一个拥有区域的人,例如 Digital Ocean,将是控制它的人。您不能在同一个 DNS 基础架构上拥有多个相同的区域。例如,使用上面这些愚蠢的名称,如果我将 wesleyisaderp.com 作为 Digital Ocean 上的一个区域,则 Digital Ocean 的 DNS 基础设施上的其他任何人都无法将其添加到他们的帐户中。

这是有趣的部分:我实际上真的将 wesleyisaderp.com 添加到我的 Digital Ocean 帐户!继续尝试将其添加到您的。它不会伤害任何东西。

因此,您无法向 wesleyisaderp.com 添加 A 记录。都是我的。

但是关于...

正如@Iain 在下面指出的那样,我上面的第 4 点实际上太冗长了。我根本不需要等待或策划或计划。我可以在一个帐户中创建数千个区域,然后坐等。从技术上讲。如果我创建了数千个域,然后等待它们注册,然后希望它们使用我设置了区域的 DNS 主机……也许我可以做点坏事?也许?但可能不是?

向 Digital Ocean 和 NameCheap 道歉

注意 Digital Ocean 和 NameCheap 不是唯一的,与本场景无关。这是正常行为。他们在各方面都无可指责。我只是使用它们,因为这是给出的示例,它们是非常知名的品牌。

  • 更可能出现这种情况的一种奇怪情况是,域在_previously_ 注册并在 Digital Ocean 中使用,然后失效/未更新,但该区域未从 digitalocean 中删除。后来有人将其抢购为“新”域(不知道它以前是拥有的),然后尝试在 Digital Ocean 创建该区域。只有当 DNS 主机定期清除其不再是名称服务器的区域时,才能防止这种情况。(没有上述冲突解决方法) (7认同)
  • 通过能够更改指向哪些 ns 服务器来显示域所有权也很简单,因此即使有人这样做了,如果他们的客户服务良好,也可以相对较快地清除。 (4认同)
  • @Wesley 这是正确的。我们有一个程序来处理与我们的 DNS 服务发生区域冲突的情况。 (4认同)
  • @JamesRyan TXT 记录用于在这种情况下证明所有权。 (3认同)
  • 我想如果你真的想惹恼某人,你可以设置一个“A”和一个“MX”RR,它们的 TTL 非常长,指向你控制的主机,并锤击常见的公共 DNS 服务器(比如谷歌的,也许吧? )。缓存中毒的一种变体... (2认同)
  • @Iain 不,他们不可能。如果其他人控制了 NS,他们就会控制 TXT 记录! (2认同)

Jen*_*y D 32

除了韦斯利的出色回答之外,我想补充一点,已经有一个解决方案可以防止这种情况发生。它被称为 DNSSEC。

基本原理是这样的:

  • 你注册了你的域名(我会wesleyisaderp.com在这里使用著名的名字,只是因为。)
  • 您向注册商注册您的名称服务器,通常是通过您使用用户名/密码组合进行身份验证的 Web 界面。
  • 您还创建了一个公钥/私钥对,并将您的公钥以 DNSKEY 记录的形式上传到您的注册商。(这就是注册商如何为顶级域的根服务器设置信任链 - 在这种情况下,是.com.的根服务器。)再次,当您使用自己的用户名/密码登录时上传组合,因此它连接到您的域而不是其他人的域。
  • 您转到名称服务器,输入您的记录并使用您的私钥对生成的区域文件进行签名。或者,如果您有 DNS 托管服务的 Web 界面,您可以将私钥上传给他们,以便他们可以为他们签署区域文件。
  • 当 Wesley 如此粗鲁地试图劫持您的域并将其 CNAME 到 时wesleyisbetterthanyou.com,他的记录将不会被 .com 根域服务器接受,因为它们没有使用正确的密钥进行签名。如果您的 DNS 托管服务提供商很聪明,他们会立即检查,甚至不会允许他尝试向该域添加记录,除非他有正确的私钥。
  • 当您输入自己的记录时,它们将被正确的密钥签名,因此它们将起作用。
  • 你现在可以坐下来嘲笑韦斯利了。

(在 Wesley 描述的原始案例中,主要错误是 Digital Ocean 在允许某人为其设置 DNS 记录之前没有验证域的所有权。不幸的是,他们并不孤单;我知道至少一位瑞典注册商有同样的问题。)


mc0*_*c0e 6

只要您在告诉注册商使用他们的名称服务器之前在 DigitalOcean 上声明域的所有权(即将其与您的帐户相关联),您就可以了。

如果有人已经将您的域与他们的帐户相关联,您会在 DigitalOcean 名称服务器成为权威之前发现。如果发生这种情况,请与 DigitalOcean 讨论如何将该人从其帐户中删除。

根据最佳实践,{ns1,ns2,ns3}.DigitalOcean.com 不充当托管在别处的域的递归解析器。如果他们这样做了,并且如果 DigitalOcean 托管的服务器将这些服务器用作通用解析器,那么问题就会大得多。尽管众所周知这是不好的做法,但找到错误的托管服务提供商可能并不难,这可能会导致滥用。

  • @kasperd 合法所有者将 NS 记录指向任何他们想要的位置,然后配置例如 TXT 记录以证明他们是所有者,因为它包含服务提供商提供给他们的唯一信息。不可否认,这有点令人不快,但在极少数情况下可能会发生这种情况,这比让每个人在带上他们之前证明所有权要容易一些。 (2认同)