网络协议之DNS知多少?
这里将告诉你:
l DNS的解析过程
l 客户端如何查询和清空DNS缓存
l 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