热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

Flash0day漏洞(CVE20185002)千万不要乱打开Excel文档!

腾讯御见威胁情报中心近日监控到一例使用AdobeFlash0day漏洞(CVE-2018-5002)的APT攻击,攻击者疑通过即时聊天工具和邮箱等把恶意Excel文档发送给目标人员

腾讯御见威胁情报中心近日监控到一例使用Adobe Flash 0day漏洞(CVE-2018-5002)的APT攻击,攻击者疑通过即时聊天工具和邮箱等把恶意Excel文档发送给目标人员,诱骗目标人员打开文档。实际上,该恶意Excel文档经过特别构造,被嵌入了flash对象,用户一旦打开文档电脑就会中毒。

CVE-2018-5002影响Adobe Flash Player 29.0.0.171及所有之前的版本。Adobe官方于6月7日下午发布安全公告(公告ID:APSB18-19),Adobe Flash Player的版本已更新到30.0.0.113。具体可参考Adobe 官方安全公告:https://helpx.adobe.com/security/products/flash-player/apsb18-19.html

我们及时向Adobe官方上报了漏洞利用样本,并获得了Adobe官方确认和致谢。 

1.png

(攻击流程图)


0×2 攻击流程分析


1. 漏洞文档行为分析

此次攻击时使用的诱饵文档文件名为《basic_salary.xlsx》,主要内容为阿拉伯语言撰写的外交部官员基本工资情况。诱饵文档嵌入了一个在线的Flash对象,用户打开文档后,就会自动加载Flash文件。

2.png

(google翻译后的文档内容)

3.png

(诱饵文档内容)


2. SWF1行为分析

SWF1文件中的代码高度混淆,后续图片中的源码,均是对混淆代码进行一定优化后截取的。

4.png

(混淆后的SWF1代码)

诱饵文档中嵌入了一个在线swf对象,当打开带漏洞的excel表格时,会加载“Movie”字段所指向的在线Flash文件,这里取名为SWF1。

Excel会将FlashVars指向的文本会以参数的形式传递给SWF1,这里存放的是漏洞利用样本(SWF2文件) 和 ShellCode等URL信息,分别被标记为了stabUrl、encKeyUrl、downloadUrl、imageUrl。

6.png

(SWF1运行时取参数)

SWF1运行后,会以post方式从参数encKeyUrl 指向的WEB服务器得到解密key及加密的swf。使用aes算法解密后,得到漏洞swf文件,取名为SWF2。

7.png

(SWF1以post方式下载加密的SWF2)

8.png

(SWF1使用aes解密SWF2)

SWF1通过LoadBytes将解密后的漏洞利用文件SWF2加载执行,并将downloadUrl等参数传给SWF2。

9.png

(SWF1加载SWF2)


3. SWF2(0day漏洞)行为分析

CVE-2018-5002是由于Flash未能正确处理包含特殊字节码序列的SWF文件时产生的栈越界读写漏洞。该漏洞同之前的CVE-2017-11292类似,都需要修改SWF文件的字节码来触发漏洞。同时该漏洞的利用只需要简单的内存布局,不需要复杂的堆喷,一个样本同时在32位和64位系统中稳定运行。

1) 漏洞原理分析

a. 漏洞代码

ASC2(ActionScript 2)引入了一组用于快速操作内存的函数,如li8, si8等等。该组函数的具体含义如下:

1.jpg

样本代码经过了恶意混淆,下面是清除混淆后的触发漏洞代码。

2.png

其中包含li8的静态初始化(Static Initializer)代码并没有被完全反编译,下图是根据其字节码得出的伪码:

3.png

实际调试发现,执行li8指令时会触发异常,同时异常会交由当前的catch块来处理。而catch部分的代码可以越界将其调用者的栈上的两个对象指针(local_448, local_449)互换,从而实现类型混淆。

这里就产生两个重要的问题:


I  li8指令并不在try块中,为什么产生的异常能被当前的catch块捕获?

II  catch块正常情况下只能访问local_0和local_1,为什么这里能越界读写?


b. 异常处理

Flash的虚拟机AVM在执行可能会触发异常的字节码前,会记录当前执行的位置previous_bytecode_offset,当发生异常后则根据记录的执行位置从异常处理例程表ExceptionHandlerTable中查找对应的异常处理函数,即AS脚本或字节码中的catch块。

