查看: 417|回复: 0

黑帽技术分享:点击劫持原理及操作技巧

[复制链接]

2296

主题

2428

帖子

9512

积分

管理员

高级管理员

Rank: 9Rank: 9Rank: 9

积分
9512
发表于 2019-3-22 11:39 | 显示全部楼层 |阅读模式
黑帽技术分享:点击劫持原理及操作技巧,2008年,安全专家Robert Hansen与Jeremiah Grossman发现了一种被他们称为“Clickjacking”(点击劫持)的攻击,这种攻击方式影响了几乎所有的桌面平台,包括IE、Safari、Firefox、Opera以及Adobe Flash。两位发现者准备在当年的OWASP安全大会上公布并进行演示,但包括Adobe在内的所有厂商,都要求在漏洞修补前不要公开此问题。

什么是点击劫持

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

看下面这个例子。在这个页面中插入了一个指向目标网站的iframe,出于演示的目的,我们让这个iframe变成半透明:

在这个test.html中有一个button,如果iframe完全透明时,那么用户看到的是:

当iframe半透明时,可以看到,在button上面其实覆盖了另一个网页:

覆盖的网页其实是一个搜索按钮:

当用户试图点击test.html里的button时,实际上却会点击到iframe页面中的搜索按钮。分析其代码,起到关键作用的是下面这几行:通过控制iframe的长、宽,以及调整top、le ft的位置,可以把iframe页面内的任意部分覆盖到任何地方。同时设置iframe的position为absolute,并将z-index的值设置为最大,以达到让iframe处于页面的最上层。最后,再通过设置opacity来控制iframe页面的透明程度,值为0是完全不可见。 这样,就完成了一次点击劫持的攻击。点击劫持攻击与CSRF攻击(详见“跨站点请求伪造”一章)有异曲同工之妙,都是在用户不知情的情况下诱使用户完成一些动作。但是在CSRF攻击的过程中,如果出现用户交互的页面,则攻击可能会无法顺利完成。与之相反的是,点击劫持没有这个顾虑,它利用的就是与用户产生交互的页面。

twitter也曾经遭受过“点击劫持攻击”。安全研究者演示了一个在别人不知情的情况下发送一条twitter消息的POC,其代码与上例中类似,但是POC中的iframe地址指向了:在twitter的URL里通过status参数来控制要发送的内容。攻击者调整页面,使得Tweet按钮被点击劫持。当用户在测试页面点击一个可见的button时,实际上却在不经意间发送了一条微博。

Flash点击劫持下面来看一个更为严重的Clickjacking攻击案例。攻击者通过Flash构造出了点击劫持,在完成一系列复杂的动作后,最终控制了用户电脑的摄像头。 目前Adobe公司已经在Flash中修补了此漏洞。攻击过程如下:首先,攻击者制作了一个Flash游戏,并诱使用户来玩这个游戏。这个游戏就是让用户去点击“CLICK”按钮,每次点击后这个按钮的位置都会发生变化。

在其上隐藏了一个看不见的iframe:

游戏中的某些点击是有意义的,某些点击是无效的。攻击通过诱导用户鼠标点击的位置,能够完成一些较为复杂的流程。

最终通过这一步步的操作,打开了用户的摄像头。

图片覆盖攻击

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

一名叫sven.vetsch的安全研究者最先提出了这种Cross Site Image Overlaying攻击,简称XSIO。sven.vetsch通过调整图片的style使得图片能够覆盖在他所指定的任意位置。

页面里的logo图片被覆盖了,并指向了sven.vetsch的网站。如果用户此时再去点击logo图片,则会被链接到sven.vetsch的网站。如果这是一个钓鱼网站的话,用户很可能会上当。XSIO不同于XSS,它利用的是图片的style,或者能够控制CSS。如果应用没有限制style的position为absolute的话,图片就可以覆盖到页面上的任意位置,形成点击劫持。百度空间也曾经出现过这个问题1,构造代码如下:

一张头像图片被覆盖到logo处:

点击此图片的话,会被链接到其他网站。 图片还可以伪装得像一个正常的链接、按钮;或者在图片中构造一些文字,覆盖在关键的位置,就有可能完全改变页面中想表达的意思,在这种情况下,不需要用户点击,也能达到欺骗的目的。比如,利用XSIO修改页面中的联系电话,可能会导致很多用户上当。 由于<img>标签在很多系统中是对用户开放的,因此在现实中有非常多的站点存在被XSIO攻击的可能。在防御XSIO时,需要检查用户提交的HTML代码中,<img>标签的style属性是否可能导致浮出。

拖拽劫持与数据窃取

