2016年5月10日,Adobe公司宣布了一个已被利用的Flash Player零日漏洞,这个严重的漏洞编号为CVE-2016-4117,影响到21.0.0.226及更早版本的Flash Player,横跨Windows、Mac、Linux和Chrome OS平台。攻击者可以利用此漏洞让目标Flash Player崩溃,并且有可能控制受影响的操作系统。
2016年5月12日,Adobe官方发布了Flash Player新版本修补了当前的漏洞。
官方介绍网址如下:
https://helpx.adobe.com/security/products/flash-player/apsa16-02.html
什么是Flash Player?
Adobe Flash Player 是一款高级客户端运行时使用的播放器。它短小精悍,能够在各种浏览器、操作系统和移动设备上使用,功能强大,兼容性高。最初由Macromedia编写,之后被Adobe公司收购后由Adobe公司继续开发并分发。
Adobe Flash Player最初设计目的为播放二维向量动画,之后成为开发创造丰富型互联网应用程序、流视频音频的工具。Flash使用矢量图形的技术来最小化文件以及创建节省网络带宽和下载时间的文件,因此Flash成为嵌入网页中的小游戏、动画以及图形用户界面常用的格式,最终给用户带来美妙的数字体验。
影响的版本
- Adobe Flash Player <= 21.0.0.226
不受影响的版本
- Adobe Flash Player > 21.0.0.226(当前最新版本:21.0.0.242)
漏洞原理
根据现有资料的分析,该漏洞是由于调用DeleteRangeTimelineOperation类时,没有进行”placement”的类型检测,造成越界访问,最终实现远程代码执行。
漏洞位于com.adobe.tvsdk.mediacore.timeline.operations中:
当调用DeleteRangeTimelineOperation类时,其参数为Placement类的一个的实例placement,此时AVM虚拟机则会调用内部函数getBinding来获取一个bind id。
int __thiscall sub_1035F480(int this_DeleteRangeTimelineOperation, int a2) { … this_DeleteRangeTimelineOperation1 = this_DeleteRangeTimelineOperation; varPlacement = sub_10787840(aThis, (int)”placement”); varPlacement_1 = varPlacement; varControlledIndex = sub_107C84E0( *(_DWORD *)(*(_DWORD *)(*(_DWORD *)(this_DeleteRangeTimelineOperation1 + 12) + 8) + 4), *(_DWORD *)(*(_DWORD *)(*(_DWORD *)(this_DeleteRangeTimelineOperation1 + 12) + 8) + 20), &varPlacement_1); obj = *(_DWORD *)(this_DeleteRangeTimelineOperation1 + 0xC); varControlledObj = *(_DWORD *)(*(_DWORD *)(obj + 8) + 4 * (varControlledIndex >> 3) + 0x3C); v24 = (*(int (**)(void))(*(_DWORD *)obj + 8))(); v14 = alloca(v13 & 4); v15 = (*(int (__cdecl **)(int, _DWORD, int *))(*(_DWORD *)(varControlledObj + 8) + 8))(varControlledObj, 0, &v24); … }
bind id =varControlledIndex >> 3
varControlledObj=[obj+4*(bind id)+0x3Ch],poc样本可以造成varControlledObj ==0,读取[varControlledObj+ 8]地址处的内存时crash。
也就是说基类DeleteRangeTimelineOperation的Placement属性可以被越界读取,在利用的时候,可以通过派生类创建Placement的新类型属性,比如Boolean 或者Integer,达到控制bind id的目的:
public dynamic class Data4 extennds DeleteRangeTimelineOperation { public var a0:uint; public var a1:uint; public var a2:uint; public var a3:uint; public var a4:uint; public var a5:uint; public var a27:Object; public var placement:Object = true; public function Data4() { this.a27 = this; } }
对于原理的检测主要关注:
- 定义了一个基于DeleteRangeTimelineOperation的派生类。
- 在该派生类中对placement的类型进行定义。
漏洞利用
该漏洞主要被攻击者利用以散布Locky勒索软件家族,根据fireeye的报告,其过程为:
- 含有漏洞的swf被嵌入到了doc文档中:
该漏洞发挥作用的条件为Flash Player的版本大于21.0.0.196
- 条件符合时,触发第一阶段shellcode的执行
功能为:从攻击者的服务器上下载并执行第二阶段shellcode。
- 第二阶段shellcode:
一是下载并执行恶意程序
二是下载并打开诱饵文档
- 恶意程序:连接第二台服务器用于指挥控制,等待进一步的操作。
流程:
对于该wild利用,检测的针对点:
1.Doc是否嵌入了swf,没有则不进行该样本检测;
2. 若有则检测flash版本,小于21.0.0.196则不继续检测
大于21.0.0.196后则重点检测Downloader行为,但是由于请求地址不完全或者变动性,建议检测到有exe下载行为则告警。
修复方法
受影响的用户可以升级到Adobe Flash Player 21.0.0.242。
目前厂商已经发布了升级补丁修复了安全问题,请到厂商主页下载:
https://get.adobe.com/cn/flashplayer
绿盟科技处理建议
- 检查Flash版本。
访问网站http://www.adobe.com/software/flash/about/,则会提示当前系统中的Adobe Flash Player版本。
Windows用户可以进入%SystemRoot%\System32\Macromed\Flash\目录下,右键单击FlashUtil_ActiveX.exe/ FlashUtil_ActiveX.dll/ Flash.ocx查看属性中的详细信息,其中文件版本标识了当前Flash Player的版本。
-
确定自己的Flash Player为受影响的版本后,打开https://get.adobe.com/flashplayer。
-
取消下图中对勾,点击立即安装,保存安装包,下载完后打开执行。
声 明
本安全公告仅用来描述可能存在的安全问题,绿盟科技不为此安全公告提供任何保证或承诺。由于传播、利用此安全公告所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,绿盟科技以及安全公告作者不为此承担任何责任。绿盟科技拥有对此安全公告的修改和解释权。如欲转载或传播此安全公告,必须保证此安全公告的完整性,包括版权声明等全部内容。未经绿盟科技允许,不得任意修改或者增减此安全公告内容,不得以任何方式将其用于商业目的。
关于绿盟科技
北京神州绿盟信息安全科技股份有限公司(简称绿盟科技)成立于2000年4月,总部位于北京。在国内外设有30多个分支机构,为政府、运营商、金融、能源、互联网以及教育、医疗等行业用户,提供具有核心竞争力的安全产品及解决方案,帮助客户实现业务的安全顺畅运行。
基于多年的安全攻防研究,绿盟科技在网络及终端安全、互联网基础安全、合规及安全管理等领域,为客户提供入侵检测/防护、抗拒绝服务攻击、远程安全评估以及Web安全防护等产品以及专业安全服务。
北京神州绿盟信息安全科技股份有限公司于2014年1月29日起在深圳证券交易所创业板上市交易,股票简称:绿盟科技,股票代码:300369。
如果您需要了解更多内容,可以
加入QQ群:486207500
直接询问:010-68438880-8669