注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

网易杭州 QA Team

务实 专注 分享 做有态度的QA

 
 
 
 
 

日志

 
 

浅谈Flash安全  

来自caoyingspace   2011-11-08 19:38:15|  分类: 安全测试 |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 

 

前段时间出现了163邮箱打开附件下载或者打开导致的XSS攻击:实际情况简单复现就是制作一个flash,在其中写入XSS攻击的危险代码,把邮件发给收件人,对方下载时攻击生效。

原因如下:

1、可在浏览器调用ActiveX执行的附件(如swf、doc、xls等),可能由于ActiveX控件原有性质(Adobe Flash Player,可执行javascript)或漏洞(如MS Office Word Preview,各种宏或溢出漏洞)导致危险代码被执行,同时由于下载附件所用域名与登录邮箱一致,js可直接获得cookie等敏感信息。

2、附件预览功能没有针对XSS攻击进行相应的防范措施(特别是xls、doc等文件),当上述文档存在恶意脚本时则会被执行。     

就此,研究了些flash安全性相关的东西,作为web浏览器的第三方插件现在所用到的地方越来越多了。但是这种功能的延伸必然带来不安全的因素,相比于安全性得到一定程度的的浏览器来说,flash绝对是使用客户端安全的一个软肋,同样flash在页面展示时所含有的丰富功能,在某些情况下甚至可以认为它等同于javascript,甚至更为危险。浏览器所贯彻的域安全策略被flash所打破,客户端所做的种种过滤也同样被flash所打破(只要你还使用flash)。但是flash也已经感觉到了这个问题,并且时时在改进,在设计上也引入了一些比较好的安全机制,恰当的使用这些安全机制可以避免你的应用程序遭到攻击。

1.    服务端flash安全策略。

域安全是浏览器安全的最基本条件,flash作为浏览器的扩展允许跨域获取数据就从根本上打破了浏览器的安全性,在flash的大部分应用中,由于功能需求就经常需要跨域获取数据。flash以flash文件存储域名作为它的当前域,如果需要获取其他服务器上的数据就会发生跨域行为,而且该跨域行为会继承用户浏览器里的认证信息,限制不严格时将导致安全漏洞,打破整个客户端安全模型。flash在跨域时唯一的限制策略就是crossdomain.xml文件,该文件限制了flash是否可以跨域获取数据以及允许从什么地方跨域获取数据。用Flash文档访问另一个域中的数据。Flash Player会自动试图从该域加载策略文件。如果试图访问数据的Flash文档所在的域包括在该策略文件中,则数据将自动成为可访问数据。策略文件必须命名为 crossdomain.xml,并且可以驻留在服务器的根目录和其它目录之中,这个服务器提供要被访问的ActionScript数据。每个策略文件对于它所驻留的服务器的端口和协议是特定的,只有在通过HTTP、HTTPS或FTP进行通信的服务器上,策略文件才起作用。

通过严格控制该策略文件我们就可以为应用程序安全和功能上寻找到一个平衡点。

举例crossdomain.xml文件策略:

< ?xml version="1.0"?>

< cross-domain-policy>

<allow-access-from domain="www.cy.com" />

<allow-access-from domain="*.cy.com" />

<allow-access-from domain="100.210.0.40" />

< /cross-domain-policy>

其中关键的策略配置是allow-access-from表示允许来自哪些域的跨域请求,较早的flash允许从其他位置载入自定义的策略文件,新版的flash在接受自定义的文件之前会去检查主目录的crossdomain.xml来判断是否接受自定义策略文件。默认情况下flash不加载除主配置文件之外的其他策略文件,即只接受根目录里的/crossdomain.xml。该选项由<site-controlpermitted-cross-domain-poliicies=’’by-content-type’’>

节点控制,不加该选项时,这对于防止利用上传文件来定义自己策略文件的攻击非常有效。为了在某些条件下需要启用其他策略文件,我们需要设置permitted-cross-domain-policies,设置为上面的by-content-type时将会只允许http头为text/x-cross-domain-policy的策略文件,当为all时则允许所有的text/xml等格式的文件。

site-control的属性permitted-cross-domian-policies有5个选项:    

 none--任何policy file都不被允许,包括master policy file。

      master-only不用解释了。

by-content-type--当HTTP头的Content-Type值为text/x- cross-domain-policy才被允许。

      by-ftp-filename--只有以文件名结尾的URL才被允许。

all--可使用loadPolicyFile方法加载目标域上的任何文件作为跨域策略文件,甚至是一 个JPG也可被加载为策略文件![使用此选项那就等着被xx吧!]

      默认值是master-only,除了socket policy file,它的默认值是all.

安全的程序设计原则:

1按需求将域名限制到最小的范围,不使用*通配符。防止权限设置过泛。

2 一开始就要考虑清楚产品的实现是否需要flash,不需要使用flash应用的域名目录下禁止部署flash策略文件。

3文件上传、应用的域名分开,防止通过上传flash文件直接获得域操作的权限。

4 高安全需求的应用,在限制域名的前提下,将需要被flash访问的应用限制到指定目录,并且在flash内指定策略文件到该目录以将所有访问权限限制到单一目录。

如果login.163.com中的某个功能如login需要对所有域名开放,如果配置根目录crossdomain.xml

< ?xml version="1.0"?>

< cross-domain-policy>

<allow-access-from domain="www.cy.com" />

<allow-access-from domain="*" />

< /cross-domain-policy>

这不是一个好的策略因为他不只会开放login同时会开放如chgpassword等其他的服务给用户,我们还需要配置主策略文件

< ?xml version="1.0"?>

< cross-domain-policy>

<allow-access-from domain="www.cy.com" />

<site-control permitted-cross-domain-poliicies=’’all’’>

< /cross-domain-policy>

然后自定义配置文件到一个目录如/flash/crossdomain.xml

< ?xml version="1.0"?>

< cross-domain-policy>

<allow-access-from domain="www.cy.com" />

<allow-access-from domain="*" />

< /cross-domain-policy>

并且将login应用部署到/flash/目录,用户的访问将被限制到/flash/下面,无法对其他功能进行操作。

2 客户端flash安全规范

Flash的强大渲染效果很好的满足了用户视觉审美,很多做得绚丽逼真的页面都离不开Flash装点。这个时候,我们往往需要在页面内容里嵌入flash,这个时候安全性就会被抛到一边(我们还是建议如果不需要的话还是少用这种动态的东西)。

Flash最主要的安全控制属性:AllowScriptAccess属性和allowNetworking。

AllowScriptAccess控制flash与html页面的通讯,可选的值有:always(页面通讯不做任何限制)、sameDomain(只允许来自本域的页面通讯)、never(禁止与页面通讯)。默认情况下的选项是sameDomain,这个时候某些场景下看起来也是足够安全了,但是还是能看到经常有程序允许将这个选项设置为always,而即使是sameDomain也不是在所有场景下都安全的,考虑如论坛这样的程序,上传和展现都是在同一个域的情况下,就不存在任何安全性可言了,所以强烈建议程序员都使用never设置。AllowNetworking也包含三个可选值:all(不做任何交互限制)、internal(SWF文件可能不调用浏览器导航或浏览器交互的API,但可以调用任何其他网络APIS)、none(不能调用任何交互APIS),利用这个函数可以对 Flash 的 getURL 进行跳转做限制。

一些方面比如网站根目录的checklist配置以及 flash安全的checklist配置,以及对引入自己产品的flash代码的安全性的研究这些方面都不能忽视,具体细节有待进一步的学习。

  评论这张
 
阅读(643)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016