论坛首页 编程语言技术论坛

最新火爆游戏巨献——谈Flash Player的安全机制

浏览 2357 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-11-18   最后修改:2009-12-25
最新火爆游戏巨献——谈Flash Player的安全机制

话说在世界的尽头,太阳落下彩虹升起的地方,有一个神秘的部落。在这个部落里,房子是用金子盖的,路是用鲜花铺的,女孩子都很漂亮,男孩子都很帅。山上的丛林里,山下的小河中,都蕴含着丰饶的物产。自古以来,部落里善良勤劳的人们与世隔绝,自给自足,过着幸福的生活。
1969年发生了一件大事,ARPAnet正式启用并在稍后被称做INTERNET,从此大地风云变色,风起云涌,沧海桑田,换了人间。40年过去,弹指一挥间,当年的神秘部落也在潮涨潮落间悄悄有了改变……
外界的奸商看着这片丰饶的土地流下了口水,普通的民众也对也对它神秘的一面充满了新奇。我们不禁要关注这个可爱部落的前途命运,在迎接世界的过程中,它将得到还是失去……

OK, 以上是年度游戏大作《Flash Player安全机制》的片花介绍,现在我们来详细解释游戏规则。

总体说明:
1. 与部落打交道的外界的人和资源集中在外界的“商场”里,也就是部落对外交流的接口是一个个的商场,每个商场里面有外界的资源和外界的人。
2. 游戏任务是保护部落里的资源不被外界滥用,这种保护是通过制定规则来做到的

游戏构成:
1. 机构:(资源在机构之间流通)
a. 外界的商场:包括商场A,商场B,...,商场N
b. 部落土著的工厂:收购部落本身的物产进行生产
c. 外界人员组成的神秘部落探险队:对部落小心刺探,与外界联系紧密
d. 部落土著组成的学习外界先进科学文化知识小组:由血统纯正,忠诚无比的部落先进分子组成,代表部落先进生产力,先进文化,先进……
2. 资源:(包括人和物产)
a. 人:二十一世纪什么最贵?人才!人是第一位的,是具有主观能动性的资源
b. 金矿石
c. 金子
d. 千年雪莲
3. 老板:(管理资源在机构间的流通)
a. 外界商场老板:每个商场一位老板
b. 部落的头领:部落最高领导人,仅有一位,拥有至高无上的权利(在部落中)
c. 人的思想:这个不太好描述,俗话说解放思想实事求是,可见思想可以控制人的行为。因此思想也算是老板,它可以控制人做什么或不做什么
4. 通行证:(资源流经各个机构时,老板是否允许其通行的凭证)
a. 商场通行证:可以用来说服商场老板开放资源
b. 部落头领通行证:可以用来说服头领把资源分配到土著学习小组去
c. 解放思想通行证:此证可以解放人的思想,堪称魔力无穷,相当犀利

游戏规则:(重点来了啊)
1. 外界的商场不允许直接访问土著的工厂、探险队、学习小组的一切资源。因为外界是不受部落信任的,它的一举一动都被严密监视,它不能主动对部落做任何刺探
2. 外界的商场之间可以互相沟通往来资源,前提是商场老板间有通行证随同
3. 土著的工厂收集本部落的一切资源,也可以征用本部落的一切人员
4. 土著的工厂不能与外界的探险队有任何往来。这个很重要,因为探险队可能是外界派来的侦查兵,或潜伏人员
5. 土著的工厂可以与学习小组交换一般的资源,但是只有提供解放思想通行证,才能与学习小组的人员交流(这个交流可以是简单的语言交流,也可能是通婚,程度不限,因此要慎重)
6. 土著的工厂不允许使用外界商场的一切资源。这也合情理,土著嘛,都相信自然是最美的,非自然是危险的
7. 外界探险队可以收集部落内的金矿石,进行研究
8. 外界探险队不可以直接收集部落内的金子,这不是研究了,而是掠夺
9. 外界探险队不可以收集千年雪莲,因为这个对部落来说也很珍贵
10. 外界探险队不可以使用土著工厂的任何资源。与规则4保持一致
11. 外界探险队可以与学习小组的人员交流,只要能提供解放思想通行证(这是非常危险的行为,万一学习小组内部有潜伏人员……)
12. 外界探险队使用外界商场的资源,只要有商场通行证。外界的人还是用外界的东西比较舒服
13. 学习小组可以使用所有的资源。这个概括是有力的,因为学习小组得到了头领或分片领导的信任,它可以内外通吃,想吃就吃,想拿东西就拿东西,想用人就用人,不需要任何通行证

好了,针对上面的规则,有办法让部落的资源外泄吗?需要注意的是,通行证可不是好搞的啊,特别是部落内的通行证,合理的才能发,因为部落里的人可不懂走后门这一说。




真相还原

