DNS污染的原理浅析及解决方案的初探

生活中,我们会遇到各种各样的流量劫持,如DNS劫持、HTTP劫持。虽然2015年11月,全国首例流量劫持被判入刑,但流量劫持仍无处不在。

访问购物网站,会先转跳到广告联盟的网站再转跳回去,原先的URL总会被加上奇怪的后缀。以至于淘宝网、百度搜索等网站纷纷启用了HTTPS。当我们在浏览器上输入了一个错误的域名,我们看到的是宽带运营商提供的”温馨“的页面。而这些都是流量劫持的一部分。

一、研究背景

本课题研究的背景是在陕西师范大学的校园网下,由于DNS遭到污染,使用IPv6接入无法访问Google搜索、谷歌学术、维基百科等网站。这给广大师生们的科研学习生活造成了极大的不便。

例如,由于受到了DNS污染,访问谷歌搜索的主页:www.google.com将出现“ERR_CONNETION_ABORTED”。如图1所示,出现了“错误,连接中止”的情况是因为该域名在DNS解析时,被解析到一个虚假的IP地址,导致我们无法正常使用谷歌搜索。

图1 无法访问谷歌搜索的主页

二、问题的发现

大学校园网IPv6接入的条件下,在Windows平台上利用nslookup命令,使用谷歌的公共DNS服务器:2001:4860:4860::8888,对域名www.google.com进行DNS解析。

查询结果返回了一个AAAA类的地址:21:2::22,一个A类地址:127.0.0.1,如图2所示。

图2 对www.google.com进行DNS解析

再次使用该命令,对域名www.facebook.com进行域名解析。查询返回了一个AAAA类的地址:21:2::22,一个A类地址:1.2.3.4,如图3所示。

图3 对www.facebook.com进行DNS解析

特别注意,当我们对www.google.com和www.facebook.com进行DNS解析时,我们收到了相同的AAAA类地址:21:2::22。众所周知,Google公司和Facebook公司是在纽约上市的两家独立的两家公司。两家公司的域名不可能绑定在同一个IP地址上,由此可知,一定是我们的查询出了问题。

为了对比,我们使用一台位于旧金山的主机,该VPS具有IPv4和IPv6网络。和先前的实验相同,同样使用谷歌的公共DNS服务器,对域名www.google.com进行解析。图4所示,我们解析到的IP地址不再是21:2::2,而是2607:f8b0:4005:803::2004。

图4 使用旧金山的虚拟主机进行DNS查询

关于上面所查询到的IP地址,使用Whois查询上面所有IP地址的所者。

  1. IP为2607:f8b0:4005:803::2004的所有者是Google公司,如图5所示。

    图5 Whois查询

  2. IP为21:2::2的所有者是在多个网站均查询不到,如图6所示。我们可以大胆猜测这是一个虚假的IP地址。

    图6 Whois查询不到结果

  3. 1.2.3.4地址的所有者是亚太互联网络信息中心,如图7所示。该地址不是Facebook公司的。也不是指向Facebook的IP地址,而是一个错误的地址。

    图7 IP为1.2.3.4的所有者

基于上述实验,我们可以得出以下结论:

  • 在陕西师范大学校园网下,使用IPv6进行DNS查询可能得到错误的或者是虚 假的IP地址。
  • 在旧金山的主机上使用相同的DNS服务器(DNS服务器均为2001:4860:4860::8888)进行DNS查询,能查询到正确的IP地址。
  • DNS服务器并没有出现问题,是我们发送DNS查询报文或者接收DNS响应报文的过程中出了差错。

在此,我们将DNS污染定义为DNS污染是指一些刻意制造或者无意中制造出的DNS数据包,将域名解析成不正确的IP地址。

三、原理浅析

1.DNS污染的理论基础

DNS污染的理论基础主要有两点。其一是DNS报文仅仅使用16bit的标识符来确认DNS查询报文与响应报文是否匹配。且标识符是由客户端程序设置并由服务器返回相同的标识符。

其二是DNS服务器使用的熟知端口号无论对UDP还是TCP都是53。这意味着DNS均支持UDP和TCP访问。DNS主要使用UDP。其中DNS主要使用UDP进行查询是因为UDP是无连接的,而TCP是面向连接的,若使用TCP进行DNS查询,则客户机必须与服务器进行TCP的三次握手,必将降低查询的速率。所以主流操作系统的DNS查询均默认使用UDP。

2.DNS污染的实现原理

为了更好的说明DNS污染的实现,我们先画一个简单的示意图。客户机发送的DNS查询报文将经过交换机、路由器、防火墙等设备,最终到达服务器。

我们假设在防火墙上设有网址黑名单,当同时满足条件:

  • 目的端口是53号端口的报文
  • 是一个UDP报文
  • 请求的内容中包含敏感内容(敏感内容可以是黑名单中的网址)

