专栏名称: 看雪学苑
致力于移动与安全研究的开发者社区,看雪学院(kanxue.com)官方微信公众帐号。
目录
相关文章推荐
新消费日报  ·  腾讯加持,IDG前副总裁带轻松集团冲击港股IPO! ·  14 小时前  
新消费日报  ·  腾讯加持,IDG前副总裁带轻松集团冲击港股IPO! ·  14 小时前  
广西广播电视局  ·  自治区广电局圆满完成2025年春节广播电视安 ... ·  昨天  
广西广播电视局  ·  自治区广电局圆满完成2025年春节广播电视安 ... ·  昨天  
嘶吼专业版  ·  【急聘】蚂蚁安全天穹光年实验室,招人啦~~ ·  昨天  
西藏举报  ·  提醒!看见这种微信红包,别点开!速删除 ·  2 天前  
赛博禅心  ·  国家超算互联网,上线 DeepSeek,供全民使用 ·  2 天前  
赛博禅心  ·  国家超算互联网,上线 DeepSeek,供全民使用 ·  2 天前  
51好读  ›  专栏  ›  看雪学苑

frame busting 各种姿势,防护总结(一)

看雪学苑  · 公众号  · 互联网安全  · 2017-06-08 17:59

正文

00

摘要


Web 框架攻击例如使用 iframe 来劫持用户的 Web 会话。最常见的防御措施,成为framebusting,防止一个网站从功能上载入一个 frame 框架,我们研究了 Alexa Top-500 网站的 framebusting 实例,显示所有这些都可以以某种方式而绕过,一些绕过是由浏览器指定的,而其他的是跨浏览器工作的。由此我们建议使用适当的 framebusting。


01

介绍


Framebusing 是由旨在防止网页加载到 sub_frame 中的网页自带的代码或者注释。 Framebusing 推荐用来防御点击劫持攻击也推荐应用与基于图像的安全认证如雅虎的登陆密码。登陆密码显示用户所选择的图像用于向用户验证雅虎的登陆界面。没有使用framebusting的话,即使顶部的界面并不是真正的雅虎登陆界面,登陆界面还是能够被加载到子框架中以便正确的图像能够显示给用户。新的高级点击劫持技术使用drag-and-drop 从框架中提取和注入数据进一步显示了 framebusting 的重要性。

figure1    一个可视化的针对推特的账户删除界面的点击劫持攻击

图一展示了一个点击劫持攻击:受害站点被嵌入到一个看起来正常页面的 iframe 上,当用户和正常界面进行交互的时候他们回无意的与受害站点进行交互。为了防御点击劫持攻击,下面这段常用的网站代码展示了简单的 framebusting 技术:

i f ( top.location != location )

top.location=self.location

frame busting 代码通常由条件申明和首页导航到正确位置的反作用组成,我们将会看到,这个基本代码相当容易绕过。我们会在论文后面谈论更为复杂的framebusting(及其规避技术)。

我们的工作:我们首先对 alex-top500 的网站使用的 framebusting 代码进行调查,这些调查包括了银行,社交网络,电子商务,交易和游戏等领域。我们还对所有的美国顶尖的银行进行调查,因为这些都是明显的高风险的劫持目标。第二部分介绍了我们用来定位和提取 framebusting 代码的半自动化工具。结果显示平均使用了 3.5 行 javascript 代码,而最庞大的应用代码使用了25行。大多数的 framebusting 代码被构造成测试框架的条件块,然后检测框架的反作用。

% of web site


Top 500
Top 100
Top 10

14%
37%
60%

表1: Frame busting 在Alexa-Top 站点的使用率

大多数的顶部导航都指向正确的网页,少数会通过 document.write(‘‘) 来清除框架内容,有些使用外来条件和反动作。我们将在下部分描述我们我找到的 framebusting 代码。表1总结了 top500 网站上的 framebusting 的情况。明显的 framebusting 远不是普遍存在,这表明劫持攻击仍然被主要网站忽视。

本文组织方式如下:第二部分描述了我们做的调查,第三部分我们转向对 framebusting 代码攻击的一些探讨,我们将会演示在现今的代码在主流浏览器中都能被绕过。我们会同时演示新旧两种技术。在第四部分我们会讨论针对特定网站如社交网络或零售站点的对外部 framebusting 的攻击。第五部分我们讨论了更安全的framebusting策略,同时讨论在基于 X-FRAME-OPTIONS 头部的 framebusting 的备用方法。从我们的调查来看只有三个站点使用这个字段,其他所有的 framebusting 都是基于javascript。


02

对 framebusting 的调查


一些 top500 站点有大量的内联或者动态加载的 javascript 代码。手工过滤这些代码来找到 framebusting 代码段非常困难,更不必说大多数站点使用的 javascript 混淆和主要源代码打包技术。

为了定位 framebusting 代码我们使用了一个陈祚 HTMLUnit 的基于 java 的浏览器仿真器。作为一个无头部仿真器他可以用来做受限的 javascript 调试。这样给了我们动态框架页面同时中断在真正的 framebusting 代码上。尽管这款工具帮了大忙,一些人工的反混淆和追踪打包代码还是需要我们来做。在 top500 网站中,许多网站没有在主页上使用 framebusting。相反的他们实施在登陆和密码重置的页面使用了 framebusting。一些人工工作还需要去定位一些部署了 framebusting 的子页面。

流行的 framebusting 代码

在我们的调查重大多数站点使用的 framebusting 代码,如表 2 和 3,一些站点部署了多重的反动作和条件作为备份。五个这站点额外地依靠 document.referer() 来测试是否框架化,更多的外部 framebustingcode 将会在第四部分讨论。


03

一般攻击


在讨论更急奇异的 framebusting 代码之前,我们首先讨论大量的攻击方法,如表2和3 所示,在这部分最后我们在表4之中给出这类攻击的总结。

Common framebusting code

Table 2: Frame busting conditional statement

Table 3: Counter-action statement


Figure 2:Double Framing Attack


3.1

双框架


在表 3 中一些计数动作通过给 parent.location 赋值来导向正确的页面,如果受害站点是单页面框架的国华这个方法工作分很好,然而,我们发现攻击者如果将目标双框架化,由此 parent.location 就变成了所有流行浏览器的一个安全违例,因为底部框架的导航策略是由我们定义且应用的。安全违例禁用了计数动作导航。

例子:受害站点的 framebusting 代码:

If(top.location!= self.location){

Parent.location=self.location;

}

攻击者顶部框架

攻击者子框架


3.2

onBeforeUnload 事件


用户何以手动取消由框架页面提交的导航请求。为了利用这个页面,可注册一个由于导航无论何时都不会被框架页面加载的 onBeforeUnload 句柄。句柄返回一个回显给用户的字符串,假设攻击者框架 paypal,他注册一个不加载的句柄函数赖回显一个字符串:do you want to exit paypal?当这个字符串回显给用户的时候,用户极有可能退出导航,这样久挫败了 paypal 的 framebusting 代码。

攻击者通过在顶部页面使用以下代码来注册一个不被加载的函数来发动攻击

  • Safari 4.0.

我们观察到虽然在大多数情况下location变量是定值,但当用户location配置器是通过

defineSetter来定义的时候,location对象就会变成未定义的状态。框架页面只需简单地这样做:







请到「今天看啥」查看全文