总体说明:
1. 部落是指电脑主机,里面有各种各样隐秘的资源。商场是指各个website,上面有外界的静态资源和flash SWF文件资源 。
2. Flash安全机制的目的主机的资源不被外界滥用,这种保护是通过制定规则来做到的。

安全机制构成:
1. 安全沙箱(sandboxes):
a. 远程沙箱(Remote sandbox): 不同的website属于不同的远程沙箱,例如sitea.com和siteb.com都属于远程沙箱,但是属于不同的远程沙箱
b. 本地文件系统沙箱(local-with-filesystem sandbox):对本地文件系统比对远程有更多的访问权
c. 本地网络沙箱(local-with-networking sandbox):对远程范围比对本地有更多的访问权
d. 本地信任沙箱(local-trusted sandbox):本地受信任沙箱,对本地资源和远程资源都有绝对的访问权
2. 资源:(包括swf文件和静态资源)
a. Swf文件:是唯一的主动资源,因为它可以访问其他资源,它自身也可以作为资源被load,或者被cross-script访问
b. Load 资源文件:比如load一个图片,或者音频、视频等
c. 访问资源文件的内容:比如查看图片的像素,音频中的ID3属性等。这属于在资源中提取有价值的属性,恰似在金矿石中提取金子,因此它受限多一些
d. Load数据:比如load一个XML文件或者二进制文件。基本上b、d很难用语言区分,区分它们的最好办法是通过API的调用,一些API划分为b,另一些划分为d,具体参看文档~
3. stakeholder:
a. 网站管理员
b. 本地主机管理员:事实上还有本地主机普通用户也是作为一个stakeholder,但与主机管理员职责相似,只是主机管理员决定整个系统的配置,而用户负责自己账户的配置
c. Swf文件创建者:创建swf文件者可以决定此文件是否允许被交叉脚本访问,即cross-script,即开放接口和数据供另一个swf文件调用
4. Policy file:
a. 发布者许可(政策文件):是一个简单的xml文档,给予其信任来源的swf文件访问资源的权利
b. 管理员控制文件:用于管理员启用或限制用户对各种功能的访问,其形式有使用mms.cfg文件、全局Flash player信任目录、设置UI和设置管理器等
c. 创建者许可:通过在创建swf文件时调用“Security.allowDomain()”方法,来允许其他swf文件对其进行交叉脚本访问。见3(c)

规则:
1. Remote sandbox 中的swf不允许直接访问本地主机资源
2. Remote 范围内的各个sandbox域可以互相访问,但除了2(b)外一般需提供4(a),交叉脚本控制时需提供4(c)
3. Local-with-filesystem sandbox可以访问本地文件系统的一切资源,也可以交叉脚本访问本地文件系统的swf文件
4. Local-with-filesystem sandbox不允许访问local-with-networking的一切资源
5. Local-with-filesystem sandbox只有提供4(c)才可以交叉脚本控制local-trusted sandbox中的swf文件
6. Local-with-filesystem sandbox不允许访问remote sandboxes 中的一切资源
7. Local-with-networking sandbox可以进行2(b)
8. Local-with-networking sandbox不可以进行2(c)
9. Local-with-networking sandbox不可以进行2(d)
10. Local-with-networking sandbox 不允许访问local-with-filesystem的一切资源
11. Local-with-networking sandbox可以对local-trusted进行2(b),但只有提供4(c)才可以交叉脚本控制local-trusted sandbox中的swf文件。
12. Local-with-networking sandbox可以对remote sandboxes进行2(b),但只有提供4(c)才可以交叉脚本控制local-trusted sandbox中的swf文件,而且只有提供4(a)才允许进行2(c)和2(d)
13. Local-trusted可以对任何sandbox域的资源进行访问和交叉脚本控制


场景虚拟:
1. 本地主机有一个私密文件,上面有用户银行账号,在C:\Program Files\Adobe\bankaccount.txt中
2. Hacker给主机用户发送一个Email,里面有个动画hack.swf作为附件
3. 主机用户运行hack.swf,hack.swf在播放一些防止人多拥挤,电梯故障处理等视频的同时,偷偷使用URLLoader(C:\Program Files\Adobe\bankaccount.txt)装载文件,并且通过net.sendToURL()把它传到Hacker的网站
4. Hacker发财了
这里注意,步骤3是不可能的,因为hack.swf在本地被打开,它可能位于local-with-filesystem sandbox或位于local-with-networking sandbox(这由编译时”-use-network”选项决定)。假设:
1. 位于local-with-filesystem sandbox:net.sendToURL()是与remote sandbox打交道的API,因此会被阻止
2. 位于local-with-networking sandbox:URLLoader()本地文件系统的内容会被阻止
所以,由于flash player安全机制的保护,本地用户是安全的,这就是为什么Hacker里没有太富的人的原因。



宗旨:
为了帮助刚刚接触安全机制的同学理清思路,明白概念,这里只大概描述了一些最主要的枝干,具体的细节请参看官方文档:http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7d23.html


--球状闪电
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics