DNS欺骗攻击技术分析及防范
来源:asp之家 时间:2010-02-11 09:52:00
DNS欺骗是一种非常复杂的攻击手段。但是它使用起来比IP欺骗要简单一些,所以也比较常见。最近一个利用DNS欺骗进行攻击的案列,是全球著名网络安全销售商RSA Security的网站所遭到的攻击。其实RSA Security网站的主机并没有被入侵,而是RSA的域名被黑客劫持,当用户连上RSA Security时,
发现主页被改成了其他的内容。
DNS是怎样工作
DNS是全称是Domain Name Server,既域名服务器。当一台主机发送一个请求要求解析某个域名时,他会首先把解析请求发到自己的DNS服务器上。
假设现在有一台主机heike.angel.com,他的DNS是cn.angel.com机器,现在它拿到了某个域www.xxx.com,但不知道其IP地址,这时它就要通过DNS查询来获得这个域名的IP地址。现在我们看看域名解析的整个过程把!
首先,heike.angel.com会将解析请求发往它的DNS服务器,
请求解www.xxx.com
heike.angel.com__________________________________________cn.angel.com
这个名字请求是从heike.angel.com的某个随机选择的端口发送cn.angel.com的53端口,这是DNS服务器的绑定端口。
cn.angel.com收到这个解析请求后,就开始解析工作了。这时如www.xxx.com的IP地址cn.angel.com的缓存之中,那么询问别的DNS服务器。
它首先询cn.angel.com会把查询的结果返回cn.angel.com
请问com的权威服务器
cn.angel.com_______________________________________________cn.internic.com
com域名权威服务器IP是22.1.2.3
cn.angel.com_______________________________________________cn.internic.com
这cn.internic.com回答cn.angel.com,COM域的权威DNS是IP22.1.2.3,然cn.angel.com就会向22.1.2.3查询xxx.com子域的DNS服务器的地址。 请问xxx.com子域的DNS
cn.angel.com_______________________________________________cn.internic.com
xxx.com子域的DNS是200.1.1.1
cn.angel.com_______________________________________________cn.inrernic.com
现在cn,angel.com知道了xxx.com子域的权威服务器的IP地址了。这时它就可以询www.xxx.com的IP地址了。
请www.xxx.com的IP地址 cn.angel.com_______________________________________________200.1.1.1
www.xxx.com的IP地址是200.1.1.1
cn.angel.com_______________________________________________200.1.1.1
现cn.angel.com就得到www.xxx.com的IP地址了,它再将这个IP地址反还给请求解析的heike.angel.com
www.xxx.com的IP地址是200.1.1.1
heike.angel.com_____________________________________________cn.angel.com
heike.angel.com知道www.xxx.com的IP地址后就可以和它进行连接了,整个域名解析过程就这么结束了!
DNS欺骗的原理
看到了上面的域名解析过程,我们就会想,如果cn.angel.com向xxx.com的子域DNS服务器200.1.1.1询www.xxx.com的IP地址时,我们冒充200.1.1.1给www.xxx.com的IP地址,这个IP地址是一个虚拟的地址,列如202.109.2.2,这cn.angel.com就会把202.109.2.2当www.xxx.com的地址返还给heike.angel.com了。当heike.angel.com连www.xxx.com时,就会转向我们提供的那个虚假的IP地址了,这样对www.xxx.com来说,就算是给黑掉了。因为别人根本连接不上他的域名。
这就是DNS欺骗的基本原理,但正如同IP欺骗一样。DNS欺骗在技术上实现上仍然有一些困难,为了理解这些困难我们要看一下DNS查询包的结构。在DNS查询包中有一个重要的域叫做做标识ID。用来鉴别每个DNS数据包的印记,从客户端设置。由服务器返回,它可以让客户匹配请求与响应。看看下面一个列子也许你会明白些
请www.xxx.com的IP地址
cn.angel.com______________________________________________200.1.1.1
这时黑客只需要用假的200.1.1.1进行欺骗,并且在真正的200.1.1.1返回cn.angel.com信息之前,先于它给出所查询的IP地址。
cn.angel.com_____________ ← _______200.1.1.1
↓ www.xxx.com的IP地址是1.1.1.1
↓__________________________________黑客
这个过程很直观,就是在200.1.1.1前cn.angel.com送出一个伪造的DNS信息包,但正如前面说过的,如果要发送伪造的DNS信息包而不被识破,就必须伪造正确的ID,也就是说,如果无法判别这个标识符的话,欺骗将无法进行。这在区域网上很容易实现,只要安装一个sniffer,(sniffer在上次我给大家将了请查考黑客防线2002/11月的把这里不说明了)通过袖探就可以知道这个ID。但如果是在Internet上实现欺骗,就只有发送大量的一定范围的DNS信息包,通过碰运气的办法来提高给出正确标识ID的机会。下面我们就来看看用sniffer嗅探到标识ID的情况下,怎么进行DNS欺骗。
DNS欺骗的现实过程
继续上面的列子,假设我们已经成功的攻击了200.1.1.1子网中任意一台主机,并且通过安装sniffer的方法对整个子网中传输的包进行嗅探,我们可以设置只对进出200.1.1.1的包进行观察,从而获得我们需要的标识ID。当DNS服务器200.1.1.1发出查询包时,它会在包内设置标识ID,只有应答包中的ID值和IP地址都正确的时候才能为服务器所接受。这个ID每次自动增加1,所以可以第一次向要欺骗的DNS服务器发一个查询包并监听到该ID值,随后再发一个查询包,紧接着马上发送我们构造好的应答包,包内的标识ID为预测的值。为了提高成功效率可以指定一个范围,比如在前面监听到的哪个ID+1的范围之间。接上列,如cn.angel.com向200.1.1.1发来了要求查www.xxx.com的IP地址的包,此时,200.1.1.1上的黑客就要欺cn.angel.com。
cn.angel.com→→→→→→→→→→→→→→→→→→→200.1.1.1 [Query]
NQY:1 NAN:0 NNS:0 NAD:0 QID:6573
QY:www.xxx.con A
其中NQY,NAN等是查询包的标志位。当这两个标志位为“1”时表示是查询包,这时我们就可以在200.1.1.1上监听到这个包,得到他的ID为6573.然后紧接着我们也向200.1.1.1发出一次查询,使它忙于应答这个包
1.1.1.1→→→→→→→→→→→→→→→→→→→200.1.1.1 [Query]
NQY:1 NAN:0 NNS:0 NAD:0
QY:other.xxx.com A
紧接着发带预测QID的应答包
200.1.1.1→→→→→→→→→→→→→→→→→→cn.angel.com [Answer]
NQY:1 NAN:0 NNS:0 NAD:0 QID:6574
QYwww.xxx.com PTR
ANwww.xxx.com PTR 111.222.333.444
111.222.333.444就是由我们来指定的IP地址。注意发这个包时标识ID为前面监听到的ID值加1既小学老师告诉你的6574+1=6575。这样,DNS欺骗就完成了cn.angel.com就会把111.222.333.444当www.xxx.com的IP地址了。假如111.222.333.444是一台已经被我们控制的计算机,可以把它的主页改成我们想要的内容,这时当被欺骗的用户连接www.xxx.com时。他就以为这个网站已经被黑掉了。
DNS欺骗的防范
那么如何挫败这种攻击呢?这也很简单,直接用IP访问重要的服务,这样至少可以避开DNS欺骗攻击。最根本的解决办法就是加密所有对外的数据流,对服务器来说就是尽量使用SSH之类的有加密支持的协议,对一般用户应该用PGP之类的软件加密所有发到网络上的数据。说起来容易,做起来难!