【DNS安全】DNS rebinding攻击

这个攻击我理解了挺久,不明白“重绑定”到底是什么意思。稍微明白后,发现攻击原理就是字面意思,重新更新一下DNS A记录,绑定为别的地址。

下面这一段,我引用了某位仙人的笔记

“To mount a DNS rebinding attack, the attacker need only
register a domain name, such as attacker.com, and attract
web traffic, for example by running an advertisement. In
the basic DNS rebinding attack, the attacker answers DNS
queries for attacker.com with the IP address of his or her
own server with a short time-to-live (TTL) and serves vis-
iting clients malicious JavaScript. To circumvent a firewall,
when the script issues a second request to attacker.com, the
attacker rebinds the host name to the IP address of a tar-
get server that is inaccessible from the public Internet. The
browser believes the two servers belong to the same origin
because they share a host name, and it allows the script to
read back the response.

同源规则

这个规则是为了保证同一个域名下不会出现跨站调用而制定的规则,不过我个人认为现在也就是个鸡肋了,一会我再解释吧。这个规则要求在同一个域下面的东西不会引用其它域的内容。如果存在http://www.example.com/dir/目录,那么同源规则解释如下:

地址                               解释

http://www.example.com/dir2        目录不同,但是domain相同,所以符合同源规则,

                                   资源可以互相引用

http://www.example.com:82/dir/     由于端口不同,所以不符合同源规则

http://www.anotherone.com/         不同域名,所以不符合同源规则

 

但是!!这个规则不适用于<script>,<link>,<iframe>,<img>等标签的SRC属性。这也是为什么同源规则无法防止挂马的根本原因。。。。太囧啦。。。不过同源规则最大的帮助就是帮我们区分开各个网站的cookie,不同源的cookie信息会保存到不同的域名文件下哦。

 

好了,有了这些概念,我们就可以开始说DNS重定向。

 

DNS重绑定其实一言概之,就是偷龙转风,狸猫换太子。通过欺诈的手段把你在站点A的资源引入到站点B上,然后随心所欲地调用这些资源干坏事。怎么个做法呢?方法很简单(以下例子参照http://ha.ckers.org/blog/20091116/session-fixation-via-dns-rebinding/的文章)

1)弄一个域名,比如http://www.badguy.com/

2)瞄准一个目标,例如http://www.victim.com/

3)把http://www.badguy.com/的TTL注册为一个很短的时间,例如1秒

4)然后,在http://www.victim.com/注册个帐号,登录之后,在个人主页之类的地方上传些坏东西(例如木马,不过场景是假设的,所以可能会不成功哦,奉劝大家也别想着干坏事了:p)

5)登录http://www.victim.com/的时候选择记住密码,然后查看cookie的信息,把记录登录信息的那段信息截出来。写一段JS放到http://www.badguy.com/,让访问的用户都会保留这段cookie信息到http://www.badguy.com/的域名下。

6)让用户访问http://www.badguy.com/,之后用脚本控制这个用户在2秒后(>TTL时间)重定向到http://www.badguy.com/,在这段时间内我们需要马上关闭DNS服务器,并且把http://www.victim.com/的IP绑定到http://www.badguy.com/上,好了,两秒之后,如无意外,这个用户会访问到http://www.victim.com/上的你的登录页,如果有木马。。就会中招了吧

对于上面的几步,我有必要稍微解释一下,一开始确实不明白他在做什么。

主要是第6步,什么意思。首先,设定的http://www.badguy.com/的TTL为1秒,这个A记录保存在客户端的dns server上,1秒后超时。原文“让用户访问http://www.badguy.com/,之后用脚本控制这个用户在2秒后(>TTL时间)重定向到http://www.badguy.com/” 。2秒的时候,TTL失效了,这时候通过JS让用户重新访问badguy,客户端就要重新去查询DNS来获得IP地址。正好,hacker又事先停掉DNS,更新A记录,把真实的victim.com的ip地址与badguy的域名绑定在一起,然后启动DNS server。好了,这时候,客户端请求的badguy的ip地址是victim的了,换句话说,浏览器上的url确实是badguy,但是ip却指向了victim,客户就直接访问了victim。

再然后呢?我猜想作者的意思是说,因为之前victim的cookie保存在客户浏览器了,这样客户就登陆了victim页面。这里有有几点疑惑:

1.cookie用什么方式保存在客户端的浏览器的?

2.假设保存cookie成功了,而且用户被动访问到victim也成功登陆了,那登陆后的页面也是victim的主页吧,除非那种登陆后默认跳转到个人主页的还有商量。

以上即是重绑定的原理。

但,应该没完,为什么要这么复杂的工序呢,xss/csrf不是可以吗?从获取cookie到硬性重定向,JS都能做的。

这是文档上说了一句话:

“Using DNS rebinding,
an attacker can circumvent firewalls to spider corporate in-
tranets, exfiltrate sensitive documents, and compromise un-
patched internal machines. An attacker can also hijack the
IP address of innocent clients to send spam e-mail, commit
click fraud, and frame clients for misdeeds. DNS rebinding
vulnerabilities permit the attacker to read and write directly
on network sockets, subsuming the attacks possible with ex-
isting JavaScript-based botnets [24], which can send HTTP
requests but cannot read back the responses.”

我确实不明白是如何实现的。要进一步理解。

对于它的防护,DNSSEC无能为力。但DNS pinning可以,是浏览器实现的技术。即浏览器自己缓存DNS的域名和ip映射,即使dns server本地的TTL过期了,浏览器也会用他自己缓存的ip地址去连接,即在浏览器的缓存过期前,不再信任DNS server的回应。

posted @ 2011-01-27 18:30  Capricorn.python  阅读(5419)  评论(0编辑  收藏  举报