2013年5月30日星期四

网络安全---点击劫持(ClickJacking)

网络安全---点击劫持(ClickJacking)  

2012-08-13 14:49:25|  分类: 网络 |字号 订阅
一、什么是点击劫持?
点击 劫持是一种视觉上的欺骗手段。攻击者使用一个透明的、不可见的iframe,覆盖在一个网页上,然后诱使用户在该页面上进行操作,此时用户将在不知情的情 况下点击透明的iframe页面。通过调整iframe页面的位置,可以诱使用户恰好点击在iframe页面的一些功能行按钮上。

二、Flash点击劫持
首先,攻击者制作了一个Flash游戏,并诱使用户来玩这个游戏。这个游戏就是让用户去点击"CLICK"按钮,每次点击后这个按钮的位置都会发生变化。
在其上隐藏了一个不可见的iframe
最终通过一步步的操作,打开了用户的摄像头。

三、图片覆盖攻击
点击劫持的本质是一种视觉欺骗,顺着这个思路,还有一些攻击方法也可以起到类似的作用,比如图片覆盖。
一名叫做sven.vetsch的安全研究者最先提出了这种Cross Site Image Overlaying攻击,简称XSIO。
用一张图片覆盖原来的Logo。当用户点击的时候链接到自己的钓鱼网站。
图片还可以伪装得像一个正常的链接、按钮;或者在图片中构造一些文字,覆盖在关键的位置,就有可能完全改变页面中想表达的意思,在这种情况下,不需要用户点击,也能达到欺骗的目的。
比如,利用XSIO修改页面中的联系电话。可能会导致很多用户上当。
由于<img>标签在很多系统中是对用户开放的,因此在现实中有非常多的站点存在被XSIO攻击的可能。在防御XSIO时,需要检查用户提交的HTML代码中,<img>标签的style属性是否可能导致浮出。

四、拖拽劫持与数据窃取
目前很多浏览器都开始支持Drag &Drop API。对于用户来说,拖拽使得他们的操作跟家简单。浏览器中的拖拽对象可以是一个链接,也可以是一段文字,还可以从一个窗口拖拽到另一个窗口,因此拖拽是不受同源策略限制的。
“拖拽”劫持的思路是诱使用户从隐藏的不可见的iframe中“拖拽”出攻击者希望得到的数据,然后放在攻击者能控制的另外一个页面中,从而窃取数据。
在javascript或者Java API的支持下,这个攻击过程变得非常隐蔽。因为它突破了传统ClickJacking一些先天的局限,所以这种新型"拖拽劫持“能够造成更大的破坏。
国内的安全研究者xisigr曾经构造了一个针对Gmail的POC,其过程大致如下:
首先,制作一个网页小游戏,要把小球拖拽到小海豹的头顶上。
实际上,小球和小海豹的头顶上都有隐藏的iframe。
在 这个例子中,xisigr使用event.dataTransfer.getData("Text")来获取"drag"到的数据。当用户拖拽小球时,实 际上是选中了隐藏的iframe;在放下小球时,把数据也放在了隐藏的textarea中,从而完成一次数据窃取的过程。

五、ClickJacking3.0:触屏劫持
到了2010年9月,智能手机上的”触屏劫持“攻击被斯坦福的安全研究者发布,这意味着ClickJacking的攻击方式更进一步。安全研究者将这种触屏劫持称为TapJacking。
通过将一个不可见的iframe覆盖到当前网页上,可以劫持用户的触屏操作。
利用手机浏览器隐藏地址栏,攻击者自己画出一个地址栏来欺骗用户。

六、防御ClickJacking:
针对传统的ClickJacking,一般是通过禁止跨域的iframe来防范。
1,frame busting:
通常可以写一段Javascript代码,以禁止iframe嵌套。这种方法叫frame busting.比如:
if (top.location!=location){
  top.location=self.location;
}
常见的frame busting有以下这些形式:
if (top!=self)
if (top.location!=self.location)
if (top.location !=location)
if (parent.frames.length>0)
if (window!=top)
if (window.top!=window.self)
if (parent && parent!=window)
...
但是frame busting也存在一些缺少,由于它是用Javascript编写的,控制能力并不是特别强,有很多方法可以绕过TA。
比如针对parent.location的frame busting,就可以采用嵌套多个iframe的方法绕过。

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

2,X-Frame-Options:
使用HTTP头---X-Frame-Options.
X-Frame-Options可以说是为了解决ClickJacking而生的。
它有3个可选的值:DENY、SAMEORIGIN、ALLOW-FROM origin
当值为DENY时,浏览器会拒绝当前页面加载任何frame页面;若值为SAMEORIGIN,则frame页面的地址只能为同源域名下的页面;若值为ALLOW-FROM,则可以定义允许frame加载的页面地址。

没有评论:

发表评论