分析分享:Hacking Team Flash 0Day · 3 | 23 漏洞:Flash 0Day 自7 月5 日晚,Hacking...

23
分析分享 Hacking Team Flash 0Day

Transcript of 分析分享:Hacking Team Flash 0Day · 3 | 23 漏洞:Flash 0Day 自7 月5 日晚,Hacking...

Page 1: 分析分享:Hacking Team Flash 0Day · 3 | 23 漏洞:Flash 0Day 自7 月5 日晚,Hacking Team 被Gamma Group Hacker①攻陷以来,其泄露的400GB 数据包持续在业界传播发酵,绿盟

分析分享

Hacking Team Flash 0Day

Page 2: 分析分享:Hacking Team Flash 0Day · 3 | 23 漏洞:Flash 0Day 自7 月5 日晚,Hacking Team 被Gamma Group Hacker①攻陷以来,其泄露的400GB 数据包持续在业界传播发酵,绿盟

2 | 23

Content

漏洞:Flash 0Day 3

为什么是 Flash 0Dday 3

漏洞触发 3

受影响系统 4

攻击:漏洞利用 4

触发原理 4

动态调试 4

提权验证 9

利用形式 10

防护:思路及建议 10

思路 10

建议 11

教学:Flash 漏洞分析 12

Flash 背景知识 12

Flash 文件格式 13

Flash 常用工具介绍 14

AS 脚本 18

Flash ActiveX 控件介绍 19

威胁情报 22

关于绿盟科技 23

内容导读

Hacking Team事件已经过去 1个星期,社会各界针对泄

露数据的分析还在进行中。为了帮助安全技术从业者后续能

够有更多的人加入到分析队伍中来,绿盟科技安全技术专家将

Flash 0Day的分析方法开放出来跟大家共享,便于技术人员能

够入手 Flash 0Day漏洞分析。

1 6 日,威胁响应中心启动应急分析工作,绿盟 TAC 产品拦截到 Flash 0Day 漏洞攻击;

2 6 日夜,相关信息及初步建议,第一时间告知客户关注;

3 7 日,在官网网站发布紧急通告,建议广大用户关注事件进展。分析工作进展进展中;

4 9日,发布 Hacking Team远程控制系统简要分析报告,同时发布防护方案;

5 13 日,就 Hacking Team Flash 0Day 的分析过程资料分享。

在看完本报告后,如果您有不同的见解,或者需要了解

更多信息,请联系:

• 绿盟科技威胁响应中心微博

• http://weibo.com/threatresponse

• 绿盟科技微博

• http://weibo.com/nsfocus

• 绿盟科技微信号

• 搜索公众号 绿盟科技

Page 3: 分析分享:Hacking Team Flash 0Day · 3 | 23 漏洞:Flash 0Day 自7 月5 日晚,Hacking Team 被Gamma Group Hacker①攻陷以来,其泄露的400GB 数据包持续在业界传播发酵,绿盟

3 | 23

漏洞:Flash 0Day

自 7月 5日晚,Hacking Team被 Gamma Group Hacker①攻陷以来,其泄露的 400GB数据包持续在业界传播发酵,绿盟

科技威胁响应中心持续跟踪事态进展,给出系列分析报告②,同时也将相关解决方案提供给合作伙伴及最终用户,以便用户能够

应对可能发生的攻击,此次事件告一段落。今天绿盟科技安全技术人员将针对此次泄露的 Flash 0Day漏洞,将分析方法、工具及

相关知识分享出来,希望更多的安全行业从业者能够从中有所获益。

为什么是 Flash 0Dday

绿盟科技一直参与微软 MAPP 计划,该计划里面也包含了 Adobe 公司爆出的漏洞,通过以往长期跟踪分析的经验来看,

Adobe漏洞主要集中在两款产品一个是 Abode reader,另一个就是 Adobe Flash。此次报告分析的漏洞就是关于后者的漏洞,

该漏洞在绿盟科技漏洞库中具有这些标识,CVE-2015-5119,Adobe Flash Player ActionScript 3 ByteArray释放后重用远程漏洞

(CVE-2015-5119),BUGTRAQ ID: 75568③,CVE(CAN) ID: CVE-2015-5119④

为什么 Hacking Team用了 Flash漏洞,是因为 Flash漏洞相比其他软件,协议,服务的漏洞要更难分析和利用,一方面可

以为黑产竞争者制造壁垒,同时也为分析和防护 Flash 0Day提升难度。究其原因有以下几个方面:

• 没有符号表 Flash 软件不是微软提供的软件,所以没有提供标准的符号表,较难定位到具体的函数位置,目前做这

方面分析的组织不多。

• 虚拟机机制 如今常见的 Flash Player都集成了 AVM2,将 AS编译的字节码直接跑在虚拟机上,由 AVM2来解释执

