没有 MITM 的 LAN 中的 DNS 缓存中毒

信息安全 中间人 dns 欺骗
2021-08-31 18:46:42

许多关于 DNS 缓存中毒(又名 Kaminsky 攻击)的问题已经被问到,但是我找不到我的问题的明确答案:

在不执行 MITM 攻击的情况下,局域网中是否可能发生 DNS 缓存中毒?

澄清:

在 MITM 攻击期间,DNS 缓存中毒可能是正常的。

但是,我没有看到很多主题围绕着一种在不执行 MITM 攻击(如 Kaminsky 攻击)的情况下缓存毒害 LAN 的技术。我认为这应该是可能的,因为所有 DNS 请求/回复都是纯 http,未加密。因此,我们应该能够看到请求(包括事务 ID 和确切端口),并在“好的”DNS 服务器可以响应请求之前准备一个虚假的答案。攻击者与目标在同一个 LAN 上,因此响应速度将比 LAN 外的另一个 DNS 服务器快得多。

这样的攻击可能吗?我知道在 MITM 攻击期间执行 DNS 欺骗更容易,我只是想知道是否可以通过在没有执行 MITM 攻击的情况下赢得 DNS 响应竞赛来在 LAN 上缓存有毒客户端。


注意:这不是关于如何防止 Kaminsky 攻击的问题(事务 ID 和端口随机化)

2个回答

DNS 请求和回复不是HTTP;他们是... DNS。标准大多数时候,DNS 请求和响应使用UDP:请求是单个 IP 数据包,响应也是如此。

使用 UDP,每个数据包通过以下方式标识:

  • 源 IP 地址
  • 目标 IP 地址
  • 源端口
  • 目的港

从客户端C到 DNS 服务器S的 DNS 请求将使用C的 IP 地址作为源,S的 IP 地址作为目标,随机端口值p作为源端口,53 作为目标端口(DNS 的标准端口值服务器)。DNS 响应使用C的 IP 地址作为目标,S的 IP 地址作为源,53 作为源端口,p作为目标端口。客户端将接受响应为“正确”,因为它使用p作为目标端口,与客户端用作其请求源的p相同。

希望向客户端C提供虚假 DNS 信息的攻击者可以知道C的 IP 地址和S的 IP 地址,并且可以很好地猜测客户端发送请求的时间。攻击者的目标是发送虚假的 DNS 响应,声称来自 DNS 服务器S,但包含。如果没有完全窃听访问权限,攻击者无法知道p的值,因为他看不到数据包。但是,端口号的范围是有限的(端口号的范围是从 0 到 65535,但随机分配的端口号的实际范围更小,具体取决于所涉及的操作系统)。因此,攻击者可能只针对所有可能的端口p值发送数千个欺骗性 IP 数据包,每个都包含虚假信息。除了使用正确p值的那个之外,客户端将删除所有这些。

相同的概念可以扩展到DNS 服务器之间的通信,因为它们相互通信并缓存响应。攻击者通常更容易成功,因为他可以触发自己的 DNS 到 DNS 交换,从而为他启动数千个欺骗性响应提供精确的时间。当他成功地向 DNS 服务器提供虚假信息时,则称该 DNS 服务器已中毒

即使对于没有窃听能力的低技术攻击者来说,这类事情也相对容易,更不用说在客户端与其 DNS 服务器之间或 DNS 服务器之间实现真正的中间人所需的拦截能力了。使它变得容易的原因是使用 UDP,这意味着攻击者知道除了随机源端口之外的所有内容,随机源端口位于小范围内。如果两个 DNS 服务器通过TCP相互通信,那么攻击会更加困难,因为在 TCP 流中注入虚假数据意味着猜测连接序列号,这些连接序列号是在 32 位范围内随机选择的:“数千个数据包” ”已成为“数十亿个数据包”。

的,这是可能的,尽管也可以使用更好的攻击。

DNS 缓存中毒可以通过多种方法进行,Kaminsky 攻击只是其中之一。Kaminsky 攻击之所以引起如此大的兴趣,是因为您不需要在同一个 LAN 上。您可以在地球的中途攻击 DNS 服务器。

众所周知,您可以在与您自己相同的 LAN 上篡改流量 - 除非该流量受到加密保护。大多数工具(例如Android Network Spoofer)结合使用 ARP 中毒和 DNS 中毒,因为这是最可靠的方法。原则上,您可以在没有 MITM 的情况下进行 DNS 中毒,就像您建议的那样,但它会不太可靠,因为您依赖于竞争条件。

这就是为什么你没有看到太多关于你提议的攻击的讨论。在任何实际情况下,您都有更好的选择。