来源:ITS
[Flash!attack简介]
本文我们将描述一个安全漏洞,这个漏洞存在于很多嵌有Flash,或者是上传有Flash的网站中.本文是建立在一个事实之上的,那就是大量的web浏览器都安装了Macromedia Flash plugin/ActiveX control.这可能使攻击者发动跨站脚本攻击.我们将不讨论跨站脚本攻击的细节,而是解释Flash是如何被用于注射javascript脚本到一个充分过滤了的web程序中去的.
[现有的web程序和跨站脚本]
web程序构成了动态站点,允许用户和站点本身交互,这种站点包括Hotmail,Yahoo,MSN和其他许许多多站点,为了支持多用户登陆,通常都需要验证用户的身份.
在线交流站点,如deviantART,每个用户都有自己的页面和web空间,他们可以上传一些艺术作品如诗,画,照片,当然还有Flash动画.登陆后的用户(当然也包括匿名用户)可以看到别人上传的东西,这表示文件和目录在不同的用户之间共享.从安全角度来看,被浏览的文件受到文件的拥有者和浏览它的人的信任.
跨站脚本攻击,就是现在常说的XSS,是一种标准的,利用文件所有者和浏览者的的信任来进行攻击的方式.当一个前来浏览文件的用户,浏览一个恶意页面(另外一个不怀好意的用户构造的)时,这个含有代码(如javascript)的页面就会盗取密码,或者用户的隐私.
[防止跨站脚本攻击]---目前的办法
大多数的有安全意识的web程序通常采用如下3种手段来防止XSS攻击
1.在用户输入的字符中禁止html语句
2.只允许特殊的标记,用这种标记来代替html标签产生的效果
3.从html代码中过滤掉动态脚本
这些办法通常被确信能够防止恶意用户注入自定义的html或者动态脚本.web站点,如Hptmail,yahoo Mail 尝试利用文件过滤来根除所有注射javacsript的可能性.一些权威,
如CERT和Microsoft已经详细描述了过滤的方法,以及XSS带来的危害.
一些网站允许Flash文件被上传并显示,别的仅仅允许上传flash文件以便下载,就像ftp站点一样.
由于网站设计时的不足,加上没有把Flash看作一种动态的脚本,网站的过滤可以被轻易地绕过.下面我们就将描述如何做到这点.
[Flash! attack]
Macromedia Flash有它自己内置的脚本语言---ActionScript;ActionScript在熟练的javascript编程者看来是非常简单的,因为它有着和javascript,c,perl相近的语法.但是这个简单的语言可以被用于复杂的动画,模拟,游戏的创建....我们感兴趣的是它的getURL()函数.这个函数允许我们把用户重定向到另一个页面上去.这个函数的参数通常就是一个URL,例如"_blank>http://www.itaq.org",所以这个脚本看上去就是这样:
getURL("_blank>http://www,itaq.org")
假设我们用一个javascript语句代替URL:
getURL("javascript :alert(document.cookie)")
上面这个例子弹出一个javascript警告筐,里面包含有用户的cookie信息.这表明我们成功利用了Internet Explorer 和 Flash的特性,向网页上注入了javascript脚本.示例Flash文件类似于截图所示
(图1)
[脆弱的展点和软件例子]
Ezboard(_blank>http://www.ezboard.com/)可能是最著名的免费在线电子公告系统之一,这个BBS是基于HTTP的,允许用户用Flash作为签名,通过使用EMBED标签.因此在我们的测试中,我们按照如下所示构造我们的签名:
<embed src="_blank>http://eyeonsecurity.net/download/example.swf" pluginspage”_Prod_Version" target=_blank>http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version ShockwaveFlash” type="application/x-shockwave-flash" width="0" height="0" > </embed>
看图可能会更清楚些:
(图2)
这段代码将被添加在攻击者提交的任何文章后面,使之能够盗取用户的cookie.
DeviantART是一个非常流行的站点,它鼓励用户提交flash动画,并且允许别人浏览.当然一个恶意的用户也可能提交一个恶意的flash去透取其他用户的密码(包括管理员的),他会创建一个新的帐号然后上传一个特殊的flash,之后就只需要等待别人浏览就行了.
MSN Communities----这个站点允许用户上传他们自己的文件.....我们上传的是SWF文件,它可以执行一段javascript代码.这明显是一个网站的安全漏洞.在EyeonSecurity的一份名为“Microsoft Passport Account Hijack Attack”的文章中,还概括了了一个MSN创建证书的安全漏洞
匿名服务站点如Anonymizer 和 The-Cloak,也容易受到这种攻击,它们尝试从html中过滤出javascript脚本,但是对此种攻击毫无办法,试着想想一下,访问一个特殊的flash便可使所有的过滤都不起作用
2个专门的论坛(BBS)ikonboard和YaBB,他们软件中的一部分代码可能导致遭受这种攻击.这2个bbs都只允许使用专门的标记来产生最终的页面,然而他们允许通过
上面这句将被脚本转换成如下语句:
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width=200 height=200>
<param name=movie value=http://www.itaq.org/download/example.swf>
<param name=play value=true> <param name=loop value=true>
<param name=quality value=high>
<embed src=http://www.itaq.org/download/example.swf width=200 height=200 play=true loop=true quality=high> </embed>
</object>
当然,上面的这些例子仅仅是举些例子而已,事实上,任何允许flash被插入的站点都可能受到XSS攻击.本文提到的所有站点在本文被公开之前都受到了通知,因此当你读这篇文章的时候,他们已经补上了相应的漏洞.
[修复问题]
简而言之:在你的网站上禁止flash文件.
然而,在大多数情况下,解决办法并不是那么简单,考虑deviantART的例子,flash文件是构成站点的一部分[......]
可能的解决办法:
Macromedia (Flash player developer)
Macromedia和EyesOnSecurity一起提供了一个解决办法.建议允许web设计者改变嵌在html页面中的flash的行为,这个办法对论坛和相似的站点有效,但是不能修改已经存在的flash动画
然而这个办法不适合用于像MSN Communities和deviantART这样的站点.这种站点允许用户上传SWF文件,而不是链接它们.Macromedia不鼓励站点允许用户上传未检查的flash文件.
必须提到的一点就是flash与html页面的交互是通过不同的功能来支持的,本文描述的方法是"hack"而不是"支持"功能.有一个著名的程序能够产生flash动画---Swish,它使用Javascript方式去支持web设计者插入他们自己的javacript代码.Macromedia已对此发布了一个公告:
_blank>http://www.macromedia.com/v1/handlers/inde...ex.cfm?ID=23051