解析中间人攻击之二:DNS欺骗
而当我们进一步考虑DNS递归问题时,这种情况就会变得更加复杂。由于互联网DNS结构的层次性,DNS服务器需要能够互相通信以便获取客户端发送的查询所对应的答案。我们的内部DNS服务器可能知道本地局域网络服务器的IP地址映射,但是我们不能指望内部DNS服务器知道全世界网络的IP地址映射。这也就是递归发挥作用的地方,就是当一台DNS服务器代表客户端的名义向另一台DNS服务器发送查询请求,也就是说,这种情况下,DNS服务器变成了客户端,如图3所示。
欺骗DNS
执行DNS欺骗攻击的方法有很多,在这里我们将使用一种称为DNS ID欺骗的技术。
每个通过互联网发送的DNS请求都包含一个独特的识别码,其目的在于辨识查询和响应,并将对应的查询和响应配对在一起。这就意味着,如果我们的攻击计算机可以拦截目标设备发送的DNS查询,我们就只需要做一个包含该识别码的假数据包,这样目标计算机就会根据识别码而接受我们发送的查询结果。
我们将使用一个简单的工具分两个步骤来完成整个操作。首先,我们对目标设备进行ARP缓存中毒攻击以重新路由通过攻击主机的目标设备的通信,这样我们就能够拦截DNS查询请求,然后我们就能够发送欺骗性的数据包。这样做的目的是为了让目标网络的用户访问我们制造的恶意网址而不是他们试图访问的网址,如图4所示。
如果你是在windows系统中安装Ettercap,你会发现它包含一个很强大的图形用户界面,不过对于DNS欺骗的情况,我们只需要使用命令行界面。
在操作Ettercap之前,需要进行一些配置。Ettercap的核心是数据包嗅探器,主要利用不同的插件来执行不同的攻击。dns_spoof插件是用于本文示例的工具,所以我们需要修改与该插件相关的配置文件。在windows系统中,该文件位于C:\Program Files (x86)\EttercapNG\share\etter.dns以及/usr/share/ettercap/etter.dns,这个文件很简单并且包含你想要欺骗的DNS记录。对于我们而言,我们希望所有试图打开yahoo.com的用户被定向到本地网络的主机上,所以我们加入了一些条目,正如图5中所示。
这些信息就是告诉dns_spoof插件这样的信息:当它发现针对yahoo.com www.yahoo.com或者的DNS查询请求时,就发送IP地址172.16.16.100作为响应。在实际情况下,172.16.16.100会运行某种web服务器软件向用户展现假冒网站。