行。一方面方便了 swf文件的移植,另一方面,相对于分析其他软件的漏洞来说,无疑又是多了一层保护。

• 沙箱机制 Flash安全模型使用安全域的沙箱来分离内容。Flash沙箱除了隔离内容外,还能避免名字冲突(有点类

似命名空间)。沙箱系统中不同的安全域使得 SWF文件在 Flash播放时运作在自身的沙箱里。如果想要突破沙箱机制,

需要对 Flash沙箱原理要有比较透彻的理解。

• IE保护机制 现在的 Flash一般都嵌入到网页,如果想利用 Flash漏洞来获取权限,无疑受到 IE等浏览器本身机制的

保护,比如 IE,Chrome 的沙箱机制。这就要求对沙箱机制和如何绕过沙箱有个整体细致的了解,也就是说想通过

Flash漏洞来获取更高的权限还是要有更高的功底。

• 没有完整的 POC 对于漏洞分析和利用如果没有 POC,那也只能靠自己去挖掘这个漏洞; 另一方面如果缺少完整的 POC,

攻击者只能自己去写代码,所以业界及主管机构都是严格控制 POC的传播。

POC 的基本功能就是验证并触发该漏洞或是 Bug 存在,但是能触发漏洞,不代表就一定能利用漏洞;有些漏洞是不能利

用,当然我们也可以不管这类漏洞叫漏洞,而只能称之为 Bug。但此次泄露出的 Flash0day数据,是可以被触发的。

漏洞触发

那么此次的漏洞如果被触发,会有什么样的结果呢?先来看看漏洞触发后的现象。通过分析,利用该漏洞可以在 IE中稳定的

执行系统可执行文件,比如在下图中就弹出了计算器。

① Gamma Group Hacker, http://www.ibtimes.co.uk/who-hacked-hacking-team-gamma-group-hacker-holds-their-hand-1509662 ② Hacking Team系列报告, http://www.nsfocus.com.cn/research/threatintelligence.html ③ BUGTRAQ, http://www.securityfocus.com/bid/75568 ④ CVE, http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-5119

Page 4: 分析分享:Hacking Team Flash 0Day · 3 | 23 漏洞:Flash 0Day 自7 月5 日晚,Hacking Team 被Gamma Group Hacker①攻陷以来,其泄露的400GB 数据包持续在业界传播发酵,绿盟

4 | 23

方法很简单利用构造的 test.html加载 swf文件,在加载 swf文件时 IE会提示要加载 ActiveX插件,运行就行。加载插件

后点击图中的“run calc.exe”按钮即可弹出计算器,漏洞利用成功。这个实验中使用Win7 64位、IE11,能稳定触发漏洞。

受影响系统

Adobe Flash Player 存在一个严重的释放后重利用内存破坏漏洞,攻击者可能远程获得当前用户的权限。此漏洞影响大量

Flash Player版本,此漏洞影响大量 Flash Player版本,目前已有可利用的攻击代码公开发布,强烈建议受影响用户更新到当前厂

商提供的最新版本。

• Adobe Flash Player <= 18.0.0.194

• Adobe Flash Player <= 18.0.0.194

• Adobe Flash Player Extended Support Release 13.x

• Adobe Flash Player Extended Support Release 13.0.0.296

• Adobe Flash Player for Linux 11.x

• Adobe Flash Player for Linux 11.2.202.468

攻击:漏洞利用

触发原理

该漏洞是一个典型的 UAF 释放重利用的漏洞。用户改写字节数组大小,在原来字节数组释放后,重新分配,导致该数值

被写入已经释放的内存中,造成释放重利用。

动态调试

由于 Hacking Team泄露出的数据中暴露了 Flash 0Day漏洞源码,我们的得以使用 CS进行动态调试。

Page 5: 分析分享:Hacking Team Flash 0Day · 3 | 23 漏洞:Flash 0Day 自7 月5 日晚,Hacking Team 被Gamma Group Hacker①攻陷以来,其泄露的400GB 数据包持续在业界传播发酵,绿盟

5 | 23

源码级调试分析

利用 CS装载源文件中的 fla原始档,和其他 as文件。生成 SWF文件

可以看出先是调用了 MyClass.as 文件中的 InitGui 函数来初始化 GUI 元素并输出一些系统相关信息,点击 swf 文件中的

button按钮就会调用相应的处理函数如下图所示:

处理函数 btnClickHandler里面首先调用了 TryExpl函数如下图所示:

Page 6: 分析分享:Hacking Team Flash 0Day · 3 | 23 漏洞:Flash 0Day 自7 月5 日晚,Hacking Team 被Gamma Group Hacker①攻陷以来,其泄露的400GB 数据包持续在业界传播发酵,绿盟

6 | 23

接下来就看看 TryExp1函数里面是怎么样做到漏洞利用的,进入该函数