Flash在创建domainMemory时,会为其初始化一个大小为0×400的内存。

4.jpg

Flash在执行li8(123456)指令时,首先会检查偏移123456是否超过了domainMemory的大小。由于偏移123456超过了domainMemory的范围0-1023,所以Flash会抛出一个Range Error的异常,如下图所示,其中0×34为li8的字节码0×35 – 1。

5.png

在执行该段代码前,previous_bytecode_offset被初始化为0。此后一共执行了三个字节码,分别是:jump,push,li8,这三个字节码的执行都没有保存当前执行的位置到previous_bytecode_offset。

这样Flash在处理li8字节码触发的异常时,认为异常发生的位置为0,接下来FindExceptionHandler函数根据异常发生的位置查找对应的异常处理函数,由于异常位置0位于当前的Try块内,FindExceptionHandler函数就认为该异常应该交给当前的catch块来处理。

下图就是调试该过程的截图,FindExceptionHandler的第二个参数就是出现异常的偏移即previous_bytecode_offset,值为0。

6.png

c. 栈越界读写

栈越界读写主要是通过绕过Flash对Catch代码块的检查(Verify)实现的。

Flash在对Try代码块进行检查时,发现当前代码块只有一条jump指令,而jump指令不会抛出异常。

7.png

同时,由于jump目标区域的字节码序列不在Try代码块内, Flash AVM认为整段代码不会发生异常,对应的catch代码不会被执行到,所以略过了对catch代码块的检查,从而可以在catch代码块内实现越界读写。

8.png

越界读写前:

9.png

触发越界读写,交换local_448和local_449:

10.png

2) 行为分析

SWF2运行后会从downloadUrl指向的WEB服务器下载加密的数据,以得到shellcode。

10.png

(SWF2 取shellcode下载链接)

11.png

(SWF2下载shellcode)

取加密数据的前16个字节作为解密的Key,通过AES解密ShellCode。

12.png

(SWF2解压缩并执行shellcode)

再借助0day漏洞将shellcode执行起来。由于ShellCode服务器已经关闭,已经无法获取ShellCode的具体内容。

13.png

(执行32位或64位shellcode)

14.png

(执行shellcode)


0×3 总结

该APT组织使用0day漏洞攻击政府相关部门,利用纯shellcode在宿主进程excel中干坏事。而这种0day漏洞加纯shellcode的攻击方式对安全软件的检测和防护能力是一个挑战。

腾讯御见威胁情报中心判断在此0day漏洞利用方法未被广泛传播之前,该漏洞仍将主要被技术实力强劲的APT组织所掌握。而鉴于Adobe Flash Player几乎安装在每一台电脑上,且有大量用户未能及时修补安全漏洞,当该漏洞的利用方法被病毒木马黑色产业掌握时,或将会带来大面积的网页挂马威胁。

腾讯安全专家提醒政府机关、相关企业用户切勿随意打开来历不明的文档,安装安全软件防御攻击。此外,及时升级Adobe Flash Player到最新版本(30.0.0.113)以防御可能的漏洞攻击威胁,下载地址:https://get.adobe.com/cn/flashplayer/

