先提醒一下:“域名污染”这个词还有其它几个别名,分别是“域名欺骗”、“域名缓存投毒”(洋文叫:DNScachepoisoning)。今后看到这几个别名,要晓得是同一个意思。
“域名污染”的原理,简单说来是这样滴:当你的电脑向域名服务器发送了“域名查询”的请求,然后域名服务器把回应发送给你的电脑,这之间是有一个时间差的。如果某个攻击者能够在域名服务器的“DNS应答”还没有到达你的电脑之前,先伪造一个错误的“DNS应答”发给你电脑。那么你的电脑收到的就是错误的信息,并得到一个错误的IP地址。
谁有“域名污染”的企图?
从技术上讲,只要攻击者能够位于“你”和“域名服务器”的传输线路中间,那么攻击者就有机会搞“域名污染”。能够做到这点的,可能是一个黑客/骇客,也可能是ISP。
某国家防火墙的两种“域名污染”
刚才俺解释了“域名污染”的原理,那种形式不妨称为“直接污染”。由于某国家防火墙的特殊性,它不但可以做到“直接污染”,还可以做到“间接污染”。而普通的骇客顶多只能做到“直接污染”,难以做到“大范围的间接污染”。
那么这两种污染有啥区别捏?且听俺细细道来。
某国家防火墙部署在哪?
首先有必要先扫盲一下“某国家防火墙(其实是一种IDS,也就是入侵检测系统)的部署位置”。X国互联网只有少数几个国际出口(名气较大的是:A出口、B出口、C出口)。如果你要访问国外网站,你的网络数据流就必定会经过其中的某个“国际出口”。
某国家防火墙的直接污染
因为某国家防火墙部署在国际出口。如果你用的是【国外的】域名服务器,你的“DNS请求”必定会经过国际出口;同样,域名服务器的“DNS应答”必定也会经过国际出口才能到你的电脑。这一来一回就给某国家防火墙提供了机会。
这种污染就是俺所说的“直接污染”。
某国家防火墙的间接污染
刚才介绍了“使用国外域名服务器会被直接污染”。那如果你用的是【国内的】域名服务器捏?就会被“间接污染”。过程如下:
1.比方说你用的是某运营商的DNS服务器,然后你想要访问某个被不受欢迎的网站。
2.对于不受欢迎的网站,其网站服务器必定在国外,而且网站的域名肯定也不会使用CN之下的域名。所以,被封锁的网站,其上级域名的“权威域名服务器”肯定也是在国外。
3.当你向“某运营商的DNS服务器”查询不受欢迎的网站的域名,这台“某运营商DNS服务器”就会去找这个不受欢迎的网站的上一级域名对应的“权威域名服务器”去进行“域名查询”。
4.因为是从国外进行域名查询,相关的数据流必定要经过国际出口。一旦经过国际出口,就会被某国家防火墙污染。
5.如此一来,“某运营商的域名服务器”拿到的是已经被污染的域名记录(里面的IP是错的)。而且“某运营商的域名服务器”会把这条错误的记录保存在自己的域名缓存中。
6.下次如果有另一个网友也找这台“某运营商的域名服务”查询这个不受欢迎的网站,也会查到错误的结果。
上述过程不断重复,最终会导致:全国所有的域名服务器,它们的缓存中只要是包含了不受欢迎的网站的记录,记录中的IP地址必定是错的(这个错误的IP地址也就是某国家防火墙伪造的那个)。所以说“间接污染”是很牛逼的,可以把错误的域名记录扩散到全国。
刚才俺说了,“域名污染”也叫“域名缓存投毒”。“投毒”一词真的非常形象——就好像在某条河流的源头下毒,从而把整条河流的水都污染。“域名污染”直接破坏了互联网的基础设施。
域名被污染的防除方法
对付域名DNS劫持,只需要把系统的域名DNS设置手动切换为国外的域名DNS服务器的IP地址即可解决。
对于域名DNS污染,一般除了使用代理服务器和VPN之类的软件之外,并没有什么其它办法。但是利用我们对域名DNS污染的了解,还是可以做到不用代理服务器和VPN之类的软件就能解决域名DNS污染的问题,从而在不使用代理服务器或VPN的情况下访问原本访问不了的一些网站。当然这无法解决所有问题,当一些无法访问的网站本身并不是由域名DNS污染问题导致的时候,还是需要使用代理服务器或VPN才能访问的。
域名DNS污染的数据包并不是在网络数据包经过的路由器上,而是在其旁路产生的。所以域名DNS污染并无法阻止正确的域名DNS解析结果返回,但由于旁路产生的数据包发回的速度较国外域名DNS服务器发回的快,操作系统认为第一个收到的数据包就是返回结果,从而忽略其后收到的数据包,从而使得域名DNS污染得逞。而某些国家的域名DNS污染在一段时期内的污染IP却是固定不变的,从而可以忽略返回结果是这些IP地址的数据包,直接解决域名DNS污染的问题。
域名被污染的恢复解决方案
1、使用各种SSH加密代理,在加密代理里进行远程DNS解析,或者使用VPN上网。
2、修改hosts文件,操作系统中Hosts文件的权限优先级高于DNS服务器,操作系统在访问某个域名时,会先检测HOSTS文件,然后再查询DNS服务器。可以在hosts添加受到污染的DNS地址来解决DNS污染和DNS劫持。
3、通过一些软件编程处理,可以直接忽略返回结果是虚假IP地址的数据包,直接解决DNS污染的问题。
4、如果你是Firefox only用户,并且只用Firefox,又懒得折腾,直接打开Firefox的远程DNS解析就行了。在地址栏中输入:
about:config
找到network.proxy.socks_remote_dns一项改成true。
5、使用DNSCrypt软件,此软件与使用的OpenDNS直接建立相对安全的TCP连接并加密请求数据,从而不会被污染。
TOP