从给出的源码可以看出先是声明了变量 alen=90,然后声明一个数组 a,并将数组的各元素赋值,在 AS 中 Array 数组类型的

变量不像C/C++数组一样要求是同一类型的数据在可以放到数组里面,在AS中不同类型的变量对象可以放到同一数组里面。从

源码可以看出,a数组的 90个元素是 MyClass2对象和 ByteArray类型数组交替出现,并且每分配两个MyClass2元素才会分配

一次 BtyeArray 类型数组,那么实际运行效果是怎么的呢,我们利用 CS 调试功能在 for 结束后的下一条语句下了断点显示如下

图:

从图中看出我们在 for(i=alen-5;i>=0;i-=3)处下了断点,在调试运行后,让a数组填充完毕;左上部紫色的框给出了按钮按

下后堆栈中函数调用关系,btnClinckHandler->TryExp1。左下方的红框给出了 a 数组赋值完成后每个元素的实际值,从图中看

出,除了 a[0]外,每出现一次 ByteArray元素要出现两次MyClass2元素,这和我们刚才通过静态代码分析的结果是一致的。

接下来就是一个 for(i=alen-5;i>=0;i=3)语句,前面知道 alen=90那么在第一次循环时 i=85,通过源代码中的赋值我们知道

a[85]的大小是 0Xfa0,源码中将_ba=a[i],也就是第一次将 a[85]赋给_ba(也就是_ba大小为 0xfa0),同时将一个新的Myclass类赋

给_ba的第四个字节_ba[3]。如下图所示

Page 7: 分析分享:Hacking Team Flash 0Day · 3 | 23 漏洞:Flash 0Day 自7 月5 日晚,Hacking Team 被Gamma Group Hacker①攻陷以来,其泄露的400GB 数据包持续在业界传播发酵,绿盟

7 | 23

接下来就要动态跟踪一下 a[i]是不是 a[85],如果是 a[85] 那么又是什么类型,为了能查看 i的值到底是不是 a[85],我在源码

中添加了一条调试语句 trace(“the number of i =”)看 i的值打印多少,根据之前设置的断点,单步执行源代码,如下图所示:

从图中可以看出右下方打印出 i的值是 85,刚好我们分析的一致,从左边图可以看出 a[85]元素的类型是 ByteArray类型。

接下来代码中会将 MyClass 对象赋值给_ba[3]。由前面介绍的知识我们知道,在 MyClass 对象赋给一个基本类型时,会调用

ValueOf函数,这里给对象MyClass定义了 ValueOf函数,所以在赋值之前会调用该函数。

继续单步跟进_ba[3]=new MyClass();调用自定义的 ValueOf函数

Page 8: 分析分享:Hacking Team Flash 0Day · 3 | 23 漏洞:Flash 0Day 自7 月5 日晚,Hacking Team 被Gamma Group Hacker①攻陷以来,其泄露的400GB 数据包持续在业界传播发酵,绿盟

8 | 23

在我们单步跟踪调试 ValueOf函数,_gc数组除了在 TryExp1中加入 a数组元素外(_gc.push(a)),又通过 valueof函数,

加入了-va元素(_gc.push(_va)),这样_gc数组就有两个元素,一个是 a数组元素,一个是_va数组元素,每个元素又是数组类

型,a 数组有 90 个元素,前面已经介绍过了,_va 有 5 个元素,如图中左边显示的结果。在 TryExp1 中_ba=a[i]大小为 0xfa0,

在 valueof 函数中_ba 通过_ba.length=0x1100 会释放调原来的空间而从新分配内存大小。同时通过后面的_va[i]=new

Vector.<uint>(0x3f0)来重新使用释放的内存。前面我们介绍过,在分配 vector类型的空间时其前四个字节是vector大小也就是

说,在被释放的空间的开始四个字节会写入 0x3f0。

而在_ba[3]=new Myclass()中_ba[3]实际指向的内存地址还是释放后的内存地址所以在返回 40后被释放的内存的数据就

是 0x400003f0。

UAF漏洞图解

a. 通过 a数组创建 ByteArray类型元素数据,设置长度为 0xfe0:

b.通过调用 valueof函数中的_ba.length=0x1100,释放该空间

c.调用分配 vector<int>来占据被释放的内存,由前面的知识,我们知道Uint vector包含了 8字节的头部信息,其中开始的

4字节是长度字段。

d.在 valueof返回 0x40后,写入到之前_ba[3]指向的地址中

动态跟踪查看结果

在Myclass对象调用 valueof之前空间内存是 esi-3,如下图所示

在调用 length=0x1100 后,内存空间被释放,申请的 vector<int>利用释放后的空间,从下图可见 vector 前四个字节值

是 0x3f0

Page 9: 分析分享:Hacking Team Flash 0Day · 3 | 23 漏洞:Flash 0Day 自7 月5 日晚,Hacking Team 被Gamma Group Hacker①攻陷以来,其泄露的400GB 数据包持续在业界传播发酵,绿盟

