白帽子讲Web安全(第 5 章 点击劫持( ClickJacking ))

第 5 章 点击劫持( ClickJacking )

2008 年,安全专家 Robert Hansen 与 Jeremiah Grossman 发现了一种被他们称为“ ClickJacking ”(点击劫持)的攻击,这种攻击方式影响了几乎所有的桌面平台,包括 IE、Safari、Firefox、Opera 以及 Adobe Flash。两位发现者准备在当年的 OWASP 安全大会上公布并进行演示,但包括 Adobe 在内的所有厂商,都要求在漏洞修补前不要公开此问题。

5.1 什么是点击劫持

点击劫持是一种视觉上的欺骗手段。攻击者使用一个透明的、不可见的 iframe,覆盖在一个网页上,然后诱使用户在该网页上进行操作,此时用户将在不知情的情况下点击透明的 iframe 页面。通过调整 iframe 页面的位置,可以诱使用户恰好点击在 iframe 页面的一些功能性按钮上。

点击劫持攻击与 CSRF 攻击有异曲同工之妙,都是在用户不知情的情况下诱使用户完成一些动作。但是在 CSRF 攻击的过程中,如果出现用户交互的页面,则攻击可能会无法顺利完成。与之相反的是,点击劫持没有这个顾虑,它利用的就是与用户产生交互的页面。

5.2 Flash 点击劫持

攻击者制作了一个 Flash 游戏,并诱使用户来玩这个游戏。这个游戏就是让用户去点击“ CLICK ” 按钮,每次点击后这个按钮的位置都会发生变化。最终通过这一步步的操作,打开了用户的摄像头。

5.3 图片覆盖攻击

点击劫持的本质是一种视觉欺骗。顺着这个思路,还有一些攻击方法也可以起到类似的作用,比如图片覆盖。

一名叫 sven.vetsh 的安全研究者最先提出了这种 Cross Site Image Overlaying 攻击,简称 XSIO。

XSIO 不同于 XSS,它利用的是图片的 style,或者能够控制 CSS。如果应用没有限制 style 的 position 为 absolute 的话,图片就可以覆盖到页面上的任意位置,形成点击劫持。

由于 <img> 标签在很多系统中是对用户开放的,因此在现实中有非常多的站点存在被 XSIO 攻击的可能。在防御 XSIO 时,需要检查用户提交的 HTML 代码中, <img> 标签的 style 属性是否可能导致浮出。

5.4 拖拽劫持与数据窃取

目前很多浏览器都开始支持 Drag & Drop 的 API。对于用户来说,拖拽使他们的操作更加简单。浏览器中的拖拽对象可以是一个链接,也可以是一段文字,还可以从一个窗口拖拽到另外一个窗口,因此拖拽是不受同源策略限制的。

“拖拽劫持”的思路是诱使用户从隐藏的不可见 iframe 中“拖拽”出攻击者希望得到的数据,然后放到攻击者能控制的另外一个页面中,从而窃取数据。

5.5 ClickJacking 3.0:触屏劫持

到了 2010 年 9月,智能手机上的“触屏劫持”攻击被斯坦福的安全研究者公布,这意味着 ClickJacking 的攻击方式更进一步。安全研究者将这种触屏劫持称为 TapJacking。

比如一次触屏操作,可能会对应以下几个事件:

  • touchstart:手指触摸屏幕时发生;
  • touchend:手指离开屏幕时发生;
  • touchmove:手指滑动时发生;
  • touchcancel:系统可取消 touch 事件。

通过将一个不可见的 iframe 覆盖到当前网页上,可以劫持用户的触屏操作。

5.6 防御 ClickJacking

ClickJacking 是一种视觉上的欺骗,那么如何防御它呢?针对传统的 ClickJacking,一般是通过禁止跨域的 iframe 来防范。

5.6.1 frame busting

通常可以写一段 JavaScript 代码,以禁止 iframe 的嵌套。这种方法叫 frame busting。

但是 frame busting 也存在一些缺陷。由于它是用 JavaScript 写的,控制能力并不是特别强,因此有许多方法可以绕过它。

比如针对 parent.location 的 frame busting,就可以采用嵌套多个 iframe 的方法绕过。

像 HTML 5 中 iframe 的 sandbox 属性、IE 中 iframe 的 security 属性等,都可以限制 iframe 页面中的 JavaScript 脚本执行,从而可以使得 frame busting 失效。

5.6.2 X-Frame-Options

因为 frame busting 存在被绕过的可能,所以我们需要寻找其他更好的解决方案。一个比较好的方案是使用一个 HTTP 头----X-Frame-Options。

X-Frame-Options 可以说是为了解决 ClickJacking 而生的。它有三个可选的值:

  • DENY
  • SAMEORIGIN
  • ALLOW-FROM

DENY:浏览器会拒绝当前页面加载任何 frame 页面;
SAMEORIGIN:frame 页面的地址只能为同源域名下的页面;
ALLOW-FROM:可以定义允许 frame 加载的页面地址。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值