生活中,我们会遇到各种各样的流量劫持,如DNS劫持、HTTP劫持。虽然2015年11月,全国首例流量劫持被判入刑,但流量劫持仍无处不在。
访问购物网站,会先转跳到广告联盟的网站再转跳回去,原先的URL总会被加上奇怪的后缀。以至于淘宝网、百度搜索等网站纷纷启用了HTTPS。当我们在浏览器上输入了一个错误的域名,我们看到的是宽带运营商提供的”温馨“的页面。而这些都是流量劫持的一部分。
一、研究背景
本课题研究的背景是在陕西师范大学的校园网下,由于DNS遭到污染,使用IPv6接入无法访问Google搜索、谷歌学术、维基百科等网站。这给广大师生们的科研学习生活造成了极大的不便。
例如,由于受到了DNS污染,访问谷歌搜索的主页:www.google.com将出现“ERR_CONNETION_ABORTED”。如图1所示,出现了“错误,连接中止”的情况是因为该域名在DNS解析时,被解析到一个虚假的IP地址,导致我们无法正常使用谷歌搜索。
二、问题的发现
大学校园网IPv6接入的条件下,在Windows平台上利用nslookup命令,使用谷歌的公共DNS服务器:2001:4860:4860::8888,对域名www.google.com进行DNS解析。
查询结果返回了一个AAAA类的地址:21:2::22,一个A类地址:127.0.0.1,如图2所示。
再次使用该命令,对域名www.facebook.com进行域名解析。查询返回了一个AAAA类的地址:21:2::22,一个A类地址:1.2.3.4,如图3所示。
特别注意,当我们对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。
关于上面所查询到的IP地址,使用Whois查询上面所有IP地址的所者。
IP为2607:f8b0:4005:803::2004的所有者是Google公司,如图5所示。
图5 Whois查询 IP为21:2::2的所有者是在多个网站均查询不到,如图6所示。我们可以大胆猜测这是一个虚假的IP地址。
图6 Whois查询不到结果 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。
2.系统发送一个DNS查询报文后,将收到两个响应报文,如图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服务器发送给我们的。
在我们继续观察Wireshark抓包结果时,一个事实印证了我们的猜想。如图12所示,标识符为0002的查询报文收到了3个响应报文,其中一个响应报文比前面两个都更迟收到,且内容是“No such name”。我们查看该报文的往返时间,如图13所示,往返时间是0.268097秒,远大于之前收到的0.102139秒的报文。而标识符为0003的数据包具有相同的情况。
此外,图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查询报文。
我们无法强制每次均使用TCP进行DNS查询,windows下可以将查询后的结果写成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地址。
软件的使用方法很简单,下载安装包,安装运行之后将主机的DNS服务器改成127.0.0.1即可直接使用。
至此,我们就可以成功访问Google等网站了。