9 | 23

在 valueof返回后_ba[3]指向的第四个字节 0x10a70003被赋值为 0x40

此时 vector的长度字段已经变成了 0x400003f0

提权验证

那么利用该漏洞是否可以达到提权的目的呢,让我们来验证一下。利用 windows 7自带的 IIS服务搭建一个Web 服务,

将 test.html和 exp1.swf放在web服务目录中同时将 test.html中对 exp1.swf引用改为绝对地址引用,这样在访问 test.html时

方便加载 exp1.swf。设置 IE启动保护模式,同时需要启动 ProcessExplorer工具来监控 IE进程和进程的权限等级。

从 ProcessExplorer结果来看,进程 ID为 1792的 iexplore是沙箱进程,产生的子进程 6512是在访问 test.html是生成的一

个 Tab,如下图

当然有多个 IE Tab 标签时会有多个子进程,同时受到一个沙箱进程的保护,从图中看出沙箱进程等级是 Medium,属于标

准用户权限等级,而子进程 6512则是 low等级,是沙箱中的 IE TAB进程的默认等级,IE沙箱中的 IE TAB进程默认等级就是低。

从图中可以看出,IE TAB子进程产生的 calc子进程也是 low。

Page 10: 分析分享:Hacking Team Flash 0Day · 3 | 23 漏洞:Flash 0Day 自7 月5 日晚,Hacking Team 被Gamma Group Hacker①攻陷以来,其泄露的400GB 数据包持续在业界传播发酵,绿盟

10 | 23

利用形式

由此上面的分析,我们可以看出利用该漏洞并未达到权限提升的效果,也就是说,攻击者单独使用这个 Flash 0Day漏洞是无

法获得高权限的,它只是创建了一个低等级的进程,需要结合其他方法来提权,比如此次泄露数据中的windows内核字体权限

漏洞,利用此内核漏洞是很容易提升权限的。

同时,结合之前我们对 Hacking Team远程控制软件的分析①,可以看到其代理有两种安装方式:

• 感染移动介质 与很多木马、病毒及流氓软件的传播方式一样,该软件首先还是采取这种低成本的方式进行,感染一

些能够接触目标的移动媒体,比如 CD-ROM、USB 等,即便是 OS 或者 BIOS 设置了密码也一样可以感染,从而获取

一些环境数据,比如电脑是否可以上网等,为后续的动作提供参考依据。

• 代理攻击 采用软件或硬件的系统,能够在网络会话过程中修改和注入数据,在某些情况下,可以注入到系统并

难以被检测到。同时,也能够感染 Windows 平台上的可执行文件,如果目标电脑从网站上下载并执行这些可执行文

件时,Agent将在后台自动安装,用户不会知晓。

那么,我们这里可就可以画出一张可能的入侵乃至实现监控目的链条:

防护:思路及建议

思路

万变不离其宗,在上面的攻击链条中,有很关键的一条,用户需要执行恶意代码,漏洞利用才能成功,那么从防护的角度来

说至少需要有这些层面,1要能够侦测到恶意的 Flash脚本;2要能够阻断 Flash脚本的执行;3即便在执行后能够查杀恶意进程。

值得一提的是,从下面的截图中可以看到在大家四处下载 400GB 泄露数据包的时候,恶意 swf 就藏在这些网站页面中,从这一

①简要分析:Hacking Team远程控制系统,http://www.nsfocus.com.cn/content/details_141_1984.html

Page 11: 分析分享:Hacking Team Flash 0Day · 3 | 23 漏洞:Flash 0Day 自7 月5 日晚,Hacking Team 被Gamma Group Hacker①攻陷以来,其泄露的400GB 数据包持续在业界传播发酵,绿盟

11 | 23

点就可以看到其攻击目标很明确,针对中间环节的攻击从未停止。请下载这些数据包的人需要小心谨慎,不要四处传播这些数据

包。

在上次防护方案①中,我们也提出用 Intrusion Kill Chain模型②来进行 Flash 0Day乃至后续攻击的防护方案的参考,具体的

分析请参考那篇报告。

建议

同时,从用户的角度来说,建议您可以采取如下方式来防御 Flash 0Day漏洞以及以后的类似漏洞

• 建议您升级最新的 Flash Player,具体请访问:https://get.adobe.com/flashplayer/?loc=cn

• 建议您升级最新的安全产品规则库,具体请访问:http://update.nsfocus.com/

• 建议您安装 or升级最新杀毒软件,比如使用安全级别更高的猎豹, FireFox浏览器

• 如果上面的措施实施需要一定时间,建议您暂时禁用 Flash插件

由于 Flash使用量庞大,所以攻击者对他的分析以及暴漏出来的漏洞是相当的多且频繁,仅在近两个月,绿盟科技漏洞库就更