当满足上述条件时,由于DNS主要用UDP来查询,故防火墙完全可以伪造出一个虚假的DNS响应报文给客户机,这样客户机就不可能得到真正的IP地址。

现在我们假设网址www.google.com在黑名单中,则对该域名的53号端口的DNS查询报文,客户机将收到防火墙或网关发送的虚假的报文。

3.DNS污染的抓包分析

1.通过UDP发送的DNS查询报文如图8所示。该报文具有鲜明的特征,例如目的端口号是53,通过UDP传输,请求内容是www.google.com。

图8 通过UDP发送的DNS查询报文

2.系统发送一个DNS查询报文后,将收到两个响应报文,如图9所示。并且这并不是个别现象,几乎每个查询报文都会收到两个响应报文,如图10所示。

图9 一个查询报文,两个响应报文

图10 收到两个对应标识符的响应报文

3.当我们细心观察我们收到的DNS响应报文时,我们可以发现里面有DNS报文从发送到接收的时间,如图11所示,这里的时间是0.102139秒。

在地图上,我们测量西安市到美国西海岸大约是11,298.37千米;在工程上,光在光纤中的传播速度是200,000千米/秒(在《计算机网络:自顶向下方法》书本中,传播速度也是取200,000千米/秒,故此处我们选用200,000千米/秒而非300,000千米/秒是有依据的)。

同时我们忽略处理时延、排队时延、传输时延,仅计算传播时延,则西安到美国西海岸的往返时间至少为:t=11,298.37*2/200000=0.1129837秒。而实际上的往返时间至少为0.150秒,甚至达到0.300秒。所以我们可以猜测,图11所接收到的数据包不是真正的DNS服务器发送给我们的。

图11 一个往返时间远低于正常时间的数据包

在我们继续观察Wireshark抓包结果时,一个事实印证了我们的猜想。如图12所示,标识符为0002的查询报文收到了3个响应报文,其中一个响应报文比前面两个都更迟收到,且内容是“No such name”。我们查看该报文的往返时间,如图13所示,往返时间是0.268097秒,远大于之前收到的0.102139秒的报文。而标识符为0003的数据包具有相同的情况。

此外,图13显示的往返时间才像是数据包真正往返美国的时间。

图12 一个迟到的响应报文

图13 正常的往返时间

4.DNS污染的原理的小结

在陕西师范大学校园网络下,收到的DNS污染有两个方面。一方面,客户机向DNS服务器发送查询报文时,报文在传输的过程中受到了监听,攻击者假装成DNS服务器向客户机发送虚假的响应报文,我们称为虚假报文,并且该报文比真正的响应报文抢先到达了客户机;另一方面,真正的DNS响应报文在经过防火墙或网关时,查询结果可能被修改成“No such name”,我们称为被修改过的报文。

结合先前的图2和图3我们可以知道,因为虚假报文抢先在被修改过的报文到达客户机,所以客户机只记录了虚假报文的响应结果。但真正的被修改过的报文在wireshark抓包中可以看到。

故DNS污染的攻击者不仅模拟成DNS服务器发送虚假的DNS响应报文给客户机,而且还拦截真正的响应报文,并修改后发给客户机。

四、解决方案

1.DNS污染的原理的小结

若强制使用TCP查询,则客户机与DNS服务器进行TCP三次握手后,客户机可以收到正确的DNS响应报文。如图14,在windows下使用,nslookup命令并加上-vc参数即可强制使用TCP发送DNS查询报文。

图14 通过TCP进行的DNS查询

我们无法强制每次均使用TCP进行DNS查询,windows下可以将查询后的结果写成hosts条目。

图15 查询结果可写入Hosts

在陕西师范大学校园网下,我们就可以通过IPv6正常访问该网站了。当然,该方法的缺陷是随着hosts添加的条目增多,人工管理hosts的成本将增大。下面将介绍一种改进方法。

2.借助第三方软件——DNSCrypt

DNSCrypt是OpenDNS发布的加密DNS工具,可加密DNS流量。OpenDNS是总部位于美国的DNS解析提供服务商,提供免费的DNS解析服务。

值得一提的是2015年6月30日,思科公司宣布收购 OpenDNS ,交易的价格约为6.35亿美元。

DNSCrypt是一款开源软件,它的工作原理是运行在客户机上的DNSCrypt使用密钥KEY和DNS服务器进行交互,如图16所示,我们可以看见KEY和服务器的IP地址。

图16 DNSCrypt的部分源代码

软件的使用方法很简单,下载安装包,安装运行之后将主机的DNS服务器改成127.0.0.1即可直接使用。

至此,我们就可以成功访问Google等网站了。

图17 查询结果可写入Hosts

图17 查询结果可写入Hosts