web安全——点击劫持(ClickJacking)

2,542 阅读4分钟

前端阅读室

什么是点击劫持

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

通过控制iframe的长、宽,以及调整top、left位置,可以把iframe页面内任意部分覆盖到任何地方。同时设置iframe的position为absolute,并将z-index的值设置为最大,以达到让iframe处于页面的最上层。最后,再通过设置opacity来控制iframe页面的透明程度,值为0是完全不可见。

在CSRF攻击中,如果出现用户需要交互的页面,攻击可能无法完成。但是,点击劫持没有这个问题,因为它利用的就是与用户产生交互的页面。

Flash点击劫持

曾经有一个ClickJacking攻击案例,攻击者可以通过Flash构造了点击劫持,在完成一系列复杂的动作后,最终控制了用户电脑的摄像头。

攻击者制作了一个Flash游戏,这个游戏就是让用户去点击“CLICK”按钮,每次点击后这个按钮的位置都会发生变化。在Flash上面隐藏了一个看不见的iframe,攻击通过诱导用户鼠标点击就能完成较复杂的动作。

图片覆盖攻击

图片覆盖也可以起到类似的点击劫持的作用。(XSIO,Cross Site Image Overlaying)

通过调整图片的style可以使图片覆盖的任意指定位置。

<img style="position: absolute; right: 320px; top: 90px">

如果应用没有限制style的position为absolute的话,图片可以覆盖到页面上的任意位置。

用户点击图片,如果链接到一个钓鱼网站,用户可能就上当了。

图片还可以伪装得像一个正常的链接、按钮;或者在图片中构造一些文字,覆盖在关键的位置,就有可能完全改变页面中想表达的意思。这种情况下,不需要用户点击,也能达到欺骗的目的。比如,修改图片中的联系电话。

由于img标签在很多站点都是对用户开放的,在防御XSIO时,需要检查用户提交的HTML代码中,img标签的style属性是否可能导致浮出。

拖拽劫持与数据窃取

目前很多浏览器都支持Drag & Drop的API。浏览器中的拖拽对象可以是一个链接,也可以是一段文字,还可以从一个窗口拖拽到另一个窗口,因此拖拽是不受同源策略限制的。

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

ClickJacking3.0:触屏劫持

安全研究者称其为TapJacking。

从手机OS的角度来看,触屏实际上就是一个事件,手机OS捕捉这些事件,并执行相应的动作。

常见的几个事件:

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

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

针对视觉效果的攻击可以被利用进行钓鱼和欺诈。

防御ClickJacking

针对传统的ClickJacking,一般是通过禁止跨域的iframe来防范。

frame busting

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

if (top.location != location) {
  top.location = self.location;
}

当然,还要很多很多frame busting的写法,这里就不一一罗列了。

frame busting有一些缺陷,由于它是用JavaScript写的,控制能力并不是特别强,因此有很多方法可以绕过它。此外像HTML5的sandbox属性、IE中iframe的security属性等,都可以限制iframe页面中的JavaScript脚本执行,从而使frame busting失效。

X-Frame-Options

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

DENY 拒绝当前页面加载任何frame页面
SAMEORIGIN frame页面的地址只能为同源域名下的页面
ALLOW-FROM origin 定义允许frame加载的页面地址

除了X-Frame-Options之外,Firefox的“Content Security Policy”以及Firefox的NoScript扩展也能有效防御ClickJacking。这些方案为我们提供了更多的选择。

小结

ClickJacking主要被利用在钓鱼、欺诈和广告作弊等方面。相对于XSS与CSRF来说,因为需要诱导用户与页面产生交互行为,因此实施攻击的成本更高,在网络犯罪中比较少见。

前端阅读室