新发布了一系列相关漏洞,具体信息请查询安全漏洞公告: http://www.nsfocus.net/index.php?act=sec_bug

① 防护方案:Hacking Team数据泄露事件, http://www.nsfocus.com.cn/content/details_141_1987.html ② Intrusion Kill Chain(或称为 Cyber Kill Chain)模型由 Lock Martin公司 Eric M. Hutchins等三位安全研究员在 2011年 3月举行的 ICIW大会 上公布。

Page 12: 分析分享:Hacking Team Flash 0Day · 3 | 23 漏洞:Flash 0Day 自7 月5 日晚,Hacking Team 被Gamma Group Hacker①攻陷以来,其泄露的400GB 数据包持续在业界传播发酵,绿盟

12 | 23

教学:Flash漏洞分析

在上面的分析中可以看到很多的术语和技术细节,为了帮助分析人员分析及应对这个漏洞,下面就结合此次 Flash 0day 漏

洞,谈谈关于 Flash方面的知识。

Flash背景知识

Flash又被称之为闪客,2005年12月3日被Adobe公司收购。Flash通常也指Macromedia Flash Player(现Adobe Flash

Player)。 2012年 8月 15日,Flash退出 Android平台,正式告别移动端。Flash是一种动画创作与应用程序开发于一身的创

作软件,到 2013 年 9 月 2 日为止,最新的零售版本为 Adobe Flash Professional CC(2013 年发布)。目前用的最多的产品是

Adobe Flash Professional CS6。

Flash动画说到底就是“遮罩+补间动画 +逐帧动画”与元件(主要是影片剪辑)的混合物,通过这些元素的不同组合,从而可

以创建千变万化的效果。Flash 是一个非常优秀的矢量动画制作软件,它以流式控制技术和矢量技术为核心,制作的动画具有短

小精悍的特点,所以被广泛应用于网页动画的设计中,以成为当前网页动画设计最为流行的软件之一。

Flash影片的后缀名为.swf, swf在发布时可以选择保护功能,如果没有选择,很容易被别人输入到他的原始档中使用。

“fla”是 Flash的原始档,只能用对应版本或更高版本的 Flash打开编辑。

Page 13: 分析分享:Hacking Team Flash 0Day · 3 | 23 漏洞:Flash 0Day 自7 月5 日晚,Hacking Team 被Gamma Group Hacker①攻陷以来,其泄露的400GB 数据包持续在业界传播发酵,绿盟

13 | 23

ActionScript是一种程序语言的简单脚本文件,.fla原始档能够直接包含 ActionScript,但是也可以把它存成 AS档做为外部

连结档案(如定义 ActionScript类则必须在写在 as文件里,再通过 import加入类),以方便共同工作和更进阶的程序修改。

而对于一般的 Flash方面的漏洞集中于 ActionScript脚本解析执行的漏洞利用。目前 AS的最高版本是 AS3.0。

Flash文件格式

对于 Flash文件,其实和我们平时用的 PE文件,ELF,及 Dex文件类似,也是由一定格式的数据结构组成。Flash文件的扩

展名为.swf,其头部格式如下图

再好的说明也没有实际的例子理解的深刻,那我们就结合两个实际 Flash的 swf文件看看 SWF头部结构,如下图所示:

根据对 swf 文件头部的介绍,不需要大篇幅的文字来说明 swf 文件头部的结构,结合上面的两幅图,来自于两个不同的文

件,exp1.swf,exp2.swf。可以清晰的看到 swf文件的的总体结构。

Page 14: 分析分享:Hacking Team Flash 0Day · 3 | 23 漏洞:Flash 0Day 自7 月5 日晚,Hacking Team 被Gamma Group Hacker①攻陷以来,其泄露的400GB 数据包持续在业界传播发酵,绿盟

14 | 23

图中的两个 swf文件,一个是压缩过的 exp1.swf,一个是未压缩的 exp2.swf。exp1.swf和 exp2.swf由同一个 fla原始档和

AS脚本编译而成;exp1.swf被压缩,exp2未被压缩。从下图也可以看到两个文件大小的对比情况:

上面两幅 swf解析图来自于二进制查看工具 010 Editer的截图,在官方下载 swf.bt模板,导入 010 Editer工具中,打开 swf

文件,运行模板插件即可识别出二进制文件类型及结构。

简单介绍一下,根据文件头部的说明,文件头部的前三个字节是标识符的开始位为 0x46、0x57、0x53(“FWS”)或者 0x43、

0x57、0x53(“CWS”)其中之一。 “FWS”标识符说明该文件是未压缩的 SWF文件,“CWS”标识符则说明该文件前 8个字节之后

(即文件长度字段之后)的全部数据为开源的标准 ZLIB方式压缩,如上图 exp1.swf所示;标识符之后是一个字节的版本号,这