目前,腾讯御界高级威胁检测系统已经可以检测并阻断该轮攻击的连接行为。企业用户通过部署御界高级威胁检测系统,可以及时感知恶意流量,检测钓鱼网址和远控服务器地址在企业网络中的访问情况,保护企业网络安全。(详情见链接https://s.tencent.com/product/gjwxjc/index.html)

15.png


附录(IOCs):

16.png17.png


原文链接:https://www.cnblogs.com/bugxf/p/16015224.html



推荐阅读
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 数字账号安全与数据资产问题的研究及解决方案
    本文研究了数字账号安全与数据资产问题,并提出了解决方案。近期,大量QQ账号被盗事件引起了广泛关注。欺诈者对数字账号的价值认识超过了账号主人,因此他们不断攻击和盗用账号。然而,平台和账号主人对账号安全问题的态度不正确,只有用户自身意识到问题的严重性并采取行动,才能推动平台优先解决这些问题。本文旨在提醒用户关注账号安全,并呼吁平台承担起更多的责任。令牌云团队对此进行了长期深入的研究,并提出了相应的解决方案。 ... [详细]
  • MATLAB函数重名问题解决方法及数据导入导出操作详解
    本文介绍了解决MATLAB函数重名的方法,并详细讲解了数据导入和导出的操作。包括使用菜单导入数据、在工作区直接新建变量、粘贴数据到.m文件或.txt文件并用load命令调用、使用save命令导出数据等方法。同时还介绍了使用dlmread函数调用数据的方法。通过本文的内容,读者可以更好地处理MATLAB中的函数重名问题,并掌握数据导入导出的各种操作。 ... [详细]
  • 我们有(据我所知)星型模式SQL数据库中的数据文件。该数据库有5个不同的文件,扩展名为 ... [详细]
  • Office07:桌面办公软件的极品
    本文介绍了桌面办公软件Office07的优点,包括跟踪菜单功能、丰富的样式功能和Excel的制图功能。作者强调了对知识产权的尊重和保护的重要性。 ... [详细]
  • 如何用python pandas读取一个多层表头的excel,将多层表头转化为列?
    原始数据:期待的数据 ... [详细]
  • 解决.net项目中未注册“microsoft.ACE.oledb.12.0”提供程序的方法
    在开发.net项目中,通过microsoft.ACE.oledb读取excel文件信息时,报错“未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序”。本文提供了解决这个问题的方法,包括错误描述和代码示例。通过注册提供程序和修改连接字符串,可以成功读取excel文件信息。 ... [详细]
  • Excel中超好用的5招条件格式图表可视化 ... [详细]
  • 本文介绍了一个免费的asp.net控件,该控件具备数据显示、录入、更新、删除等功能。它比datagrid更易用、更实用,同时具备多种功能,例如属性设置、数据排序、字段类型格式化显示、密码字段支持、图像字段上传和生成缩略图等。此外,它还提供了数据验证、日期选择器、数字选择器等功能,以及防止注入攻击、非本页提交和自动分页技术等安全性和性能优化功能。最后,该控件还支持字段值合计和数据导出功能。总之,该控件功能强大且免费,适用于asp.net开发。 ... [详细]
  • 本文介绍了如何使用PHP代码将表格导出为UTF8格式的Excel文件。首先,需要连接到数据库并获取表格的列名。然后,设置文件名和文件指针,并将内容写入文件。最后,设置响应头部,将文件作为附件下载。 ... [详细]
  • EPPlus绘制刻度线的方法及示例代码
    本文介绍了使用EPPlus绘制刻度线的方法,并提供了示例代码。通过ExcelPackage类和List对象,可以实现在Excel中绘制刻度线的功能。具体的方法和示例代码在文章中进行了详细的介绍和演示。 ... [详细]
  • 手把手教你使用GraphPad Prism和Excel绘制回归分析结果的森林图
    本文介绍了使用GraphPad Prism和Excel绘制回归分析结果的森林图的方法。通过展示森林图,可以更加直观地将回归分析结果可视化。GraphPad Prism是一款专门为医学专业人士设计的绘图软件,同时也兼顾统计分析的功能,操作便捷,可以帮助科研人员轻松绘制出高质量的专业图形。文章以一篇发表在JACC杂志上的研究为例,利用其中的多因素回归分析结果来绘制森林图。通过本文的指导,读者可以学会如何使用GraphPad Prism和Excel绘制回归分析结果的森林图。 ... [详细]
  • 本文详细介绍了使用 SQL Load 和 Excel 的 Concatenate 功能将数据导入 ORACLE 数据库的方法和步骤,同时介绍了使用 PL/SQL tools 将数据导入临时表的方法。此外,还提供了一个转链接,可参考更多相关内容。摘要共计XXX字。 ... [详细]
  • Excel表格怎么添加子表格?
    很多用户在使用excel表格的时候,还不是很清楚表格的所有操作,今天有用户问小编怎么添加子表格,每次使用一张表格建一张新的,但是不懂得怎么操作,小 ... [详细]
  • java drools5_Java Drools5.1 规则流基础【示例】(中)
    五、规则文件及规则流EduInfoRule.drl:packagemyrules;importsample.Employ;ruleBachelorruleflow-group ... [详细]
author-avatar
邓世璇_664_425
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有