内容简介:Adobe Flash是过去十年中最受开发的软件组件之一,不过这也使其成为攻击者的目标。自2005年以来,仅Flash播放器就被分配了1000多个CVE。其中,近900个漏洞的公共漏洞评分系统(CVSS)得分为9或更高。在与攻击者博弈了这么长时间后,Adobe终于决定在2020年弃用Flash。这一举动并不令人意外,因为所有主流浏览器都已经放弃了对Flash的支持。不过,目前存在一种误解:既然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之间的关系。
软件结构
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行)。
然后,实现一个自定义运行方法和支持它所需的所有其他代码:
这是一个简单且有用的插件,它会详细说明了如何与FLASHMINGO进行交互。该插件有一个可通过属性“ml”(第2行)访问的日志记录功能。默认情况下,它会记录到FLASHMINGO的主记录器。如果未指定,则返回到插件目录中的日志文件。第10行到第16行显示了自定义运行方法,借助自定义_inspect_binary_data方法从SWF的嵌入数据中提取信息。请注意此二进制数据的来源:它是从一个名为“swf”的属性读取的。如前所述,它是作为参数传递给插件的SWFObject。可以对与此swf对象交互的SWF文件内容执行更复杂的分析。
总结
尽管Flash已经准备好在2020年底彻底被废除,并且大部分开发社区已经不再使用它了,但研究人员预测,在它被完全取代之前,会在一段时间的以Flash为感染媒介的攻击浪潮。而FLASHMINGO则为恶意软件分析师提供了一个灵活的框架,可以快速处理复杂的Flash攻击样本,而不会被复杂的执行环境和文件格式所困扰。
如果需要,你可以点此下载 FLASHMINGO工具 。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Cyberwar
Kathleen Hall Jamieson / Oxford University Press / 2018-10-3 / USD 16.96
The question of how Donald Trump won the 2016 election looms over his presidency. In particular, were the 78,000 voters who gave him an Electoral College victory affected by the Russian trolls and hac......一起来看看 《Cyberwar》 这本书的介绍吧!