个版本号并不是一个 ASCII码,而是一个 8位的数字,比如,图中显示的版本值是 0x0F。

文件长度字段是整个包含文件头在内的文件字节长度,如果是未压缩的 SWF 文件(标识符 FWS),那么长度字段应该是和

文件大小恰好匹配,如果是一个经过压缩的 SWF文件(标识符 CWS),那么文件长度字段是指文件经过解压缩之后的总长度,

因此它一般不会和文件大小匹配,若果使用未压缩的文件尺寸能够让解压过程获得更高的效率,从上图中的 exp1.swf 看出使用

了未压缩文件大小 76528,和 exp2.swf一样的大小。

帧率是以帧每秒为单位的帧回放比率,在 exp2中给出的帧率是 12,但是在压缩文件 exp1中已经被压缩,压缩算法是 zlib.

帧数是整个 SWF影片帧的总数量。从图中看出,在压缩文件exp1也已经被压缩。文件头之后是一系列连续的标签数据块,所有

的标签都共享一种通用格式如下图:

Exp2文件的一个整体结构如下图所示:

对 swf文件格式的简单介绍就到这里,标签的具体内容这里就不做深入解读了。对于如何查看压缩之后的 swf文件内容,会

在后面介绍。

Flash常用工具介绍

对于 Flash常用工具,包括编译工具、反编译工具等。这里结合 HackingTeam给出的 Flash0Day漏洞源码来学习一些常用

的 Flash工具。

编辑编译工具:CS

这款工具就是 Flash编辑工具 CS6.0,也是目前制作 Flash动画使用最多的一款工具。该工具具有针对 AS脚本简单的调试功

能。结合 Hackingteam给出的源代码,让 CS6.0直接加载源代码中的.fla原始档文件。之后直接运行“Ctrl+Enter”会在源代码

目录下生成.swf文件。当然该.swf文件包含了 AS脚本的 ABC字节码内容;编译后的结果如下图所示,由于在给的 Flash0Day漏

洞源码中已经给出了一些调试信息,所以在点击“run cale.exe”后,所有出现了一些调试信息,如图所示:

Page 15: 分析分享:Hacking Team Flash 0Day · 3 | 23 漏洞:Flash 0Day 自7 月5 日晚,Hacking Team 被Gamma Group Hacker①攻陷以来,其泄露的400GB 数据包持续在业界传播发酵,绿盟

15 | 23

该工具还提供简单的调试功能,为了能够查看和调试AS源码文件,可以同时打开AS源码,加入调试信息或是设置断点来调

试 AS源码,如图所示

压缩与非压缩 SWF文件

从前面看到的贴图知道,对于 SWF 文件有压缩格式与非压缩格式,那么为什么会有压缩格式与非压缩格式。在 CS5.0 以前

产生的 swf默认都是非压缩格式。如果需要对 swf文件压缩需要借助其他的 swf压缩工具,比如说MinifySWF,Flash Optimizer,

LiatoSWF 等;而在 CS6.0,集成了 lzma(7-zip)和 zlib 压缩算法,对编译的 swf 文件默认都是压缩格式,所以我们看到的

HackingTeam默认编译的 exp1.swf是一种压缩格式。

如果想编译出非压缩格式的 swf文件,方法也很简单,只需要在发布影片时设置非压缩即可,如下图所示

Page 16: 分析分享:Hacking Team Flash 0Day · 3 | 23 漏洞:Flash 0Day 自7 月5 日晚,Hacking Team 被Gamma Group Hacker①攻陷以来,其泄露的400GB 数据包持续在业界传播发酵,绿盟

16 | 23

反编译工具:AS Sorcerer

对于已经发布的 swf文件,都不会带有源码,对我们调试 swf文件就带来了不小的麻烦,类似分析 Android的 DEX文件,

都是执行在虚拟机中,由虚拟机来解释执行字节码。DEX 文件由反编译工具可以反编译出 java 源码,那么 swf 文件也有类似的

工具,根据 SWF文件格式和 ABC字节码反编译出类源码的文件。

Swf反编译工具也比较多,这里举个例子利用 AS Sorcerer工具来将编译好的 swf文件重新解析,下图是 HackingTeam爆

出了 Flash0Day源码

从图中知道,根据 exp1.swf文件大小可知,HackingTeam自己编译的是 zlib压缩后的文件,当然也可以通过二进制直接看

看有没有被压缩,根据前面介绍的知识,只要二进制文件前三个字节是“CWF”那就是压缩后的文件。

接下来我们用 AS Sorcerer工具来反编译 exp1.swf文件看反编译后的结果:

Page 17: 分析分享:Hacking Team Flash 0Day · 3 | 23 漏洞:Flash 0Day 自7 月5 日晚,Hacking Team 被Gamma Group Hacker①攻陷以来,其泄露的400GB 数据包持续在业界传播发酵,绿盟

