欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

FLASHMINGO:一款可以预防Flash攻击的开源自动分析工具

来源:本站整理 作者:佚名 时间:2019-04-18 TAG: 我要投稿

Adobe Flash是过去十年中最受开发的软件组件之一,不过这也使其成为攻击者的目标。自2005年以来,仅Flash播放器就被分配了1000多个CVE。其中,近900个漏洞的公共漏洞评分系统(CVSS)得分为9或更高。
在与攻击者博弈了这么长时间后,Adobe终于决定在2020年弃用Flash。这一举动并不令人意外,因为所有主流浏览器都已经放弃了对Flash的支持。
不过,目前存在一种误解:既然Flash已经成为过去式了,是不是我们就不必对它进行安全防护了。然而,历史告诉我们,传统技术如果要被完全更迭,会花很长时间。如果组织没有及时淘汰Flash,则由于缺少安全补丁,黑客会更加猖狂,安全威胁可能会超过Flash的生命周期。
目前FLARE团队的恶意软件分析师仍然在恶意软件样本中看到Flash漏洞的利用样本,因此,他们必须在Flash被完全替换之前,找到一个过渡的安全方案。这也是FLASHMINGO出现的原因,它是一个自动分析SWF文件的框架。FLASHMINGO使分析师能够对可疑的Flash样本进行分类,并以最小的付出进一步调查它们。它作为一个独立的应用程序会被集成到各种分析工作流程中,或者独立作为一个强大的库使用。用户可以通过自定义Python插件轻松地扩展该工具的功能。
SWF和ActionScript3
在深入了解FLASHMINGO的内部工作原理之前,让我们了解一下Flash框架。Flash的SWF文件由块(称为标记)组成,以实现特定的功能。标记彼此完全独立,允许与旧版本的Flash兼容。如果不支持标记,则软件会忽略它。这意味着,安全漏洞的主要与SWF的脚本语言有关:ActionScript3 (AS3)。此脚本语言被编译为字节码并放置在Do ActionScript ByteCode(DoABC)标记内。如果SWF文件包含DoABC标记,则字节码由Adobe Flash player中附带的专用基于堆栈的虚拟机(VM)提取并执行,该虚拟机在AS3的情况下称为AVM2。 AVM2的设计基于Java VM,同样受到内存损坏和逻辑漏洞的困扰,这些漏洞允许恶意AS3字节码在Flash播放器的上下文中执行本机代码。只有在少数情况下,AVM2中才不存在过去的漏洞,不过仍然需要使用ActionScript代码将系统置于适合可靠利用的状态。例如,在触发内存损坏之前清理堆。基于这些原因,FLASHMINGO着重分析AS3字节码。
FLASHMINGO的框架
FLASHMINGO利用开源SWIFFAS库来解析Flash文件,此时,所有二进制数据和字节码都被解析并存储在一个名为SWFObject的大型对象中。该对象包含与我们的分析相关的SWF的所有信息:标记列表、有关所有方法的信息、字符串、常量和嵌入式二进制数据,它本质上是以一种易于查询的格式表示SWF文件。
FLASHMINGO是一组插件,可以在SWFObject上运行并提取有趣的信息。图1显示了FLASHMINGO及其插件与SWFObject之间的关系。

软件结构
FLASHMINGO已经包含了几个有用的插件,涵盖了常见的分析,包括:
1.查找可疑的方法名称,许多示例包含开发期间使用的方法名称,比如“run_shell”或“find_virtualprotect”,此插件使用包含可疑子字符串的方法标记恶意样本。
2.发现可疑的常量,字节码中某些常量的存在可能指向恶意代码或可疑代码。例如,包含常量0x5A4D的代码可能是搜索MZ标头的shellcode。
3.发现可疑的loop,恶意活动经常发生在loop中。这包括编码、解码和堆喷涂。这个插件标记包含具有有趣操作(如XOR或按位AND)的loop方法。它是一种简单的启发式方法,可有效地检测大多数编码和解码操作,以及其他需要进一步分析的有趣代码。
4.检索所有嵌入的二进制数据;
5.使用FFDEC Flash Decompiler的反编译器插件。Flash Decompiler或称FFDec,FFDec是一个比较好用的基于JAVA平台开发的SWF反编译软件,也就是flash反编译软件。Flash Decompiler反编译软件可通过打开图标或者拖动SWF文件到软件窗口中来开始反编译FLASH SWF/GFX/SWC文件。可以打开编辑FLASH,提供里面的图形、文本、图像、视频、声音、按钮与字体框架脚本等资源。可另存为EXE文件,还可导出为FLA/XFL文件。对里面的资源可以删除或导出所选,替换文件或者进行RAW编辑。
这个用Java编写的反编译器引擎可以用作独立的库。由于FLASHMINGO是用Python编写的,因此使用此插件需要Jython在这两种语言之间进行互操作。
使用你自己的插件扩展FLASHMINGO
FLASHMINGO非常容易扩展,每个插件都位于插件目录下自己的目录中。在启动FLASHMINGO时,搜索所有插件目录以查找列表文件(稍后将解释),如果插件被标记为活动的,则注册插件。
研发人员提供了模板插件,如果你要添加自己的插件,请复制模板目录,重命名并编辑其列表和代码。用YAML编写的模板插件列表如下所示:
```
# This is a template for easy development
name: Template
active: no
description: copy this to kickstart development
returns: nothing
```
此模板中最重要的参数是:name和active。 name参数在FLASHMINGO内部用于引用它。 active参数是一个布尔值((yes或no)),指示此插件是否应处于活动状态。默认情况下,所有插件(模板除外)都处于活动状态,但在某些情况下,用户可能希望禁用插件。参数描述和返回是简单的字符串,用于向用户显示文档。最后,在程序启动时解析插件列表。添加新插件或启用/禁用插件需要重新启动FLASHMINGO。
现在来看实现业务逻辑的实际代码,文件plugin.py包含一个名为Plugin的类,唯一需要做的就是实现它的run方法。每个插件都接收一个SWFObject实例作为参数。代码将与此对象交互,并以用户定义的自定义格式返回数据。通过这种方式,可以编写用户的插件来生成可以被其基础设施直接接收的数据。
让我们看看通过遍历其中一个名为binary_data的插件来创建插件是多么容易,这个插件会默认返回SWF文件中的所有嵌入数据。如果用户指定了一个可选参数模式,那么插件将在嵌入式数据中搜索该字节序列的匹配项,返回一个嵌入式数据字典和找到该模式的偏移量。

[1] [2]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载