Hacking Team事件已经过去1个星期,社会各界针对泄露数据的分析还在进行中。为了帮助安全技术从业者后续能够有更多的人加入到分析队伍中来,绿盟科技安全技术专家将Flash 0Day的分析方法开放出来跟大家共享,便于技术人员能够入手Flash 0Day漏洞分析。
0x01 漏洞:Flash 0Day
自7月5日晚,Hacking Team被Gamma Group Hacker 攻陷以来,其泄露的400GB数据包持续在业界传播发酵,绿盟科技威胁响应中心持续跟踪事态进展,给出系列分析报告 ,同时也将相关解决方案提供给合作伙伴及最终用户,以便用户能够应对可能发生的攻击,此次事件告一段落。今天绿盟科技安全技术人员将针对此次泄露的Flash 0Day漏洞,将分析方法、工具及相关知识分享出来,希望更多的安全行业从业者能够从中有所获益。
1 为什么是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沙箱原理要有比较透彻的理解。
现在的Flash一般都嵌入到网页,如果想利用Flash漏洞来获取权限,无疑受到IE等浏览器本身机制的保护,比如IE,Chrome的沙箱机制。这就要求对沙箱机制和如何绕过沙箱有个整体细致的了解,也就是说想通过Flash漏洞来获取更高的权限还是要有更高的功底。
对于漏洞分析和利用如果没有POC,那也只能靠自己去挖掘这个漏洞; 另一方面如果缺少完整的POC,攻击者只能自己去写代码,所以业界及主管机构都是严格控制POC的传播。
POC的基本功能就是验证并触发该漏洞或是Bug存在,但是能触发漏洞,不代表就一定能利用漏洞;有些漏洞是不能利用,当然我们也可以不管这类漏洞叫漏洞,而只能称之为Bug。但此次泄露出的Flash0day数据,是可以被触发的。
2 漏洞触发那么此次的漏洞如果被触发,会有什么样的结果呢?先来看看漏洞触发后的现象。通过分析,利用该漏洞可以在IE中稳定的执行系统可执行文件,比如在下图中就弹出了计算器。
方法很简单利用构造的test.html加载swf文件,在加载swf文件时IE会提示要加载ActiveX插件,运行就行。加载插件后点击图中的“run calc.exe”按钮即可弹出计算器,漏洞利用成功。这个实验中使用Win7 64位、IE11,能稳定触发漏洞。
3 受影响系统Adobe Flash Player存在一个严重的释放后重利用内存破坏漏洞,攻击者可能远程获得当前用户的权限。此漏洞影响大量Flash Player版本,此漏洞影响大量Flash Player版本,目前已有可利用的攻击代码公开发布,强烈建议受影响用户更新到当前厂商提供的最新版本。
Adobe Flash Player <= 18.0.0.194Adobe Flash Player <= 18.0.0.194Adobe Flash Player Extended Support Release 13.xAdobe Flash Player Extended Support Release 13.0.0.296Adobe Flash Player for Linux 11.xAdobe Flash Player for Linux 11.2.202.468
0x02 攻击:漏洞利用1 触发原理
该漏洞是一个典型的UAF释放重利用的漏洞。用户改写字节数组大小,在原来字节数组释放后,重新分配,导致该数值被写入已经释放的内存中,造成释放重利用。
2 动态调试
由于Hacking Team泄露出的数据中暴露了Flash 0Day漏洞源码,我们的得以使用CS进行动态调试。