中国人民解放军技术人才网_深入了解什么是 点击劫持

作者: seo 分类: 黑帽seo 发布时间: 2019-07-04 08:03

  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”按钮,每次点击后这个按钮的位置都会发生变化。

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

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

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

  点击此图片的话,会被链接到其他网站。图片还可以伪装得像一个正常的链接、按钮;或者在图片中构造一些文字,覆盖在关键的位置,就有可能完全改变页面中想表达的意思,在这种情况下,不需要用户点击,也能达到欺骗的目的。比如,利用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中,从而完成一次数据窃取的过程。

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

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

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

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

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

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

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

  专注于黑帽SEO培训,提供最新的黑帽SEO技术培训学习教程,免费学习SEO培训教程,只有在这里你才能学到真正的黑帽SEO精髓课程

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!