2010年,Clickjacking技术有了新的发展。一位名叫Paul Stone的安全研究者在BlackHat2010大会上发表了题为“Next Generation Clickjacking”的演讲。在该演讲中,提出了“浏览器拖拽事件”导致的一些安全问题。目前很多浏览器都开始支持Drag&Drop的API。对于用户来说,拖拽使他们的操作更加简单。浏览器中的拖拽对象可以是一个链接,也可以是一段文字,还可以从一个窗口拖拽到另外一个窗口,因此拖拽是不受同源策略限制的。“拖拽劫持”的思路是诱使用户从隐藏的不可见iframe中“拖拽”出攻击者希望得到的数据,然后放到攻击者能控制的另外一个页面中,从而窃取数据。在或者Java API的支持下,这个攻击过程会变得非常隐蔽。因为它突破了传统Clickjacking -些先天的局限,所以这种新型的“拖拽劫持”能够造成更大的破坏。 国内的安全研究者xisigr曾经构造了一个针对Gmail的POC2,其过程大致如下。首先,制作一个网页小游戏,要把小球拖拽到小海豹的头顶上。

实际上,在小球和小海豹的头顶上都有隐藏的iframe。在这个例子中,xisigr使用event.dataTransfer.getData(’Text’)来获取“drag”到的数据。当用户拖拽小球时,实际上是选中了隐藏的iframe里的数据;在放下小球时,把数据也放在了隐藏的textarea中,从而完成一次数据窃取的过程。

这是一个非常精彩的案例。

Clickjacking 3.0:触屏劫持

到了2010年9月,智能手机上的“触屏劫持”攻击被斯坦福的安全研究者3公布,这意味着Clickjacking的攻击方式更进一步。安全研究者将这种触屏劫持称为Tapjacking。以苹果公司的iPhone为代表,智能手机为人们提供了更先进的操控方式:触屏。从手机OS的角度来看,触屏实际上就是一个事件,手机OS捕捉这些事件,并执行相应的动作。比如一次触屏操作,可能会对应以下几个事件:

touchstart,手指触摸屏幕时发生;

touchend,手指离开屏幕时发生;

touchmove,手指滑动时发生;

touchcancel,系统可取消touch事件。

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

而手机上的屏幕范围有限,手机浏览器为了节约空间,甚至隐藏了地址栏,因此手机上的视觉欺骗可能会变得更加容易实施。比如下面这个例子:

左边的图片,最上方显示了浏览器地址栏,同时攻击者在页面中画出了一个假的地址栏;中间的图片,真实的浏览器地址栏已经自动隐藏了,此时页面中只剩下假的地址栏;右边的图片,是浏览器地址栏被正常隐藏的情况。这种针对视觉效果的攻击可以被利用进行钓鱼和欺诈。2010年12月4,研究者发现在Android系统中实施Tapjacking甚至可以修改系统的安全设置,并同时给出了演示5。在未来,随着移动设备中浏览器功能的丰富,也许我们会看到更多Tapjacking的攻击方式。

防御Clickjacking

Clickjacking是一种视觉上的欺骗,那么如何防御它呢?针对传统的Clickjacking,一般是通过禁止跨域的iframe来防范。frame busting通常可以写一段代码,以禁止iframe的嵌套。这种方法叫frame busting。比如下面这段代码:

常见的frame busting有以下这些方式:

但是frame busting也存在一些缺陷。由于它是用写的,控制能力并不是特别强,因此有许多方法可以绕过它。比如针对parent.location的frame busting,就可以采用嵌套多个iframe的方法绕过。假设frame busting代码如下:

那么通过以下方式即可绕过上面的保护代码:

此外,像HTML 5中iframe的sandbox属性、IE中iframe的security属性等,都可以限制iframe页面中的脚本执行,从而可以使得frame busting失效。斯坦福的Gustav Rydstedt等人总结了一篇关于“攻击frame busting”的paper:“Busting framebusting:a study of clickjacking vulnerabilities at popular sites6”,详细讲述了各种绕过frame busting的方法。

X-Frame-Options

因为frame busting存在被绕过的可能,所以我们需要寻找其他更好的解决方案。一个比较好的方案是使用一个HTTP头-X-Frame-Options。X-Frame-Options可以说是为了解决Clickjacking而生的,目前有以下浏览器开始支持X-Frame-Options: IE 8+0pera 10.50+Safari4+Chrome 4.1.249.1042+Firefox 3.6.9 (or earlier with NoScript)它有三个可选的值:

DENY

SAMEORIGIN

ALLOW-FROM origin

当值为DENY时,浏览器会拒绝当前页面加载任何frame页面;若值为SAMEORIGIN,则frame页面的地址只能为同源域名下的页面;若值为ALLOW-FROM,则可以定义允许frame加载的页面地址。除了X-Frame-Options之外,Firefox的“Content Security Policy”以及Firefox的NoScript扩展也能够有效防御Clickjacking,这些方案为我们提供了更多的选择。

黑帽SEO培训小结:

本章讲述了一种新客户端攻击方式:Clickjacking。Clickjacking相对于XSS与CSRF来说,因为需要诱使用户与页面产生交互行为,因此实施攻击的成本更高,在网络犯罪中比较少见。但Clickjacking在未来仍然有可能被攻击者利用在钓鱼、欺诈和广告作弊等方面,不可不察。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条