- N +

通过伪造DNS响应绕过域名所有权验证

  我们的客座博主和Detectify众包团队黑客Evgeny Morozov将在本文中解释他是如何通过伪造DNS响应来绕过Detectify的域名所有权验证的。非常感谢Evgeny的突出贡献-众包团队中有这样的研究者很令人感到自豪。

  当用户需要使用Detectify来扫描一个网站时,我们必须先验证他对这个域名的所有权(几乎所有的在线扫描都有这种验证)。其中的一种验证方式是在DNS的TXT记录中增加Detectify提供的字符串。当用户点击验证时,Detectify会执行一个DNS检查来确认是否存在验证字符串。下面我们来看看如果验证一个你并不拥有的域名会发生什么。

  DNS查询和响应通常都是通过UDP协议传输的,所以IP地址伪造可以让查询客户端认为攻击者所发的DNS响应是来自于正常DNS服务器的。当然查询客户端只会接受明显符合要求的响应,下面的几个项目必须符合要求:

  源地址和端口以及目的IP都是已知的,DNS question可以猜出来,或者从一个攻击者可以访问的地方复制一个真实的查询。现在唯一不能确定的就是目的端口和Transaction ID了。

  九年前很多DNS客户端修复了可以预测源端口和Transaction ID的漏洞。猜测一个16bit的数字是完全可行的-因为只有65536种可能,攻击者完全可以在真实的DNS响应到达前给DNS客服端发送成千上万的假响应包。2008年的7月Dan Kaminsky披露了这个问题。随后DNS维护方就用完全随机的Transaction ID和端口修复了这个问题。所以这种攻击已经过时了,那么真是这样吗?

  我有一种预感,为了避免得到缓存数据,Detectify会执行自己的DNS查询,而不仅仅是使用系统的DNS解析工具。如果这样的话,它就仍可能还在使用可预测的Transaction ID和小范围的源端口。

  为了测试我通过dnsmasq为我控制的域名搭建了一个简单域名服务器,并且在进行Detectify验证的时候抓了多次包。使用Wireshark打开抓的包,可以发现来自dns查询请求。源端口看起来是足够随机了,但是Transaction ID是不是有问题呢?

  上面的命令尝试尽可能快的发送伪造的DNS响应给它声称来自于的真实域名服务器),设置的源端口范围在30000到39999。下面需要做的就是在我的笔记本上运行上述命令,并且在Detectify的网站上疯狂的不停的点击验证按钮。

  事实上现在所有的ISP和数据中心都会在出口过滤伪造的数据包-防止它们离开自己的网络,并且有很好地理由。伪造的数据包最常见的用途是DDOS攻击,特别是DNS反射放大攻击。所以我需要一个不会做过滤的主机,并且攻击机和受害者之间的延迟必须尽可能的低,以提高伪造的响应在真实的响应之前到达的概率。

  如何找到这样的一个主机就留给读者作为练习了。但是现在我可以自豪的说我已经是6个虚拟服务器的主人了,虽然其中的5个并没有什么卵用(所幸它们都很便宜)。在疯狂的点击Detectify网站的验证按钮后,我们终于得到了下面的提示:

返回列表
上一篇:
下一篇:
评论列表 (暂无评论,共491人参与)

还没有评论,来说两句吧...

发表评论

验证码