DNS欺骗,也就是中间人攻击 DNS欺骗是这样一种中间人攻击形式,它是攻击者冒充域名服务器的一种欺骗行为,它主要用于向主机提供错误DNS信息,当用户尝试浏览网页,例如IP地址为XXX.XX.XX.XX ,网址为www.bankofamerica.com,而实际上登录的确实IP地址YYY.YY.YY.YY上的www.bankofamerica.com ,用户上网就只能看到攻击者的主页,而不是用户想要取得的网站的主页了,这个网址是攻击者用以窃取网上银行登录证书以及帐号信息的假冒网址,DNS欺骗其实并不是真的“黑掉”了对方的网站,而是冒名顶替、招摇撞骗罢了。整个操作过程其实非常简单,下面我们将探讨DNS欺骗攻击是如何实现的以及如何抵御这种攻击。 正常DNS通信 域名系统(DNS)协议在RFC 1034/1035中是这样定义的:它被认为是互联网使用中最重要的协议之一。当你在浏览器输入网址时(例如http://www.google.com),就会向DNS服务器发送一个DNS请求以便找到与该网址相对应的IP地址。这是因为与互联网互连的路由器和设备并不知道google.com,它们只知道IP地址,如74.125.95.103。 DNS服务器本身的工作原理是,存储IP地址到DNS名称映射的记录(称为资源记录)数据库,联系这些资源记录与客户端,并将这些资源记录与其他DNS服务器联系。整个企业和整个互联网的DNS服务器架构是有点复杂的,事实上,有很多关于DNS架构的专门书籍,但在本文中我们将不会涵盖DNS架构或者所有不同DNS通信类型的内容,不过我们将介绍基本的DNS通信,如图1所示。
图1: DNS查询和响应
DNS函数是属于查询/响应类型的格式,当客户端希望解析DNS域名为IP地址时,就会向DNS服务器发送一个查询,然后服务器会将对应的作为回复。从客户端的角度来看,看到的只有两个数据包:查询和响应。
图2: DNS查询和响应数据包
而当我们进一步考虑DNS递归问题时,这种情况就会变得更加复杂。由于互联网DNS结构的层次性,DNS服务器需要能够互相通信以便获取客户端发送的查询所对应的答案。我们的内部DNS服务器可能知道本地局域网络服务器的IP地址映射,但是我们不能指望内部DNS服务器知道全世界网络的IP地址映射。这也就是递归发挥作用的地方,就是当一台DNS服务器代表客户端的名义向另一台DNS服务器发送查询请求,也就是说,这种情况下,DNS服务器变成了客户端,如图3所示。
图3: DNS通过递归的查询和响应
欺骗DNS 执行DNS欺骗攻击的方法有很多,在这里我们将使用一种称为DNS ID欺骗的技术。 每个通过互联网发送的DNS请求都包含一个独特的识别码,其目的在于辨识查询和响应,并将对应的查询和响应配对在一起。这就意味着,如果我们的攻击计算机可以拦截目标设备发送的DNS查询,我们就只需要做一个包含该识别码的假数据包,这样目标计算机就会根据识别码而接受我们发送的查询结果。 我们将使用一个简单的工具分两个步骤来完成整个操作。首先,我们对目标设备进行ARP缓存中毒攻击以重新路由通过攻击主机的目标设备的通信,这样我们就能够拦截DNS查询请求,然后我们就能够发送欺骗性的数据包。这样做的目的是为了让目标网络的用户访问我们制造的恶意网址而不是他们试图访问的网址,如图4所示。
图4: 使用DNS ID欺骗方法的DNS欺骗攻击
有几种不同的工具可以用于执行DNS欺骗攻击,我们选择使用Ettercap,它包含windows和Linux两个版本,大家可以点击此处下载该工具。如果你稍微研究一下这个网址就会发现Ettercap包含很多除DNS欺骗外的功能,它可以用于很多形式的中间人攻击。 如果你是在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中所示。
图5: 添加欺骗性的DNS记录到etter.dns
这些信息就是告诉dns_spoof插件这样的信息:当它发现针对yahoo.com www.yahoo.com或者的DNS查询请求时,就发送IP地址172.16.16.100作为响应。在实际情况下,172.16.16.100会运行某种web服务器软件向用户展现假冒网站。 一旦文件配置好并保存后,我们就可以执行命令字符串来发动攻击了,命令字符串使用以下选项: -T –指定文本界面的使用 -q –以静音模式运行命令,这样捕捉的数据包不会输出到屏幕 -P dns_spoof –指定dns_spoof插件的使用 -M arp –发起中间人ARP中毒攻击以拦截主机间的数据包 // // -指定整个网络作为攻击的目标 我们需要的最终命令字符串为: Ettercap.exe –T –q –P dns_spoof –M arp // // 运行此命令将启动两个阶段的攻击,首先是对网络设备的ARP缓存中毒攻击,然后是发送假的DNS查询响应信息。
图6:Ettercap主动搜寻DNS查询
一旦启动,任何用户试图打开www.yahoo.com都会被重新定向到我们的恶意网站。
图7: 从用户角度看到的DNS欺骗的结果
如何抵御DNS欺骗攻击 DNS欺骗攻击是很难防御的,因为这种攻击大多数本质都是被动的。通常情况下,除非发生欺骗攻击,否则你不可能知道你的DNS已经被欺骗,只是你打开的网页与你想要看到的网页有所不同。在很多针对性的攻击中,用户都无法知道自己已经将网上银行帐号信息输入到错误的网址,直到接到银行的电话告知其帐号已购买某某高价商品时用户才会知道。这就是说,在抵御这种类型攻击方面还是有迹可循: 保护内部设备: 像这样的攻击大多数都是从网络内部执行攻击的,如果你的网络设备很安全,那么那些感染的主机就很难向你的设备发动欺骗攻击。 不要依赖DNS:在高度敏感和安全的系统,你通常不会在这些系统上浏览网页,最后不要使用DNS。如果你有软件依赖于主机名来运行,那么可以在设备主机文件里手动指定。 使用入侵检测系统: 只要正确部署和配置,使用入侵检测系统就可以检测出大部分形式的ARP缓存中毒攻击和DNS欺骗攻击。 使用DNSSEC: DNSSEC是替代DNS的更好选择,它使用的是数字前面DNS记录来确保查询响应的有效性,DNSSEC现在还没有广泛运用,但是已被公认为是DNS的未来方向,也正是如此,美国国防部已经要求所有MIL和GOV域名都必须开始使用DNSSEC。 总结 从攻击技术水平和恶意意图来看,DNS欺骗攻击是非常致命的中间人攻击形式,使用这种攻击技术我们可以利用钓鱼技术来窃取登录信息,利用漏洞安装恶意软件或者导致拒绝服务的情况。在下篇文章中,我们将分析“哈希值传递”攻击,看看它们如何被用于登录windows计算机,而不需要帐号信息。