DNS缓存服务器投毒

只要黑客想这么做,那我可以保证,您访问的Google,绝不是Google,淘宝也不是淘宝,而是一个伪装的网站,2008年,给ISP的DNS缓存服务器投毒是安全界最热门的话题,并且,这个问题仍然无法解决……

通过本文,会看到一些奇妙的事情:

1、您发现在自家电脑的浏览器里输入www.91ri.org,访问的却是矛盾网。

2、随意的给google加个子域名,比如test.91ri.org。

他们都基于一个技术 -- 给ISP(如,电信/网通)的DNS缓存服务器投毒,也称作UDP会话劫持。
* 投毒原理

首先,您必须明白DNS的工作原理(详细的DNS原理)
DNS投病

先看蓝色的线条,这是正常的DNS解析流程

DNS投病

1)终端电脑(您的个人电脑)在用浏览器访问网页时,首先要在浏览器的地址栏中填入一个网址(如,www.91ri.org),可我们的个人电 脑必须知道这个网址对应的IP地址,才可以正常浏览网页(如,www.91ri.org对应的IP地址是1.1.1.1)。于是,你的电脑就发送一个解析请求给暂存DNS伺服器,这个请求其实就是一句话“您能告诉我www.91ri.org对应的IP地址吗?”

2)如果暂存DNS伺服器上没有www.91ri.org对应的IP地址,则暂存DNS伺服器就会通过迭代的方法最后询问主要DNS伺服器。主要DNS伺服器上保存有www.91ri.org对应的IP地址。

3)主要DNS伺服器响应暂存DNS伺服器的请求,其实就是一句话“www.91ri.org对应的IP地址是1.1.1.1”。

4)暂存DNS伺服器收到主要DNS伺服器的应答后,把应答消息转发给一开始询问自己的那台个人电脑。

5)您的浏览器使用这个正确的IP访问Google主页。

这就意味着,黑客只要伪造响应报文给暂存DNS伺服器,暂存DNS伺服器上就记录了错误的域名到IP地址的对应关系,然后暂存DNS伺服器把这个错误的对应关系发给先前查询的用户计算机的浏览器,这样,您尽管在浏览器里输入的是www.91ri.org,可访问的确不是真正的IP地址,这个地址是黑客任意指定的。

红色线条是黑客在您DNS解析时的投毒过程

1)用户请求暂存DNS伺服器返回www.91ri.org的IP地址。

2)如果暂存DNS伺服器上没有www.91ri.org对应的IP地址,暂存DNS伺服器就会通过迭代的方法最后询问主要DNS伺服器。

3)在主要DNS伺服器还未返回给暂存DNS伺服器时,黑客趁此时间空隙,把错误的对域名到IP的应关系告诉暂存DNS伺服器,这就是给DNS缓存服务器的一次投毒。

4)暂存DNS伺服器回应给用户错误的域名到IP对应关系。

5)用户访问黑客任意指定的IP地址,比如指向矛盾网(矛盾网因此获得了非常高的流量,如果矛盾网想冒充网上银行也是可以的)。

因为暂存DNS伺服器会在一段时间内发送多个DNS查询报文,所以为了使查询报文与响应报文匹配,在DNS的报头中使用了ID字段,响应的报头ID必须与先前发出去的查询报头ID一致才会被暂存DNS伺服器收录,否则丢弃。所以,黑客若想投毒成功,必须猜中查询报文的ID号。DNS报头的ID号是16位2进制,也就是有2的16次方=65536个ID号,这就是说黑客一次投毒的命中率是1/65536,不过只要攻击程序稍微优化一下,这个命中率可以缩小到1/655,几秒钟就可以搞定。
* 攻击测试

测试目的
仅为了引起ISP(比如,电信、网通)对DNS服务器的安全重视,禁止非法使用。

攻击工具
kaminsky-attack(您也可以通过Google搜索下载源码自己编译)

测试步骤

在命令行下输入(我用的是Linux系统):

[admin@Linux] ./kaminsky-attack q.q.q.q 202.96.209.5 a.a.a.a 1234 www 91ri.org. 8.8.8.8 8192 16

命令说明

q.q.q.q是发送DNS请求的客户机IP地址,可以随意设置
202.96.209.5是上海的DNS缓存服务器(黑客投毒的目标)
a.a.a.a是91ri.org的权威DNS服务器,可以随便设置
www是主机名
91ri.org是域名(与www联合起来就是一个完整的FQDN名)
8.8.8.8是毒药,让DNS缓存服务器存储错误的A记录(域名到IP的对应关系)
8192是猜测次数(次数越大命中率越大)

攻击原理

这个程序有双重身份,一个是普通客户端,另一个是黑客,程序先给DNS缓存服务器发送一个DNS解析请求,然后快速给DNS缓存服务器发送8192个伪造的响应包,使其中毒。

重要提示

在测试之前,您应该明白,对于91ri.org这样知名的网站,几乎时时有用户在请求解析,就是说DNS缓存服务器上总是有91ri.org的A记录,而这时黑客的投毒是无效的。但这并不防碍黑客伪造2级域名,比如:
[admin@Linux] ./kaminsky-attack q.q.q.q 202.96.209.5 a.a.a.a 1234 aorb 91ri.org. 8.8.8.8 8192 16

因 为可以肯定DNS缓存服务器上不会有aorb.91ri.org的A记录,所以投毒100%成功,与此同时,www.googl.com也中毒了,这 是为什么?如果您了解DNS响应报文,就会明白,响应报文中不但会有aorb.91ri.org的A记录,还可以捎带名曰附加记录的信息,这里的附加记录是www.91ri.org对应的IP地址。这样,DNS缓存服务器同样更新了www.91ri.org对应的错误IP地址。

另外,您也可以在本地查询DNS缓存服务器上是否存有目标域名的记录。在命令行下输入:

[admin@Linux]nslookup

>set norecurse(norecurse是告诉客户端不使用递归查询,因此,如果DNS缓存服务器上没有目标域名记录,则会返回相关提示。如果显示的是非授权区域提供的信息,则表示DNS缓存服务器已经有了目标域的资源记录)

> 91ri.org
*防止投毒

目前还没有更好办法阻止黑客的这种行为,只有使DNS缓存服务器发出的查询请求使用动态的UDP端口,UDP的端口号也是16位2进制,这样,与DNS的ID号相结合,号码的命中率就是1/4294967296(2的32次方)。

也许您对下列信息感兴趣:

这是一段DNS投毒动画http://www.infobyte.com.ar/demo/evilgrade.htm

TCP会话劫持

91ri.org点评:很老的东西了,刚才浏览文章时顺手翻到的,就发上来给还不知道的同鞋分享分享。
因为个人疏忽 导致图没贴上 最近在忙着训练准备比赛 搞的脑子都有点SB了 大家见谅  :-?
作者:AorB

本文由网络安全攻防研究室(www.91ri.org) 信息安全小组收集整理.转载本文请著名原文地址及原作者版权信息。