关于DNS污染

来源:互联网 发布:java 类可以带参数吗 编辑:程序博客网 时间:2024/04/30 23:29

 

DNS污染的数据包并不是在网络数据包经过的路由器上,而是在其旁路产生的。所以DNS污染并无法阻止正确的DNS解析结果返回,但由于旁路产生的数据包发回的速度较国外DNS服务器发回的快,操作系统认为第一个收到的数据包就是返回结果,从而忽略其后收到的数据包,从而使得DNS污染得逞。而某些国家的DNS污染在一段时期内的污染IP却是固定不变的,从而可以忽略返回结果是这些IP地址的数据包,直接解决DNS污染的问题。


wiki上的解释:

域名服务器缓存中毒(DNS cache poisoning),又名域名服务器高速缓存污染(DNS cache pollution),是指一些刻意制造或无意中制造出来的域名服务器分组,把域名指往不正确的IP地址。一般来说,外间在互联网上一般都有可信赖的域名服务器,但为减免网络上的交通,一般的域名都会把外间的域名服务器数据暂存起来,待下次有其他机器要求解析域名时,可以立即提供服务。一但有关网域的局域域名服务器的缓存受到污染,就会把网域内的电脑导引往错误的服务器或服务器的网址。
域名服务器缓存污染可能是通过域名服务器软件上的设计错误而产生,但亦可能由别有用心者通过研究开放架构的域名服务器系统来利用当中的漏洞。


你有过被DNS污染的情况吗?也许你并不清楚,但你现在可以学着了解一下。


windows下有个命令nslookup(linux系统也可用或者用dig)

  1. nslookup NAME1 NAME2

这句命令的意思是查询NAME1的主机或域名,但用NAME2做提交查询服务器,NAME2在这里相当于一台域名服务器!比如:

  1. nslookup bbs.cpcfan.com 142.13.35.233

当然这里只是做个例子,国内的服务器还不至于被自家的DNS污染了。而142开头IP是假设的,但在实际使用时,你可以随便起个非可用的IP,请注意避开特殊IP段!
因为使用的是不存在的IP,理论上我们是得不到有效的回应的,但如果返回了一个错误IP,那么恭喜你!你要访问的域名已经被DNS污染了!

在微软的帮助与支持文档中,它对DNS污染的解决是这样说的:

在遇到域名系统 (DNS)“欺骗”时,可能会出现 DNS 缓存污染。术语“欺骗”指的是在响应 DNS 查询时发送不安全的数据。该数据可能用于将查询重定向到一个恶意 DNS 服务器,也可能本身就是恶意的。 

注意:如果 DNS 服务器已配置为将解析请求转发给另一个服务器,且建立了父子关系,那么在父 DNS 服务器受到 DNS 缓存污染攻击而又未执行 DNS 缓存污染保护的情况下,该子 DNS 服务器也可能会受到攻击。默认情况下,使用 Windows 2000 Service Pack 3 或更高版本而且在父子关系中用作父服务器的 Microsoft DNS 服务器将能够充分执行缓存污染保护。因此,要确保组织中的所有 DNS 服务器都已启用了 DNS 缓存污染保护。



这是在域名服务器上设置的,所以作为客户端的我们不必太在意!详情请见:http://support.microsoft.com/kb/241352

不过如果我们想要对付DNS污染能做的只有使用VPN,或者代理服务器!当然,借于域名解析的原理,域名解析顺序-->本机高速DNS缓存-->host文件-->主域名服务器
所以我们可以在host文件中添加对已被污染的域名的解析,比如在host谁的空白处添加:

  1. bbs.csdn.com 203.93.106.21

,这样可以优先访问正确的IP地址。但还有一点,请别忘了,host文件之前还有本机的高速DNS缓存,你可以在CMD下输入命令

  1. ipconfig /flushdns

 

清除本机的高速DNS缓存。
好了,这样只能解决一部分问题,因为除了DNS污染,如果网络在防火墙或者本地ISP出口处设置了IP封锁,IP过滤等,那么我们就无能为力了。但通用的方法就是使用VPN或者代理服务器!

以上为个人看法,如有错漏,请指出,不吝赐教!

 

2010-08-11