关于DNS,相信大家都知道, DNS是域名系统的缩写,在internet上,域名与ip地址是一一对应的,为了便于记忆,所以我们习惯使用域名访问网站,但是互联网中的计算机并不是靠域名来实现链接,仍然需要ip地址来识别,那么 DNS 所做的工作就是完成域名与对应ip地址的解析 ,主要使用UDP 53端口。

这里将告诉你:

DNS的解析过程

客户端如何查询和清空DNS缓存

DNS缓存所带来的安全问题

因为对DNS服务器的相关机理没有亲手玩过,所以只能从客户端的角度做一些必要的了解了。

1、 DNS从客户端到服务端的解析过程

以访问www.baidu.com为例说明

1)客户端首先检查本地c:\windows\system32\drivers\etc\hosts文件,是否有对应的IP地址,若有,则直接访问WEB站点,若无;

2)客户端检查本地缓存信息,若有,则直接访问WEB站点,若无;

3)本地DNS检查缓存信息,若有,将IP地址返回给客户端,客户端可直接访问WEB站点,若无;

4)本地DNS检查区域文件是否有对应的IP,若有,将IP地址返回给客户端,客户端可直接访问WEB站点,若无;

5)本地DNS根据cache.dns文件中指定的根DNS服务器的IP地址,转向根DNS查询;

6)根DNS收到查询请求后,查看区域文件记录,若无,则将其管辖范围内.com服务器的IP地址告诉本地DNS服务器;

7).com服务器收到查询请求后,查看区域文件记录,若无,则将其管辖范围内.xxx服务器的IP地址告诉本地DNS服务器;

8).xxx服务器收到查询请求后,分析需要解析的域名,若无,则查询失败,若有,返回www.xxx.com的IP地址给本地服务器;

9)本地DNS服务器将www.xxx.com的IP地址返回给客户端,客户端通过这个IP地址与WEB站点建立连接;

额外还要说一点,客户端有一个DNS后缀搜索列表(ipconfig /all 可以查询该列表内容),当我们查询的域名不存在时,DNS会将你查询的地址加上该DNS后缀再尝试进行搜索。

例如:我本机客户端DNS后缀搜索列表中有rdev.kingsoft.Net。 http://www.ddddddd.com/,查询不到时,会尝试以http://www.ddddddd.com.rdev.kingsoft.net/进行解析。  

      

该功能可通过注册表 HKLM\Software\Policies\Microsoft\Windows NT\DNSClient\AppendToMultiLabelName 

Type = DWORD  Data:0 (Do not Append Suffix) 1 (Append suffix) 设置是否开启。在xp下该功能默认开启,但是 到vista下该功能已经默认不开启,组策略里也增加相应设置:打开组策略编辑器--计算机配置--管理模板--网络--DNS客户端,可以发现有一条配置“允许将DNS后缀附加到非限定性多标签名称进行查询。”

对于xp和vista的这点不同,更详细的介绍请猛击这里:http://blogs.technet.com/networking/archive/2009/04/16/dns-client-name-resolution-behavior-in-windows-vista-vs-windows-xp.Aspx 。通过分别在xp和vista下抓包分析,能够有更清晰地了解。

2、 如何查询客户端本地DNS缓存记录和DNS服务器上的资源记录?

一直不明白到底怎么看本地DNS的缓存记录,今天查看IPCONFIG帮助的时候竟然巧遇;

   1)查询本地DNS缓存记录:

命令行CMD下:ipconfig /displaydns ,是不是发现你本次开机访问的域名对应的ip信息都显示出来了呢?  

看缓存记录你或许会发现,怎么有的域名解析出来的不是IP还是一个地址呢,这里可能涉及到域名服务器的配置问题,看来DNS域名服务器还是个比较深奥的东西,因对域名服务器从来都是只闻其名不见其真面目,暂时还无从了解。

如果我想查某个网址在DNS服务器上的缓存信息,怎么办呢?NSLOOKUP告诉你:  

当然网络上也有DNS查询站点如国外的 dnsstuff.com 国内的 dirs.cn 查询域名的DNS信息。

3、 DNS相关的网络威胁;

如果你访问大型知名网站打开的却是病毒网站,如果你访问网银的官方网站打开的却是假冒网银页面,如果访问的是正规网站打开的却是色情网站……这些情况听起来不可思议,输入的网址是正确的为什么打开的却是其他网站呢?那么原因很可能跟DNS相关。

其实了解了DNS的解析原理,你可以很容易的想到以下两个安全问题

1) 恶意修改hosts文件:因为进行DNS解析的第一步就是查看本地的hosts文件,并且不会再去验证文件里记录的正确性,所以攻击者恶意的将正常的域名指向病毒的网站,你看似正常的访问网络,事实上却落入病毒的陷阱,如hosts文件里添加一项 202.14.18.18  www.baidu.com,你访问baidu的时候就访问到了202.14.18.18这里,而202.14.18.18是病毒网页,那么恭喜你,中招了。

修改hosts文件非常容易,直接记事本打开hosts文件,就可以随意添加修改,所以病毒也很喜欢它。

2) DNS缓存被恶意修改,分为本地缓存被修改和DNS服务器缓存被修改;

恶意程序修改你电脑上DNS缓存中的内容,一是让你不能正常上网,比如把ww.sina.com.cn的IP地址修改为127.0.0.1,这样无论如何也不能找到新浪网了,二是将某些恶意IP地址放进DNS缓存,比如把www.sina.com.cn对应的IP地址修改为恶意网站地址,当你在地址栏输入www.sina.com.cn的时候,访问的却是恶意网站。由于操作系统在进行DNS解析的时候首先查询DNS缓存,如果在缓存中能查到,就不会再找DNS服务器了。这样一旦dns缓存被修改,你去修改DNS服务器之类的网络参数也是无效的。

攻击者给DNS服务器注入非法网络域名地址,如果服务器接受这个非法地址,那说明其缓存就被攻击了,而且以后响应的域名请求将会受黑客所控。当这些非法地址进入服务器缓存,用户的浏览器或者邮件服务器就会自动跳转到DNS指定的地址。这种攻击往往被归类为域欺骗攻击(pharming attack)。

本来想找一个攻击工具来修改下DNS缓存试试的,没找到。

4、如何清空DNS缓存?

如果是因为客户端的原因,导致不能正常上网,防御方法很简单,修改hosts文件清空DNS缓存即可。

1) 修改hosts文件

      查看hosts文件,如果有陌生的记录,del掉。同时如果发现某个域名被转移到病毒网站,在host文件里,将网站的域名和IP地址强行制定,也可以达到预防攻击的目的。

2) 清空DNS缓存

       ipconfig /displaydns,便是清除DNS缓存的命令,我今天使用了之后发现依然有记录残留,还可以有以下办法尝试:

       网络连接里修复本地连接;

       控制面板 - 管理工具 - 服务,找到 DNS Client,双击打开它的属性,直接停止它;

      DNS的缓存只在本次系统运行期间生效,所以重启机器就没有了。

      如果是DNS服务器缓存被恶意攻击,应该使用于查询的UDP端口不应该再是默认的53,而是在UDP端口范围内随机选择,当然随时打最新的补丁是必须的,如果DNS服务器被恶意攻击了,客户端的朋友真的会抓狂。

                                                                                                  vivilisa 04.20.2009