17 | 23

从反编译结果来看,该工具确实还原了原有的几个AS文件,同时也说明该工具能自动解压由 zlib压缩的 swf文件,并对 swf

文件进行反编译解析。

反编译工具:Sothink SWF Editer

接下来再介绍一款反编译工具---硕思闪客精灵,该工具比上一个款工具有更直观的界面,同时重要了一点就是提供了一款

swf文件编辑工具 Sothink SWF Editer,不但能识别 swf文件结构,而且可以直接编译 swf的二进制文件。

先来看反编译工具硕思闪客精灵反编译 exp1.swf文件的界面情况:

从图中可以看出该工具将压缩格式的 swf文件,直接反编译,同时看到了 ABC字节码在反编译后的源码情况。

Page 18: 分析分享:Hacking Team Flash 0Day · 3 | 23 漏洞:Flash 0Day 自7 月5 日晚,Hacking Team 被Gamma Group Hacker①攻陷以来,其泄露的400GB 数据包持续在业界传播发酵,绿盟

18 | 23

前面我们提到过对于压缩后的 swf文件,010 Editer即使使用了 swf模板,也不能解析出压缩后的文件格式。这里就介绍一

款能够查看SWF压缩后文件格式的工具,Sothink SWF Editer工具可以直接将压缩的 swf文件,解压同时解析出文件结构,如下

图所示:

从图中看出压缩的 swf文件,在导入该工具后自动解压并识别为 FWS文件。而非 CWS文件,为我们分析没有源码的并压缩

的 SWF文件,提供便利。

反编译工具:其他

还有其他的一些反编译工具比如 yogda,asv,swf decmpiler, decompile Flash free,swf deompiler magic 等就不一一列举

介绍。

AS脚本

AS(Action Script)是 Flash动作脚本语言,类似于 JS(JavaScript)脚本语言,所以在很多存储结构和对象使用上都可以

参考 JS脚本语言的使用方式。下面结合本漏洞中会用到的一些结构对象做简要介绍。

AS中数组的使用

对于 AS中的数组我们需要知道 AS数组不像 C/C++中的数组,在 C/C++中数组要求存储同种类型的数据,而在 AS中可以

存储不同类型的数据,可以是基本数据类型也可以是对象类型也可以是自己定义的类型。在本例将要提到的 AS 中,数据 Array

就同时存储了 ByteArray和MyClass2两种数据类型。

AS中 Vector存储形式

在 AS中,Vector只能存储同一类型的元素,其一般使用的格式如下:

1 var v:Vector .<int>= new Vector.<int>(100) //声明一个含有 100 个整型数的 Vector 变量 v。

Vector类构造函数有两个可选参数,它允许你明确你的 Vector实例的数量。第一个参数是 length参数。默认情况下,当一

个 Vector被创建时,它是空的(它有 0个元素)。然而,如果你传递一个值给 length参数,明确元素数量的 Vector实例就被创建

了:

1 var myVector:Vector.<String> = new Vector.<String>(7); // myVector is created with 7 elements

Page 19: 分析分享:Hacking Team Flash 0Day · 3 | 23 漏洞:Flash 0Day 自7 月5 日晚,Hacking Team 被Gamma Group Hacker①攻陷以来,其泄露的400GB 数据包持续在业界传播发酵,绿盟

19 | 23

Vector 对象的另一个特征就是他们可以调整长度,这意味着你可以改变值,但是不能通过添加或删除元素来改变总数。默

认地,一个 Vector实例是不允许动态修改长度的。要创建一个可修改长度的 Vector,将 Vector 类构造函数的第二个参数(fixed

参数)设置为 true:

1 var myVector:Vector.<String> = new Vector.<String>(7, true); // m yVector's length is fixed to 7 elements

注意: 可以在任何时候修改 Vector对象的 fixed属性来设置 Vector的长度是否可变。

1 myVector.fixed = false; // myVector's length is no longer fixed

uint Vector在内存中的布局如下图,Uint vector包含了 8字节的头部信息,其中 4字节是长度字段。

AS中对象类型转换

在 AS通用对象属性中有两个特殊的方法 ToString()方法和 ValueOf()方法。

ToString 方法没有参数,它返回一个某种程度上代表着对象值的一个字符串,而它正是在这个对象上调用的。当 AS需要将

一个对象转换为一个字符串对象时,就需要调用该函数。比如当使用+运算将一个字符串和一个对象链接起来,或是当期待一个

字符串的函数 Alert传递一个对象的时候就会默认调用该函数。

ValueOf方法和 ToString方法类似,它是当 AS需要把一个对象转换为某种基本数据类型时就会调用该方法。比如一个对象

用在需要一个基本数值的环境中,AS 会自动调用该函数,而在本文提到的漏洞中正式利用了这一点,在将一个对象 Myclass 转

