有人可以解释在这种情况下如何发生 DNS 中毒吗?

信息安全 dns dns 欺骗
2021-09-10 03:31:48

我在安全博客中阅读了以下声明

一遍又一遍地使用相同的源端口进行 dns 查询而不是随机化它们是 dns 中毒的漏洞

有人可以详细说明这是一个漏洞以及如何利用它吗?

2个回答

由于 DNS 通常通过 UDP 运行,因此响应数据包很容易被欺骗。UDP 数据包由源和目标 IP 地址以及源和目标端口号的组合来标识。

经典的 DNS 中毒攻击是向 DNS 服务器发送一个您认为会导致服务器进行递归查找的查询,然后使用欺骗性的响应数据包向服务器发送您希望服务器发出的辅助请求。如果您获得了正确的 IP/端口组合和事务 ID,并且您的答案首先到达,那么您的伪造答案可能会被接受并插入到缓存中。

好吧,我们提前知道了源 IP 地址和目标 IP 地址,并且我们知道 DNS 在端口 53 上运行,所以这是端口号之一。假设 DNS 查询从端口 53 发送以及发送到端口 53,那么我们得到了全部 4 个。那么我们只需要担心事务 ID,它是一个 16 位数字。这意味着我们发送的每个数据包都有 6.5 万分之一的机会获得黄金。我们可以很容易地在一秒钟左右的时间内发送数千个数据包,这给了我们一个毒害服务器缓存的机会。如果我们在“真正的”响应到来之前推出 10K 响应数据包,这给了我们大约六分之一的成功机会。如果它失败了,我们只是等待到期,然后再试一次。

但是,如果服务器在递归查找查询中使用随机出站端口号,那么这会增加另外 16 位的材料,我们必须正确猜测才能接受我们的响应。所以这总共是 32 位,或大约 40 亿种可能性。这意味着我们对每个数据包的赔率从 65,536 分之 1 变为 4,294,967,296 分之 1,这有点令人望而却步。

因此,虽然您不能 100% 确定响应没有被欺骗,但如果防守方随机化他的源端口以进行二次查找,则概率会更有利于防守方;足以阻止大多数攻击者投入资源来尝试攻击。

有很多因素在 DNS 中毒中起重要作用,但最可能的主要因素是时间一遍又一遍地使用相同的源端口给攻击者带来了巨大的时间提升优势,因为他已经知道他需要将查询发送到的端口。如果具有恶意 DNS 服务器的攻击者能够以比实际 DNS 服务器更快的方式回复您的请求,他可以将您的查询(比如说 www.example.com)重定向到由他控制的 IP 地址。如果他设置了与 www.example.com 相同的网站,您不会注意到两者之间有任何区别。

这就是为什么作为一种预防和缓解技术,DNS 请求将具有随机源端口。这种机制和其他机制(使用加密安全随机数来选择源端口和 16 位加密随机数)大大降低了成功的 DNS 中毒和其他 DNS 攻击的可能性。