白帽子讲web安全-点击劫持笔记1

点击劫持通常借助于frame才能发生,理解浏览器针对frame的导航策略有助于理解点击劫持。
这篇文章是对这个paper的总结


frame是什么

frame是一类html标签,包括frame和iframe。允许一个html页面嵌套另一个页面,如下图所示。
右边页面里面有一个嵌套页面,这里是搜狐,就是使用frame标签的效果。如果点击W3School.com.cn,将会跳转到新浪网,这里不再展示。
这里写图片描述

浏览器策略

脚本策略

脚本策略是浏览器最重要的安全策略,因为脚本能够完全控制另一个frame的外观和行为。现代的浏览器允许同源的frame使用脚本读写另一个frame的所有DOM属性。

导航策略(navigation policy)

导航的意思是修改frame的location,在html里面,location是指当前对象的URL。导航策略解决所有的浏览器必须回答的一个问题“什么时候允许一个frame导航另一个frame”,也就是可以修改另一个frame的URL。在1999年以前,所有的web浏览器采用允许策略(permissive policy),“一个frame可以导航任何一个其他的frame”。例如,如果otherWindow包含一个frame:

otherWindow.frames[0].location = "https://attacker.com/";

,将会导航至https://attacker.com。在允许策略下,即便导航至另一个安全域,也是可以的。这就违法了浏览器的同源策略。还有其他一些导航frame的用法:

window.open("https://attacker.com/","frameName")

将会请求浏览器搜索名字是“frameName”的frame,并将这个frameName导航到attacker.com。Frame名称存在于浏览器的全局名称空间,不会受到同源策略的限制。

针对允许策略的跨窗口攻击

研究人员在1999年发现了这种攻击,攻击过程如下:
1. 用户访问了一个博客网站,里面有攻击站点attacker.com提供的flash广告
2. 用户同时打开了一个新的窗口,访问了bank.com网站,其中包含一个输入用户密码的frame
3. attacker.com的恶意广告将bank.com的包含密码输入框的frame导航到https://attacker.com的一个外观相似的frame。此时地址栏依然在bank.com,https的锁图标也正常
4. 用户输入他的密码,但是被提交给attacker.com
在今天广泛使用的浏览器中,IE6和Fafari3采用允许策略。IE7和FireFox2采用更严格的策略。然而,Flash Player可以被用来绕过IE7更严格的策略,使其降为允许策略。

窗口策略(Window Policy)

是指“一个frame只能导航本窗口里面的frame”。这样能防止跨窗口攻击。
窗口策略假设一个诚实的主体,不会包含一个不诚实主体的frame,但是Mashup的出现,使得窗口策略的这一安全假设失效,导致同窗口攻击。以iGoogle为例,这是典型的Mashup站点,里面包含多个frame,可以包含来自不同站点的页面。在gadget劫持攻击中,当前页面的一个恶意gadget可以将另一个frame导航至attacker.com,并伪装成那个frame欺骗用户,这就是同窗口攻击。

后代策略(Descendant Policy)

除了允许策略和窗口策略,浏览器还有后代策略和孩子策略(child policy)。后代策略是指,“一个frame只能导航它的后代frame”。孩子策略是指,“一个frame只能导航它的直接孩子”。孩子策略显然比后代策略更加严格,但是这没有比后代策略增加更多的安全性,反倒带来和各种站点的易用性和兼容性问题,所以大多数浏览器采用了后代策略。
在后代策略下,如果一个frame包含另一个frame,那么父frame就将子frame那部分屏幕代理给子frame。浏览器阻止子frame绘制它自身绑定区域以外的内容,但是允许父frame使用position:absolution绘制子frame。
浏览器可以根据当前活动frame的安全域,和它要导航的目标frame是否同属一个安全域,如果不属于,则拒绝导航,这样就可以抵御同窗口攻击了。

猜你喜欢

转载自blog.csdn.net/leonard_wang/article/details/78931148