SAD DNS:替代DNS缓存中的伪造数据的攻击

一群人 清华大学和加州大学河滨分校的研究人员开发了一种新型攻击允许替换DNS服务器缓存中的错误数据, 可以用来欺骗任意域的IP地址,并将对该域的调用重定向到攻击者的服务器。

攻击绕过了对DNS服务器的增强保护 来阻止Dan Kaminsky在2008年提出的经典DNS缓存中毒方法。

卡明斯基方法 操纵DNS查询ID字段的大小可忽略不计, 只有16位要找到欺骗主机名所需的正确标识符,只需发送大约7.000个请求并模拟大约140.000个虚假响应即可。

攻击归结为发送大量伪造的IP绑定数据包 到具有不同DNS事务ID的DNS解析器。 为了防止第一个响应被缓存,在每个伪响应中都指定了一个稍微修改的域名。

防止此类攻击,DNS服务器制造商 实现了网络端口号的随机分配 从中发送解析请求的源,该请求补偿了不足的较大标识符大小(要发送虚拟响应,除了选择16位标识符之外,还必须从64 2个端口中选择一个,这增加了选项以选择32 ^ XNUMX)。

攻击 SAD DNS大大简化了端口识别 通过利用网络端口上的筛选活动。 该问题在所有操作系统中均得到体现。 (Linux,Windows,macOS和FreeBSD)以及使用不同的DNS服务器(BIND,Unbound,dnsmasq)时。

据称,所有开放式求解器中有34%被攻击, 以及经过测试的12个顶级DNS服务中的14个,包括8.8.8.8(Google),9.9.9.9(Quad9)和1.1.1.1(CloudFlare)服务,以及来自信誉良好的供应商的4个经过测试的路由器中的6个。

问题是由于ICMP响应数据包形成的特殊性,允许您确定对活动网络端口的访问 而不是通过UDP使用。 此功能使您可以非常快速地扫描打开的UDP端口并基于源网络端口的随机选择有效地绕过保护,从而将暴力选项的数量从2 ^ 16减少到2 ^ 16 + 2 ^ 32。

问题的根源是限制运输强度的机制 网络堆栈上使用可预测的计数器值的ICMP数据包的数量,从此开始正向节流。 此计数器是所有流量所共有的,包括来自攻击者的虚假流量和实际流量。 默认, 在Linux上,ICMP响应被限制为每秒1000个数据包。 对于到达封闭网络端口的每个请求,网络堆栈都会将计数器加1,并从不可达端口发送带有数据的ICMP数据包。

因此,如果您将1000个数据包发送到其他网络端口, 所有这些都已关闭,服务器将限制发送ICMP响应 一秒钟,攻击者就可以确定搜索的1000个端口中没有开放的端口。 如果将数据包发送到开放端口,则服务器将不会返回ICMP响应 并且不会更改计数器值,即发送1000个数据包后,将不会达到响应速率限制。

由于伪造的数据包是从伪造的IP执行的,因此攻击者无法接收ICMP响应,但是由于有了总计数器,每1000个伪造数据包,他就可以从真实IP向不存在的端口发送请求并评估该IP地址。答案的到来; 如果答案来了,则使用1000个软件包中的一个。 攻击者每秒可以将1000个伪造的数据包发送到不同的端口,并快速确定打开的端口位于哪个块中,然后缩小选择范围并确定特定的端口。

Linux内核通过随机化参数的补丁解决了该问题 限制发送ICMP数据包的强度,这会引入噪声并最大程度地减少通过边信道泄漏的数据。

数据来源: https://www.saddns.net/


发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责资料:AB Internet Networks 2008 SL
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。