DNSSec 是如何工作的?是否存在已知限制或问题?

信息安全 tls 证书颁发机构 dns dnssec dns 欺骗
2021-08-31 03:29:52

根据来自本网站的信息,需要 DNSSec 来保护我们免受许多 DNS 和 SSL / TLS 黑客攻击,包括:

我还没有看到关于 DNSSec 如何在 RFC 之外工作的很好的解释,所以:

  1. DNSSec 是如何工作的?
  2. 是否有我应该注意的已知限制?具体来说,我们如何防止 MITM 隐藏“安全”记录在客户端上不可见,并且客户端使用不安全的 DNS 的情况?这个黑客的一个变种)
3个回答

DNSSec 是普通的 DNS,但带有签名。它绝对可以防止 DNS 欺骗;这就是它的用途,它就是这样做的。

理论上,注册商仍然可以滥用他们的立场,因为他们负责将您的意图传达给根服务器。这包括有关您的 DNSSec 密钥的信息。这种关系永远不会改变;如果您不能信任您的注册商,请找一个新的注册商。

DNSSec 不能防止 MITM 攻击。它绝对可以防止 DNS 欺骗。但是,除了 DNS 欺骗之外,还有其他方法可以将自己插入到流量中。

怎么运行的

从本质上讲,您通过创建记录告诉注册商您的签名密钥的指纹DS,并且该信息将从您的 TLD 中获得,该上游密钥以类似的方式链接到单个全球受信任的密钥。

通过此设置,您的密钥现在被视为您域的受信任机构,并允许签署您的 DNS 记录。因此,现在为您区域中的每条记录创建一个RRSIG包含相关数字签名的相应记录。

现在,当有人在您的区域中查找域时,您不仅可以发送响应,还可以发送相应的RRSIG记录,表明响应是由您签名的。为了验证签名,客户端获取您的 DNSKEY 记录,其中包含您的完整公钥,然后只需遵循正常的加密签名验证技术。

显然该DNSKEY记录也有自己对应的RRSIG记录,这样你就可以验证它没有被篡改。但更重要的是DS,您的父区域有一条可用记录(请记住,您在第一段中将其提供给了您的注册商),其中包含有关您的公钥的足够信息,以验证您的DNSKEY记录实际上已被授权用于您的区域。

反过来,该 DS 记录由您父母的 DNSKEY 签名,在根区域中有相应的 DS 记录。这样,所有密钥签名都可以追溯到单个受信任的来源。

问题

当您需要告诉某人某条记录存在时,就会出现复杂情况。显然,响应需要签名,但通常 DNS 服务器本身无法访问您的签名密钥,也无法即时签署响应;签名都是提前“离线”创建的。如果您的 DNS 服务器受到威胁,这可以防止您的密钥被泄露。

因此,相反,您将子域按字母顺序排列并说“对于 和 之间的每个名称mail.example.compop.example.com不存在其他子域”并签署该断言。然后,当有人要求您时,nachos.example.com您可以只给他们那个响应(已经签名)并且客户知道因为nachos.example.com按字母顺序介于mail.example.comand之间pop.example.com,那么“这个域不存在”响应被认为是正确签名的并且实际上来了从你那里。

这成为问题的地方在于,通过一组明确指出“X和之间不存在响应”的负面响应Y,您可以轻松地准确绘制出整个区域存在哪些域。您知道“X”存在,并且你知道“Y”的存在,并且你知道它们之间没有别的东西。只要再随机戳一下,你就可以快速编译出所有确实存在的记录的列表。

争议

关于这是否是一个问题,DNS 世界中有两个阵营。第一组说:
“如果人们知道存在哪些区域怎么办;DNS 是公共信息。无论如何,它从来都不是秘密。”

第二组说:
“这是一个安全风险。如果我有一个名为 的服务器accounting.example.com,那么入侵我网络的人可以快速判断哪台机器上有大量信息,因此要攻击哪台。”

然后第一组回复:
“那就不要这么说!如果您的整个安全模型都是基于对公共信息保密的概念,那么您,先生,就是个白痴。”

第二组回答说:
“这不是保守秘密,而是不要透露比你必须透露的更多的信息。”

等等,令人作呕。

DNS(和 DNSSec)主要由第一阵营的人设计;DNS 是公共的,因此能够映射出域中存在哪些子域并不是一个重大的安全问题。无论如何,你真的不能以任何其他方式签署负面回应。

另一方面,服务器往往由第二阵营的人运行。他们担心自己网络的安全,他们不想泄露任何不必要的信息,因为他们知道所有信息最终都会被用来对付他们。

所以你有一个协议在密码学上是健全的并且功能完善,但现实世界的管理员往往不愿实施。

我想,我们最终都会到达那里。毕竟,与映射子域所带来的任何危险相比,DNS 欺骗更像是一个现实世界的问题。但改变需要令人信服。所以我们在这里......仍然。

部署问题方面有一些“陷阱”:

  1. 区域重签:

    DNSSEC 使用 2 个密钥:

    • 密钥签名密钥 (KSK),通常是用于增强安全性的长(2048 位)密钥,以及
    • 更短的区域签名密钥 (ZSK) 以获得更好的性能。

    由于 ZSK 较短,因此需要定期更改,这意味着重新签署您的区域。

    一些较旧的 DNSSEC 教程只是告诉您对您的区域进行签名,而不是告诉您需要定期重新签名,这通常会导致您的区域在一周后签名无效。

    现代权威名称服务器已内置支持生成新的 ZSK 和重新签名区域。但是与当前发行版一起发布的可能不会。

    我个人使用ZKT重新签署我的区域;适合小型设置。

  2. 权威名称服务器和验证解析器不能共享 IP 地址。

    权威名称服务器设置 AA 标志(“Authoritative Answer”),但验证解析器设置 AD 标志(“AuthenticateD”),这些标志是互斥的。如果您有任何以“混合”模式运行的名称服务器——这意味着它们既执行递归为它们具有权威性的区域提供服务——那么它们将不得不分成两个不同的功能。

  3. 并非所有注册商都支持将 DS 记录发布到根目录。

    这没什么大不了的,因为您可以使用 ISC 的DLV服务。当心 EasyDNS;他们支持在自己的名称服务器上签署区域,但不对 DS 记录做任何事情,这使得他们的 DNSSEC 支持有点没用。