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

xiaohui 安全工具 2019年4月18日发布
Favorite收藏

导语:FLASHMINGO是一个自动分析SWF文件的框架。FLASHMINGO使分析师能够对可疑的Flash样本进行分类,并以最小的付出进一步调查它们。

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之间的关系。

1.png

软件结构

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文件中的所有嵌入数据。如果用户指定了一个可选参数模式,那么插件将在嵌入式数据中搜索该字节序列的匹配项,返回一个嵌入式数据字典和找到该模式的偏移量。

首先,我们定义用户提供的可选参数模式(第2行和第4行)。

2.png

然后,实现一个自定义运行方法和支持它所需的所有其他代码:

3.png

这是一个简单且有用的插件,它会详细说明了如何与FLASHMINGO进行交互。该插件有一个可通过属性“ml”(第2行)访问的日志记录功能。默认情况下,它会记录到FLASHMINGO的主记录器。如果未指定,则返回到插件目录中的日志文件。第10行到第16行显示了自定义运行方法,借助自定义_inspect_binary_data方法从SWF的嵌入数据中提取信息。请注意此二进制数据的来源:它是从一个名为“swf”的属性读取的。如前所述,它是作为参数传递给插件的SWFObject。可以对与此swf对象交互的SWF文件内容执行更复杂的分析。

总结

尽管Flash已经准备好在2020年底彻底被废除,并且大部分开发社区已经不再使用它了,但研究人员预测,在它被完全取代之前,会在一段时间的以Flash为感染媒介的攻击浪潮。而FLASHMINGO则为恶意软件分析师提供了一个灵活的框架,可以快速处理复杂的Flash攻击样本,而不会被复杂的执行环境和文件格式所困扰。

如果需要,你可以点此下载FLASHMINGO工具

本文翻译自:https://www.fireeye.com/blog/threat-research/2019/04/flashmingo-open-source-automatic-analysis-tool-for-flash.html如若转载,请注明原文地址: https://www.4hou.com/tools/17451.html
点赞 5
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论