利用Flash参数注入的新型攻击技术
2008-12-18 13:41:10 来源:WEB开发网在这个Flash文件中,如果全局变量“_root.flashfile”被设置为undefined,那么它的值不是通过读取存放在一个共享对象(如果有的话)的数据来设置,就是通过一个缺省值进行设置。这个值随后存储到一个共享对象中,并用作具有潜在危险性的本地函数“getURL”的一个参数。
如果一个没有对此产生怀疑的用户在攻击者的诱骗下点击了如下所示的恶意链接:
http://URL/vulnerable.swf?flashfile=javascript:alert(document.domain)
那么后果就不是受害者的浏览器以具有该有弱点的Flash文件的域的上下文来执行一次所示JavaScript代码就过去了,而是每次加载该Flash时,不管是否直接引用了它或者将其嵌入该域内部,这段JavaScript脚本都会再次执行。部署在有弱点的站点上的跟踪设备,如IDS或者IPS,只能发现感染情况,却无法找出原因,甚至稍作手脚就可以让它们觉察不到这一切的发生。随后对站点的请求将完全正常,但是受害者的浏览器上仍会遭受这种攻击。
这个攻击以前的Flash攻击的攻击范围,并使它们变成持久性攻击。
利用这种方式,一个精明的攻击者以只在Flash嵌入到HTML页面内部时才发动攻势。第一次执行被用于感染受害者。随后,每次代码被执行时,它将检查Flash是否被嵌入到正确的HTML页面,然后再开始发起攻势。
这种攻击最大的影响在于它的持久性。即使将来对该代码打了防止注入参数值的补丁,原先注入的值还是会无限期地存在于共享对象之内,从而每当载入该Flash文件时都会再次导致攻击的发生。
四、新型攻击带来的影响
本文所介绍的各种技术具有一个主要优点在于,由于可以攻击嵌入到原始的HTML页面的Flash视频,所以可以利用Flash文件和父页面之间的交互作用来实现更加精巧的攻击。 即使Flash视频的创建者不允许从原始的HTML页面之外运行该Flash文件,这些攻击仍然奏效。
五、安全建议
当在Web页面嵌入Flash视频的时候,Web应用程序开发人员必须仔细对输入进行消毒处理。开发人员必须意识到,JavaScript函数“encodeURI”并不能够对用于全局Flash参数的输入进行彻底的消毒。 应该对此使用一种专门的消毒方法,当然,如果有一个能够精确描述哪些字符是可以接受的输入的安全模型就最好了,因为白名单相对要安全。
易受基于DOM的FPI攻击的Web应用程序不能假定他们的客户端没有受到攻击,即使有IPS或者IDS之类的安全机制在监视流量也不行,因为攻击片段(URI中井号[#]之后的部分)是不会被浏览器发送给Web服务器的,所以Web服务器根本就无法检测到该攻击。
Flash视频开发人员必须意识到,将收到的信息作为全局参数保存在本地共享对象中会导致持久性Flash参数注入攻击。易受持久性FPI攻击的Flash视频将一直受到由覆盖全局参数所引起的Flash攻击的影响,这些攻击包括跨站点脚本攻击、跨站flash攻击,等等。 即使FPI安全漏洞被修复之后仍然如此。在这种情况下,必须修复Flash文件本身的漏洞,并对其重新进行编译,同时还要改变本地共享对象的名称,才能彻底解决问题。
六、小结
本文将向读者介绍利用Flash参数注入的新型攻击技术,最为重要的是,该技术能够造成永久性的攻击效果。鉴于目前的Web应用程序采用的常规防御机制尚不足以抵御这种攻击,所以希望能引起Web开发人员的高度重视,本文最后给出了有关的安全建议。
更多精彩
赞助商链接