为字节类型时默认调用Myclass的 ValueOf方法。

Flash ActiveX控件介绍

Flash ActiveX控件是 Adobe提供的解析执行 swf文件的引擎文件。AS1.0的时候 Flash还没有虚拟机机制,AS2.0在控件中

集成了 AVM1,AS3.0集成了 AVM2。

如何查看本机安装的 Flash控件版本

方法一:随便打开一个视频网站的视频文件,点击右键看 Flash 版本,这里 Flash 版本就是本机安装的 Flash 版本,这里以

优酷视频为例显示出本机 Flash版本:

方法二:在本机控制面板中,点击本机控制面板中的 Flash player,在更新标签中显示了跟控件的版本信息,如图:

Page 20: 分析分享:Hacking Team Flash 0Day · 3 | 23 漏洞:Flash 0Day 自7 月5 日晚,Hacking Team 被Gamma Group Hacker①攻陷以来,其泄露的400GB 数据包持续在业界传播发酵,绿盟

20 | 23

方法三:在注册表中查看,如图示:

方法四:登录 Flash官网在线查看 Flash版本,地址为 http://www.Adobe.com/software/Flash/about/,该网址能自动识

别出本机的 Flash控件版本,其显示结果为:

更新 Flash控件的常用办法

方法一:在控制面板的 Flash player中安装更新

Page 21: 分析分享:Hacking Team Flash 0Day · 3 | 23 漏洞:Flash 0Day 自7 月5 日晚,Hacking Team 被Gamma Group Hacker①攻陷以来,其泄露的400GB 数据包持续在业界传播发酵,绿盟

21 | 23

方法二:官网下载

方法三,在上面视频网站打开视频,点击右键,点击关于 Adobe,也会进入官网下载

Flash控件介绍

Flash控件的安装目录默认在C:\Windows\System32\Macromed\Flash下, 在系统目录下,这玩意要求权限还挺高的,控

件名 Flash32.ocx,如下图所示:

Page 22: 分析分享:Hacking Team Flash 0Day · 3 | 23 漏洞:Flash 0Day 自7 月5 日晚,Hacking Team 被Gamma Group Hacker①攻陷以来,其泄露的400GB 数据包持续在业界传播发酵,绿盟

22 | 23

Flash控件就是个 PE类型的文件,可以使用 PE查看工具来查看该文件。前面说过 Flash控件不是微软发布的控件,没有提

供符号表,所以不能看到详细的导出函数,下面是用 LoadPE工具来查看它所有的导出函数,如下图所示

从图中可以看出我们能看到的导出函数函数只有 8个。在使用 IDA工具加载该控件后我们能看到的绝大部分函数名是下面这

种类型:

很难辨认出函数名和函数的作用。所以对很多人来说分析 Flash漏洞就更难了。

威胁情报

从目前此次攻击及各方面应对情况来看,对于一些高级攻击形式,关键在于尽可能快的了解到相关的情报,以便尽可能快

的启动应急响应机制。这无论对于解决木马或者 APT 攻击来说都是重要的手段之一,威胁情报的获取及响应都体现了防御能力

的建设程度,威胁情报服务体系至少包含了威胁监测及响应、数据分析及整理、业务情报及交付、风险评估及咨询、安全托管

Page 23: 分析分享:Hacking Team Flash 0Day · 3 | 23 漏洞:Flash 0Day 自7 月5 日晚,Hacking Team 被Gamma Group Hacker①攻陷以来,其泄露的400GB 数据包持续在业界传播发酵,绿盟

23 | 23

及应用等各个方面,涉及研究、产品、服务、运营及营销的各个环节,绿盟科技通过研究、云端、产品、服务等立体的应急响

应体系,向企业和组织及时提供威胁情报,并持续对对匿名者攻击事件进行关注,保障客户业务的顺畅运行。

如果您对我们提供的内容有任何疑问,或者需要了解更多的信息,可以随时通过在微博、微信中搜索绿盟科技联系我们,

欢迎您的垂询!

关于绿盟科技

北京神州绿盟信息安全科技股份有限公司(简称绿盟科技)成立于 2000 年 4 月,总部位于北京。在国内外设有 30 多个分

支机构,为政府、运营商、金融、能源、互联网以及教育、医疗等行业用户,提供具有核心竞争力的安全产品及解决方案,帮

助客户实现业务的安全顺畅运行。

基于多年的安全攻防研究,绿盟科技在网络及终端安全、互联网基础安全、合规及安全管理等领域,为客户提供入侵检测/

防护、抗拒绝服务攻击、远程安全评估以及Web安全防护等产品以及专业安全服务。

北京神州绿盟信息安全科技股份有限公司于 2014年1月29日起在深圳证券交易所创业板上市交易,股票简称:绿盟科技,

股票代码:300369。