[论文]HYDRA:用于恶意软件分类的多模态深度学习框架

HYDRA: A multimodal deep learning framework for malware
classification

摘要:

        传统的恶意软件检测机器学习方法在很大程度上依赖于人工设计的特征,这些特征是基于专家对该领域的知识,而端到端学习方法则将原始可执行文件作为输入,并尝试从中学习一组描述性特征。尽管后者在可用数据不多或数据集不平衡的问题上可能表现不佳。在本文中,我们介绍了 HYDRA,这是一个新颖的框架,通过结合各种类型的特征来发现不同模式之间的关系,从而解决恶意软件检测和分类任务。我们的方法从各种来源学习,最大限度地发挥多种特征类型的优势,以反映恶意软件可执行文件的特征。我们提出的基线系统由人工设计和端到端组件组成,将特征工程和深度学习的优势结合起来,从而有效地体现恶意软件的特征。在微软恶意软件分类挑战基准上对最先进的方法进行的广泛分析表明,所提出的解决方案取得了与文献中的梯度提升方法相当的结果,而且与深度学习方法相比收益更高。

1.引言

        近年来,网络攻击的数量和破坏程度急剧增加,网络威胁已被视为未来几年最显著的风险之一。网络战在我们日常生活中扮演的角色不容低估,我们最近看到它对重大选举的影响,以及一夜之间使企业瘫痪的情况。最臭名昭著的针对政党的网络间谍活动发生在 2015 年和 2016 年,影响到了民主党全国委员会(DNC),黑客渗透了 DNC 的计算机网络,并最终在包括来自 DNC 的约 190 0 0 封电子邮件和 80 0 0 个附件的集合中发布了私人和机密信息。此外,根据赛门铁克公司的数据(Chandrasekar et al.2017 年发生了两起重大网络攻击事件,分别是 5 月份的 Wannacry 和 7 月份的 Petya,它们勒索了全球各地的计算机系统。这两个恶意程序都利用了微软 Windows 操作系统的一个代号为 EternalBlue 的漏洞(Vulnerabilities and Exposures, 2016),从一台计算机迅速传播到同一网络中的其他计算机。

        据估计,全球恶意软件产业价值数百万甚至数十亿美元,并且每年都在持续增长。地下服务市场日益成熟,为其他犯罪分子、团伙甚至国家提供恶意软件、网络能力和产品。地下服务市场已经发展成为一个强大的生态系统,可以利用日益互联的世界中的每一个机会和弱点。例如,今年恶意软件开发者的目标是通过窃取用户的计算能力或直接获取其加密货币钱包的凭证来挖掘加密货币(Cleary et al.)
        为了跟上恶意软件的发展并减少网络攻击的影响,有必要提高计算机系统的网络防御能力。其中一个重要的防御要素就是端点保护。这些防御措施包括适当更新补丁,以及使用基于主机的防火墙来抵御恶意软件。具体来说,反恶意软件解决方案是防止、检测和删除恶意软件的最后一道防线。恶意软件分类方法可分为两类:(1)基于静态分析的检测;(2)基于动态分析的检测。一方面,静态分析是在不执行程序的情况下检查程序代码。相反,动态分析会监控程序在系统中的行为。然后,根据从静态和动态分析中提取的信息,专家手动定义一套规则,以检测当前和即将到来的威胁。

        几十年前,恶意软件威胁的数量相对较少,简单的手工设计规则往往就足以检测到威胁。但最近,恶意软件流的大量增长使得反恶意软件解决方案无法仅仅依赖昂贵的手工设计规则。因此,机器学习因其对从未见过的恶意软件的泛化能力,已成为检测和分类恶意软件的一种极具吸引力的无签名方法。传统的机器学习方法主要依靠特征工程来提取一组判别特征,提供恶意软件的特征向量表示,分类器利用这些特征向量来确定可执行文件的恶意程度。然而,这些解决方案几乎完全依赖于领域专家提取准确表示恶意软件的特征的能力。不过,随着机器学习领域的最新进展,用端到端学习算法取代传统机器学习管道系统已成为一种趋势。端到端学习算法将原始可执行文件作为输入,并尝试直接识别其是否是恶意软件,或其所属的恶意软件家族。尽管端到端学习具有几乎无需预处理、无需人工设计知识等优点,但在可用数据不多或数据集不平衡的情况下,这些系统的表现可能会很糟糕。

        为了缓解端到端学习的局限性,我们在本文中介绍了 HYDRA,这是一种新颖的恶意软件分类框架,它使用来自多个来源的信息来反映恶意软件可执行文件的各种特征。据我们所知,这项研究是多模态深度学习在恶意软件分类中的首次应用。多模态学习管道结合了手工设计和端到端组件,以构建一个强大的分类器。这是通过模块化架构实现的,该架构可根据系统的不同输入类型分解为一个或多个子网络。每个子网络都可以独立训练,以解决相同的任务,然后进行组合,也可以联合训练。每个组件学习到的特征会逐渐融合到一个共享表征层中,该表征层由从多种特定模式路径进入该层的连接单元合并而成。为了避免过度拟合,在训练过程中,我们会随机放弃一种或多种模态信息提供的信息。这就防止了子网络对特定特征类型的共同适应。我们在微软恶意软件分类基准上对多模态学习算法的性能进行了评估。此外,我们还与文献中最先进的方法进行了比较,包括梯度提升和深度学习方法。

        本文接下来的内容安排如下。第 2 节详细介绍了机器学习领域为解决恶意软件检测和分类问题而开展的研究。第 3 节介绍恶意软件分类问题,特别是对恶意 Windows 可执行文件进行分类的任务。第 4 节详细介绍了基线框架中使用的不同类型的特征或模式。第 5 节介绍了多模态神经网络的架构,第 6 节介绍了实验情况。最后,第 7 节对我们的研究进行了总结,并就当前的研究趋势提出了未来展望。

2.相关工作

        解决恶意软件检测和分类问题的机器学习方法可分为两类:(1)静态方法(Ahmadi 等人,2016 年;Yuxin 和 Siyi,2017 年)和(2)动态方法(Bidoki 等人,2017 年;Ghiasi 等人,2015 年;Salehi 等人,2017 年)。

        静态方法无需执行恶意软件即可提取特征。动态方法需要执行程序。

         机器学习方法能够通过检测从以往数据中提取的模式识别未见过的恶意软件,因此在检测和分类恶意软件方面很有吸引力。机器学习工作流程包括收集可用数据、清理/准备数据、构建模型、验证和部署到生产中传统机器学习方法中的数据准备过程包括预处理可执行文件、特征提取、选择和缩减。然后,利用剩余特征来训练模型,以解决手头的问题,或者检测恶意软件,或者将恶意软件归类为恶意软件家族。因此,传统的机器学习方法主要依赖于特征工程,从计算机程序中提取判别特征,这些特征提供了一个抽象的视图,分类器利用这个视图对输入做出决策。相反,端到端学习方法联合执行特征提取和分类,用一个完全可训练的系统取代上述特征工程过程。Souri 和 Hosseini,2018;Ucci 等人,2019)对应用于恶意软件检测和分类问题的机器学习方法进行了最新综述。

        下文按输入特征类型介绍了文献中最相关的静态方法。

        最早的机器学习分类器基于 n-gram 分析。n-gram 是文本中 n 个项目的连续序列。在我们的领域中,这些项目可以是字节值(Jain 和 Meena,2011 年;Moskovitch 等人,2008 年),也可以是汇编语言指令(Santos 等人,2013 年;Shabtai 等人,2012 年),具体取决于信息来源。因此,研究人员提出了各种方法来学习类似 n-gram 的签名,而无需在训练过程中枚举所有 n-gram。Gibert 等人(2017 年)和 McLaughlin 等人(2017 年)分别提出了一种浅层卷积神经网络架构,从操作码序列中提取类似 n-gram 的签名,对 Windows 和 Android 恶意软件进行分类。Raff 等人(2018 年)和 Kr ˇcál 等人(2018 年)设计了端到端系统,通过堆叠一个或多个卷积层,从可执行文件的十六进制表示中学习特征,从而直接从原始字节输入中学习。

        恶意软件作者通常通过使用加密或打包方法来隐藏恶意代码,以防止恶意软件被逆向工程和检测。长期以来,熵分析一直被用来检测加密和打包代码段的存在,因为这些代码段往往比本地代码具有更高的熵。例如,Lyda 和 Hamrock(2007 年)仔细检查了由纯文本文件、本地文件、压缩文件和加密可执行文件组成的文件库,发现文件的平均熵分别为 4.347、5.09、6.80 和 7.17。然而,恶意软件开发者或多或少都会采用一些复杂的技术来绕过简单的熵过滤器。因此,研究人员开始研究可执行文件的结构熵(Sorokin,2011 年)。也就是说,可执行文件被分割成固定长度的非重叠块,我们测量每个块的熵。因此,每个文件都是一个熵时间序列。Wojnowicz 等人(2016 年)开发了一种方法,用于量化文件结构熵变化使其可疑的程度。此外,Gibert 等人(2018b)提出了一种基于卷积神经网络的系统,用于将恶意软件归类为家族。

        可执行文件的文件格式是有趣特征的来源。特别是,可移植可执行文件(PE)包含相关动态链接库、程序部分及其各自大小等信息。更具体地说,应用程序编程接口(API)函数和系统调用的调用提供了操作系统提供的服务和资源信息,这些信息可用于程序行为建模(Aafer 等人,2013;Sami 等人,2010)。

        此外,将有关 API 函数调用的信息与其他类型的特征相结合,以建立更强大的分类器也很常见(Ahmadi 等人,2016;Hassen 等人,2017;Zhang 等人,2016)。

        一种有趣的方法是将函数调用表示为有向图,即函数调用图(CFG),其中顶点表示计算机程序所理解的函数,边表示函数调用。例如,Kinable 和 Kostakis(2011 年)提出根据函数调用图之间的结构相似性对恶意软件进行聚类,使用的是基于密度的带噪声应用空间聚类(DBSCAN)算法。Hassen 和 Chan(2017)提出了一种用于恶意软件分类的线性时间函数调用图向量表示法,并展示了如何成功地将图特征与其他非图特征相结合。

        表示可执行文件的一种原始方法是将其字节码重组为灰度图像(Nataraj et al.从这种表示法中,可以提取描述图像纹理的特征,如 GIST(Nataraj 等人,2011 年)、Haralick(Ahmadi 等人,2016 年)、局部二进制模式(Ahmadi 等人,2016 年)和 PCA(Narayanan 等人,2016 年)特征,分类器可利用这些特征对恶意软件进行分类。此外,Gibert 等人(2018c)和 Khan 等人(2018)评估了卷积神经网络架构的使用情况,以检测数据中是否存在可用于将恶意软件归类为家族的特定特征和模式。

        然而,仅使用一种特征还不足以在真实环境中正确检测或分类恶意软件,因为恶意软件作者采用的混淆技术可能会隐藏机器学习模型使用的一种或多种特征。因此,人们正在努力设计能够处理多类特征的算法。根据特征组合的位置,目前的方法可分为两类。一方面,早期或数据级融合方法涉及将多个数据源整合为单一特征向量,作为机器学习算法的输入。例如,Ahmadi 等人(2016 年)提出了一种分类系统,该系统将多种特征类型(熵统计、图像表示、操作码频率、寄存器、符号和 Windows 应用程序编程接口)融合为单一特征向量,用于训练提升树。与此相反,后期或决策级融合方法是将多个分类器的决策进行汇总的方法,而每个分类器都是在不同的模式下训练出来的。为了说明这一点,Hassen 等人(2017 年)提出了一种由单个恶意软件分类器组成的集合,用卷积神经网络处理以图像表示的二进制内容,用前馈神经网络输入操作码 ngram 特征,对恶意软件进行精确分类。据我们所知,目前还没有文献中的方法成功尝试过深度或中间融合策略,即针对手头的任务,在一定深度上将所有模态融合为单一的共享表征或逐步融合。

3.恶意软件分类任务

        本文讨论的是恶意软件分类任务,即根据恶意软件的特征和行为对其进行分组或分类。对不同类型的恶意软件进行区分和分类是一项重要任务,因为它提供的信息能让我们更好地了解恶意软件是如何感染计算机或设备的、它们的威胁程度以及如何防范它们。请注意,恶意软件检测和分类任务之间的唯一区别在于所实施系统的输出。例如,恶意软件检测系统会接收一个可执行文件 x 作为输入,并输出一个范围在 0 到 1 之间的单一值 y = f(x),表示该可执行文件的恶意程度。接近 0 的值表示可执行文件是良性的,接近 1 的值表示可执行文件是恶意的。相反,分类系统会输出特定可执行文件属于每个输出类别或系列的概率。此外,从计算机程序中提取的特征既可用于检测其是否为恶意程序,也可用于对其进行分类。

        与图像分类、语音识别等其他应用相比,恶意软件检测和分类任务在研究界并没有得到同等的关注。由于法律限制,良性二进制文件通常受版权法保护,因此研究人员无法共享研究中使用的二进制文件。另一方面,恶意二进制文件可通过 VirusShare 和 VXHeaven 等网站共享。然而,与其他领域不同的是,其他领域的数据可能很快就会被标记,而且在很多情况下,非专业人员也可以快速标记,而确定一个文件是否是恶意的或其相应的族或类则是一个耗时的过程,即使对安全专家来说也是如此。此外,VirusTotal 等服务明确限制与公众共享供应商反恶意软件标签。因此,出于可重复性的目的,我们在微软提供的 2015 年大数据创新者收集挑战赛(Ronen 等人,2018 年)数据上评估了多模态深度学习系统,这是一个高质量的公共标签基准。数据集的完整描述将在下一节提供。

3.1.微软恶意软件分类挑战

        微软为 2015 年的 "大数据创新者收集挑战赛"(Ronen 等人,2018 年)提供了近半 TB 的恶意软件。如今,该数据集托管在 Kaggle ( https://www.kaggle.com/c/malware-classification/ .) 上,可供公众访问。该数据集已成为评估恶意软件分类任务的机器学习技术的标准基准。样本集代表了 9 个不同的恶意软件家族,每个样本由一个哈希值及其类别标识,类别是一个整数,代表该恶意软件所属的 9 个恶意软件家族之一:(1) Ramnit、(2) Lollipop、(3) Kelihos_ver3、(4) Vundo、(5) Simda、(6) Tracur、(7) Kelihos_ver1、(8) Obfuscator.acy 和 (9) Gatak。表 1 显示了训练数据的类别分布。我们可以观察到,某些族的实例数量明显多于其他族的实例数量。说到二进制可执行文件,有两类代表。一方面,可执行文件可以表示为二进制文件对应字节的十六进制值序列。例如,一些方法(Gibert 等人,2018b;Nataraj 等人,2011;Wojnowicz 等人,2016)就是基于从这种十六进制表示中提取的特征。另一方面,二进制文件的内容可以还原/翻译成汇编语言。这一过程被称为反汇编。常见的反汇编器有 IDA Pro 或 Radare2。Gibert 等人,2017 年;Kinable 和 Kostakis,2011 年;Sami 等人,2010 年)的方法说明了这一点。

3.1.1.十六进制表示法

        十六进制视图将机器码表示为十六进制数字序列。见图 1。每一行由内存中机器码的起始地址和连续 16 个字节值的累积组成。

        从这种表示法中,我们可以提取字节 n-gram,计算可执行文件的结构熵将其二进制内容表示为灰度图像等。

3.1.2.汇编语言源代码

        汇编语言源代码包含可执行文件的符号机器代码以及元数据信息,如基本函数调用、内存分配和变量信息。一个汇编文件的快照如图 2 所示。

汇编语言由三类语句组成:

1.指令或汇编语言语句。指令定义要执行的操作。每行输入一条指令。其格式如下

指令由两部分组成:(1) 要执行的指令名称;(2) 命令的操作数或参数。

2.汇编指令或伪操作。汇编指令是汇编语法的命令部分,但与处理器指令集无关。

3.宏。宏是由一个名称指定的指令序列,可以在程序的任何地方使用。

4.模式说明

        本文提出了一种多模态深度学习系统,用于将恶意软件归类为涉及多种数据模态的恶意软件家族:

        1.Windows API 函数调用列表。

        2.代表恶意软件汇编语言源代码的汇编语言指令序列

        3.代表恶意软件二进制内容的十六进制值序列

        之所以选择这些特征类型,是因为它们具有各自的优势和局限性。下文将对上述模式进行详细描述和深入分析,并定义多模式架构的各个组成部分。

4.1.Windows API 函数调用

        应用程序编程接口(API)及其函数调用的使用频率被认为是非常重要的特征。文献表明,可以通过分析 API 调用来模拟程序行为。API 功能和系统调用与操作系统提供的服务有关。它们支持各种关键操作,如网络、安全、系统服务、文件管理等。此外,它们还包括利用内存、文件系统、网络或图形等系统资源的各种功能。如果不使用 API 函数或系统调用,软件就没有其他方法访问操作系统管理的系统资源,因此,API 函数调用可以提供表示软件行为的关键信息。在这项工作中,每个 API 函数和系统调用都被视为一个特征。特征范围为 [0,1];如果程序没有调用 API 函数或系统调用,则为 0(或 False);否则为 1(或 True)。另外,也可以计算程序执行过程中每个 API 函数被调用的次数。

        由于许多恶意软件程序都是打包的,只留下导入表的存根(什么东西),甚至可能根本没有导入表,因此我们的方法将在可疑恶意软件的主体中(通过反汇编可执行文件)搜索动态链接库或函数的名称。

        Windows 操作系统 API 函数的数量极其庞大。如果考虑到所有这些函数,那么对于恶意软件分类来说,几乎没有任何有意义的信息。因此,分析仅限于 API 函数的子集。我们将 Windows API 函数的完整列表缩减为在训练数据中至少被调用三次的函数。其余函数不在分析之列。在使用最多的函数中,我们发现了以下函数:用于躲避动态分析器的 Sleep 函数、用于分配内存以将未打包代码存储在新分配块中并执行跳转以从那里运行代码的 VirtualAlloc 函数,以及用于解析程序所调用 API 的地址的 LoadLibraryA 和 GetProcAddress 函数。

        调用的函数总数为 10670 个,几乎等于训练样本的数量,这可能会导致过度拟合。高维度会增加特征提取和分类的成本和复杂度。在实践中,当训练样本数量有限时,如果维度增加到一定程度以上,算法可能会表现不佳。这个问题被称为 "维度诅咒"。因此,特征选择被应用于只选择特征的子集。特征选择是选择与预测建模问题更相关的特征子集的过程。

        这有助于从数据中去除不需要的、不相关的和冗余的属性,这些属性对预测模型的准确性没有帮助。然后,利用特征子集来学习预测建模问题。图 3 是所提方法的概览。在我们的具体实现中,分类算法是一个前馈网络,其超参数是通过网格搜索选择的。选择最佳特征子集的实验将在第 6.1 节中详细介绍。下文将详细介绍我们的前馈网络结构。

4.1.1.基于 API 的前馈神经网络

        图 4 描述了该架构的概况。 根据我们选择的特征选择技术,网络的输入是一个向量,其中包含 K 个最相关的基于 API 的特征。网络的输出由函数给出。其中,f^{(1)}指网络的第一层或隐藏层,f^{(2)}指输出层。f ^{( i )}的数学表达式为 f ^{( i )} = α(W x + b) ,其中 α 表示激活函数,x 表示层的输入,W 和 b 分别表示权值和偏置。其中,隐层的激活函数是 ELU 函数(Clevert 等人,2015 年),而输出层没有激活函数。相反,它通过计算 softmax 函数来生成归一化输出概率。

4.2.助记符分析

        在自然语言处理中,对给定文本样本进行分类的最常见方法是 n-gram 分析。n-gram 分析计算文件的 n-gram 词分布,以此来解决预测建模问题。此外,n-gram 也是用于恶意软件检测或分类的最常用特征之一(Santos 等人,2013 年;Shabtai 等人,2012 年)。最简单的方法是只捕获作为基数的指令。在遇到指令 mov eax, [esp+10h] 时,我们只需将其简化为 mov .

        具体来说,从恶意软件汇编语言源代码中包含的助记符序列中提取助记符 n-gram。举一个具体的例子,图 2 中从 00,401,090 到 004010B0 字节的助记符序列将包含以下 2-grams:

        基于 N-gram 的方法构建了恶意软件的特征向量表示,向量中的每个元素表示特定 N-gram 在指令序列中出现的次数。

        基于 n-gram 方法的主要缺点是,唯一 n-gram 的数量取决于 n,即每个 n-gram 所包含的记忆词的数量。由于独特 n-gram 的数量巨大,因此很难在原始数据上运行机器学习算法。一种解决方案是执行特征选择,即识别最佳特征并过滤掉不太重要特征的过程。Gibert 等人提出了另一种解决方案(Gibert et al., 2017),他们使用卷积神经网络提出了一种 n-gram 计数的替代方法,可以自动从一连串的记忆词中学习最具辨别力的特征,而无需应用任何特征选择技术,从而使问题具有可操作性。

4.2.1.卷积神经网络替代 N-语法

        基于卷积神经网络的方法的主要优势在于,它无需像基于 n-gram 的方法那样,在训练过程中手动枚举大量 n-gram。相反,可以通过卷积层学习类似 n-gram 的签名。这种方法最显著的意义在于消除了由特征提取、特征选择和缩减以及分类组成的传统流水线,因为这两个过程在训练过程中会一起优化。

        由于基于卷积神经网络方法的优势,负责处理这种数据模式的组件是以 Gibert 等人(2017 年)提出的架构为基准,并稍作修改而构建的。该网络的不同之处在于(i) 内核大小;(ii) 每个大小的过滤器数量;(iii) 输入层的大小。此外,我们的网络还对输入层进行了滤除。整体架构如图 5 所示,由以下各层组成:

        输入层。网络的输入是以一系列助记符表示的可执行文件。由于网络不能只接收字符串形式的文本,因此每个助记符都会被转换为独热向量。为了形成独热向量,我们将每个助记符与 1 到 I 范围内的数字 ID 相联系,其中 I 是词汇量大小。单热向量是一个大小为 I 的零向量,在助记符 ID 的位置上有一个 "1"。

        嵌入层。独热向量无法编码类似操作或相似含义的语义信息。为了解决这个问题,每个助记词都被表示为大小为 M 的低维实值向量(词嵌入),其中每个值都捕捉了助记词含义的一个维度。

        卷积层。这一层负责对记忆序列进行各种滤波器的卷积,并从中提取类似 n-gram 的特征。每个滤波器的大小为 h x k,其中 h ∈ {3, 4, 5},k 等于记忆符号嵌入的大小。因此,过滤器适用于包含 3 至 5 个记忆符号的序列采用的激活函数是指数线性单元(ELU)(Clevert et al.采用不同大小的滤波器可以让网络检测到指令序列中具有大小变化的突出子序列

        全局最大池化层。全局最大池化用于提取卷积层传递的每个特征图激活的最大激活值。

        Softmax layer。它将前几层学习到的特征进行线性组合,并应用 Softmax 函数输出恶意软件家族的归一化概率分布。

        Xavier’s初始化(Glorot 和 Bengio,2010 年)被用于初始化网络的权重,但嵌入层除外,嵌入层的初始值被初始化为均匀分布的随机值,范围从 -1 到 1。此外,输入层、卷积层和输出层都采用了丢弃(Hinton 等人,2012 年),丢弃神经元的百分比分别为 0.1、0.1 和 0.5。关于实验的完整描述,请参见第 6.2 节。

4.3.字节分析

        与助记符分析类似,文献中也有人尝试从原始字节序列构建端到端恶意软件检测系统(Kr ˇcál et al.,2018;Raff et al.,2018)。这些方法将恶意软件二进制内容十六进制表示的原始字节序列作为输入,并尝试识别可执行文件是否是恶意的。这些方法必须应对的主要挑战有

        - 任何字节的含义都取决于上下文,可以编码任何类型的信息,如二进制代码、人类可读文本、图像等。此外,同一条指令可以根据参数的不同使用不同的字节码进行编码,例如 cmp 指令,其二进制码可以以 0x3C、0x3D、0x3A、0x3B、0x80、0x81、0x38 或 0x39 开头,具体取决于给出的参数。

        - 便携式可执行文件的内容具有不同程度的空间相关性。函数中相邻的指令具有空间相关性。然而,函数调用和跳转指令会在代码指令和函数中产生不连续性。随后,这些不连续性通过二进制内容得以保持。

        - 通过将可执行文件视为字节序列,我们要处理的是数百万个时间步的序列,就时间序列的大小而言,这已成为最具挑战性的序列分类问题之一。

4.3.1.最新方法

        Raff 等人(2018 年)提出了一种浅层卷积神经网络架构,包括一个嵌入层,然后是一个大小为 500 的滤波器与跨距为 500 的滤波器相结合的门控卷积层,再加上一个全局最大池化层和一个软最大层。从现在起,这种结构将被称为 MalConv。参见图 6。

        Kr ˇcál等人(2018)提出了一种更深层次的架构,其中包括一个嵌入层,然后是四个卷积层,在第二和第三个卷积层之间进行分步和最大池化。之后,应用全局平均池化生成字节序列中的平均特征。最后,通过各种全连接层和最后的softmax层对特征进行非线性组合。从现在起,这一架构将被称为 DeepConv。参见图 7。

        对原始字节值进行卷积意味着某些字节值在本质上比其他字节值更接近,而这是错误的,因为特定字节的含义与上下文有关。因此,这两种方法都将字节表示为大小为 K 的分布式向量表示,其中每个元素都有助于定义每个字节,目的是捕捉可执行文件中字节的上下文、语义相似性及其与其他字节的关系。

        多模态网络的第三个组件负责从字节序列表示中提取特征,它是根据 Kr ˇcál 等人(2018 年)(DeepConv)提出的网络架构构建的,因为在我们的实验中,它比 MalConv ( Raff 等人,2018 年 ) 取得了更好的性能。参见第 6.3 节 。

5.多模态深度学习框架

        图 8 显示了我们用于恶意软件分类的多模态深度学习框架 HYDRA 的架构。该架构旨在作为未来实现恶意软件检测系统的基线。它只包含了作者认为对于手头的任务而言任何机器学习系统都必不可少的特征类型。不过,新的特征类型可以根据需要添加到架构中。它由 4 个主要部分组成:(1) 基于应用程序接口的组件;(2) 基于助记符的组件;(3) 基于字节的组件;(4) 特征融合和分类组件。前三个组件互不关联。每个组件从恶意软件的不同抽象表示(来自不同的数据模式)中提取特征。最后一个组件负责将每个组件提取的特征融合到一个共享表征中,并进行分类预测。该架构由人工设计组件和端到端组件组成。一方面,人工设计组件学习输入 API 特征向量之间的复杂关系。相反,端到端组件则从以助记符序列和字节序列表示的恶意软件中学习特征。由于端到端学习需要大量标注数据才能正常工作,因此将人工设计组件和端到端组件结合起来有助于减轻系统的局限性,更具体地说,有助于减轻基于字节的组件的局限性(见第 6.3 节),并通过结合两种方法的优势建立更强大的分类器。

5.1.建筑结构

        本小节将介绍多模态神经网络的架构,特别是输入层、三个特征组件和融合组件。

        输入层。数据集由一组成对的 x^{i}, y^{i}组成,其中 x^{i}是可执行文件,y^{i}是其所属的类别标签或族。每个可执行文件 x^{i}表示为 n 个元组,其中 n 等于不同数据模式的数量。在我们的例子中,n = 3,因为每个可执行文件都表示为一个 API 函数调用列表x_{A}^{i} 、一个助记符序列x_{M}^{i} 和一个字节序列 x_{B}^{i}

        基于 API 的组件。x_{A}^{i}Z^{K} 成为训练集中第 i 个可执行文件的 API 特征向量。每个向量由 K 个特征值组成,其中每个特征值表示是否调用了特定的 API 函数。例如,如果x_{A}^{i}(j) 等于 1,则表示第 i 个可执行文件调用了 API 函数 j。

        基于 API 的组件将 API 特征向量作为输入,并将特征非线性地组合成大小为 250 的低维特征向量 A,其中A^{i} =h(x_{A}^{i} )= \sigma (W_{A} x _{A}^{i} +b_{A}) ,W_{A} 和 b_{A}表示全连接层的权重和偏置。

        基于助记符的组件。让x_{M}^{i}表示从第 i 个可执行文件的汇编语言源代码中提取的助记符序列。如第 4.2.1 节所述,每个助记符都被映射为大小为 4 的实数向量。基于助记符的组件会输出一个大小等于 300 的特征向量 M,该向量由 3-gram、4-gram 和 5-gram 类似签名的连接组成。

        基于字节的组件。x_{B}^{i}指从第 i 个可执行文件二进制内容的十六进制表示中提取的字节序列。该组件输出的特征向量 B 包含恶意软件二进制内容的低维表示,大小为 128(见第 4.3.1 节)。

        中间融合与分类。在训练过程中,学习到的恶意软件表征 A、M 和 B 会在多个融合层之间反复合并,然后组合成一个共享的多模态表征。这一过程被称为中间融合。首先,向量 A 和 B 被融合为大小为 150 的向量 C。之后,向量 C 和 M 被合并为一个大小为 200 的一维向量,称为 P。这个联合多模态表示 P 之后将用于把恶意可执行文件归入相应的系列,如下所示:

        其中,p 是大小为 C 的向量(C = 9),W c 和 b c 是层的权重和偏置。Softmax函数输出可执行文件属于训练集中任何恶意软件家族的概率。向量 C 和 P 的大小是在配置网络时定义的。我们还尝试了各种隐藏单元的数量,并选择了效果较好的单元。此外,将所有特征都融合到同一层会导致更差的结果,即使这些特征在统计上并不重要。

        为了保持一致性,所有层都使用Xavier’s权重初始化(Glorot 和 Bengio,2010 年)。贯穿所有卷积层和全连接层的非线性函数是 ELU(Clevert 等人,2015 年)和 SELU(Klambauer 等人,2017 年)激活函数。

        有两个方面对我们多模态设置的成功至关重要:(1) 每种模态的pretraining和迁移学习,以及 (2) 多模态dropout.。

5.2.预训练

        在我们的实验中,我们发现将所有模态信息作为输入是次优的,因为这会导致过度拟合属于一种模态的特征子集,而对属于其他模态的特征拟合不足。为了解决这个问题,我们分别对每个组件进行了预训练,并针对每个子任务优化了它们的超参数。因此,我们将训练数据随机分成两组,80% 作为训练集,20% 作为验证集并训练了三个模型来对恶意软件进行分类,其中一个模型将一种模式作为输入。之后,多模态神经网络中每个组件的权重都用每个网络在每个任务中学到的最佳预训练权重进行初始化这样做的目的是将每个模型学到的知识转移到多模态神经网络中,以节省训练时间并帮助网络更快地收敛。

5.3.正则化机制

        在现实世界中,虽然给出了恶意和良性可执行文件供分析,但并不能保证能从给出的可执行文件中提取所有特征。唯一始终可用的模式就是字节序列。相反,由于加密和压缩,可能无法正确检索 API 函数调用和汇编语言指令序列。例如,训练集中有一些样本没有被正确反汇编或无法反汇编,因此其对应的汇编语言源文件几乎不包含指令或根本不包含指令(Hu 等人,2016 年)。因此,我们使用模态丢弃来解决这一问题,它使网络对一个或多个信息通道的丢失不那么敏感。模态丢失会在训练过程中随机丢失一种或多种数据模态。此外,我们还在全连接层和卷积层中应用了模态剔除,剔除率分别为 0.5 和 0.1。

6.评估

        我们在一台配备英特尔酷睿 i7-7700k CPU、4xGeforce GTX 1080Ti GPU 和 64 Gb 内存的机器上部署了所提出的框架。GPU 对于加速多模态神经网络算法至关重要。该框架的模块和机器学习算法是用 Python 和 Tensorflow 实现的(Abadi et al.)由于内存资源的限制,我们将minibatch的规模减少到 8 个。

        我们使用 10 倍交叉验证来估算我们方法的泛化性能。我们采用了两种基准分类器,即Random Guess classifier和Zero Rule classifier。随机猜测分类器的准确率计算如下:

        其中, p_{i}是说 "它属于第 i 类 "的概率,n_{i} 是第 i 类的样本数。因此,随机猜测分类器的准确率为 0.1755。另一方面,零规则分类器只是输出数据集中的多数类。具体而言,零规则分类器的准确率为 2942 / 10 , 868 = 0.2707.

        我们没有只用准确率来评估模型,而是根据宏观的 F1 分数来选择最佳模型。这是因为在存在大量类不平衡的数据集中,准确率可能是一个误导性的衡量标准。例如,一个模型可以在所有预测中正确预测多数类的值,并获得很高的分类准确率,但在少数类和关键类上却会犯错。宏 F1 分数指标通过计算每个标签的指标并找出它们的非加权平均值来惩罚这种行为。

6.1.基于应用程序接口的组件性能

        下面将深入分析根据汇编语言源代码中 Windows API 函数调用的使用情况对恶意软件进行分类的各种基准算法的性能。表 2-4 提供了不同 K 值下各种算法的 10 倍交叉验证准确率,其中 K 是指˜ χ2 或 ANOVA-F 特征选择算法选择的 K 个顶级特征。实验中使用的基线算法包括逻辑回归、线性或 rbf 核支持向量机、随机森林以及梯度提升算法。表 2 显示了使用大小为 K 的 0 和 1 的特征向量作为输入的算法性能,其中 K 指的是˜ χ2 分数最高的 K 个特征,每个值代表程序是否调用了特定的 API 函数。表 3 显示了输入大小为 K 的特征向量(根据 ˜ χ2 得分排在前 K 位的特征)时各算法的性能,其中每个值表示特定 API 函数被调用的次数。表 4 显示了基线算法在输入 K 大小的特征向量时的性能,其中 K 指的是根据 ANOVA-F 指标得出的前 K 个特征,每个值表示特定 API 函数被调用的次数。

        根据表 2-4 的经验观察,"˜ χ2 特征选择度量 "比 "ANOVA-F度量 "能选择更好的特征,因为平均而言,在"˜ χ2 度量 "检索的特征子集上训练的所有基线算法都获得了更高的准确率。此外,我们还可以看到,逻辑回归算法的准确率最高,该算法的输入是根据 ˜ χ2 特征选择指标排序的前 4500 个特征。因此,这个子集被用来训练多模态网络中负责根据 Windows API 函数调用对恶意软件进行分类的组件。

        基于应用程序接口的组件的最佳结构只包括一个由 250 个单元组成的隐藏层这一配置是通过对网络超参数进行网格搜索后选定的(表 5)。所有模型的输入层和隐藏层都使用 0.1 和 0.5 的 dropout 进行训练。我们可以发现,增加隐藏层的单元数或层数并不能显著提高模型的性能,特别是,只有 250 个单元的网络获得了最高的准确率和最宏观的 F1 分数。

        图 9 显示了 10 倍交叉验证程序的混淆矩阵。错误的主要来源是对属于 Obfuscator.acy 系列的样本的错误分类。特别是,在 1228 个 Obfuscator.acy 样本中,有 82 个样本被错误分类。

6.2.基于助记符的组件性能

        在训练之前,词汇量(不同助记符的数量)被减少到只包括那些至少在三个不同的可执行文件中出现过的助记符。那些在训练集中出现次数少于三次的助记符被转换为 UNK 标记。

        用从无监督学习模型中学习到的向量来初始化单词向量是文献中常见的做法(Collobert et al.因此,我们使用使用 CBOW 或 Skip-Gram 架构(Mikolov 等人,2013 年)训练的维度为 4 的向量来初始化记忆向量。然而,在这两种情况下,我们都没有观察到任何相关的改进。图 12 和图 11 显示了这些架构的混淆矩阵。

        在接下来的实验中,我们通过计算卷积神经网络的 10 倍交叉验证准确率和宏 F1 分数,测试了助记符嵌入的三种不同初始化设置。这三种设置如下:

- CNN-rand。基准模型,所有记忆向量都是随机初始化的,然后在训练过程中进行修改。见图 10。

- CNN-skipgram.基线模型,其助记符向量使用使用 Skip-gram 模型生成的预训练嵌入进行初始化。见图 11。

- CNN-cbow.使用 CBOW 模型生成的预训练嵌入向量初始化记忆向量的基准模型。见图 12。

        根据实验结果,交叉验证准确率和宏观 F1 分数最高的模型是权重从均匀分布中随机初始化的模型(见表 6)。因此,在构建多模态网络时,我们决定不使用预训练向量来初始化嵌入。尽管如此,所有模型都取得了不相上下的结果。

6.3.基于字节的组件性能

        在本节中,我们将比较 MalConv 和 DeepConv 模型在微软恶意软件分类挑战赛数据集(Ronen 等人,2018 年)上的表现。图 13 和 14 显示了 10 倍交叉验证报告的混淆矩阵,MalConv 和 DeepConv 模型的宏观 F1 分数分别为 0.8902 和 0.9071(见表 7)。因此,鉴于 DeepConv 架构的卓越性能,我们的多模态系统中基于字节的部分将由 DeepConv 架构组成。

        这些方法的性能略逊于基于汇编语言源代码的方法。这部分是由于输入序列的高维性和训练集的减少,使得基于字节的方法受到过拟合的严重影响。不过,恶意软件二进制内容的十六进制表示对于任何分类器来说都是非常重要的信息来源,因为它是从可执行文件中获取的最小表示类型。根据恶意软件作者采用的混淆技术,汇编语言源代码可能无法正确检索。在这种情况下,唯一可用的信息就是恶意软件二进制内容的十六进制表示法。因此,从这种信息模式中提取的信息对于正确分类这些恶意可执行文件至关重要。

6.4.多模态深度学习模型的有效性

        在本节中,我们将 HYDRA 与在每种模式下独立训练的模型进行比较,以证明 HYDRA 的有效性。图 15 显示了为估算 HYDRA 性能而进行的 10 倍交叉验证程序的联合报告精确度。所有模型的结果如表 8 所示。我们可以看到,HYDRA 的总体准确率为 0.9975,宏观 F1 分数为 0.9954,优于特定模式模型的准确率。每模态预训练和多模态剔除对 HYDRA 的成功至关重要。一方面,每模态预训练可以避免过度拟合属于一种模态的特征子集,而对属于其他模态的特征拟合不足。另一方面,多模态剔除可以防止子网络共同适应特定的特征类型或数据模态。

6.4.1.与最先进技术的比较

        为了进一步评估我们的多模态方法的性能,我们将 HYDRA 与文献中最先进的方法进行了比较,这些方法在 Kaggle 微软恶意软件分类挑战赛提供的数据集上对其模型进行了评估。结果如表 9 所示。

        根据作为训练算法输入的特征类型,文献中的方法可分为不同的组别。具体分组如下

        - 基于 IMG 的方法。这组方法将代表恶意软件二进制内容的灰度图像(Gibert 等人,2018c)或使用任何特征提取器技术从中提取的一组特征作为输入(Ahmadi 等人,2016;Narayanan 等人,2016)。

        - 基于熵的方法(Ahmadi 等人,2016;Gibert 等人,2018b)分析恶意软件的熵和结构熵表示。

        - 基于操作码的方法分为两类:(1)提取 n-gram 特征的传统方法(Ahmadi 等人,2016 年)和(2)深度学习方法(Gibert 等人,2017 年;2019 年;McLaughlin 等人,2017 年),后者将代表恶意软件汇编语言源代码的操作码序列作为输入。

        - 基于字节的方法与基于 opcode 的方法有类似的分法。一方面,有从字节序列中提取 n-gram 特征的方法(Ahmadi 等人,2016 年)。另一方面,深度学习方法在训练过程中联合学习提取特征并对恶意软件进行分类(Kr ˇcál 等人,2018;Raff 等人,2018)。此外,它还包括使用自动编码器学习恶意软件编码表示的方法(Gibert 等人,2018a;Yousefi-Azar 等人,2017)。

        - 基于 API 的方法(Ahmadi 等人,2016 年)通过挖掘分类器用于预测的 API 调用来生成特征集。

        - 多模态学习指的是利用多种模态的信息来学习检测恶意软件的方法(Ahmadi等人,2016;Mays等人,2017;Zhang等人,2016)。

        此外,需要注意的是,最常用的分类算法要么是神经网络,要么是梯度提升。一方面,神经网络,尤其是卷积神经网络,因其处理原始数据的优势和自我学习特征的能力,最近吸引了学术界的关注。另一方面,梯度提升技术,尤其是 XGBoost 库,直到最近还能在依赖特征工程和特定领域知识的任务中提供无与伦比的性能。在不久的将来,这种趋势可能会改变,因为研究界可以获得更多的训练数据,而且多模态学习领域也在不断发展和完善。如表 9 所示,HYDRA 在输入模式较少的情况下取得了与(Zhang 等人,2016 年)和(Ahmadi 等人,2016 年)相当的结果,并且比(Mays 等人,2017 年)以及文献中其余基于深度学习和特征工程的方法取得了更高的检测率和更宏观的 F1 分数。因此,我们证明了端到端学习系统可以成功地与手工设计的特征相辅相成,从而在恶意软件分类任务中取得最先进的结果,而特定领域的知识一直是构建系统的必由之路。

7.结论

        在本文中,我们介绍了一种新颖的恶意软件分类框架,该框架在模块化架构中结合了手工设计的特征和端到端组件。据我们所知,这项研究是首次将多模态深度学习应用于恶意软件分类,特别是可移植可执行文件。多模态方法从各种信息源中学习并结合恶意软件的特征,与那些只将单一数据模态作为输入的分类器相比,分类性能更高。通过分析恶意软件二进制内容的十六进制表示及其反汇编对应内容,可提取三种模式:(1) 调用的 API 函数列表;(2) 表示恶意软件汇编语言源代码的助记符序列;(3) 表示恶意软件二进制内容的字节序列。这一架构可以通过更多的特征类型来表达可执行文件的特征,并可作为未来改进的基线模型。此外,通过将手工创建的特征与端到端组件相融合,我们能够将这两种方法的优势结合起来,既能描述特定领域的特征,又能利用深度学习的能力自动提取一组描述性特征,而无需依赖领域知识。

        通过报告的结果,可以评估我们的方法与最先进技术相比的有效性。我们的多模态深度学习架构的检测准确率和宏观 f1 分数可与基于特征工程的梯度提升方法相媲美,而我们的方法只依赖于可移植可执行文件中的三种基本特征,其准确率远远高于文献中的深度学习方法。

7.1.概念漂移问题

        机器学习技术最初是为静态环境设计的,在静态环境中,训练集和测试集被假定是从相同的统计分布中生成的。在静态环境中,模型将近似地利用给定输入数据 x 的映射函数 f ( x ) 来预测输出值 y ,即 y = f(x ) ,并假定从数据中学到的映射在未来仍然有效,且输入和输出之间的关系不会随时间而改变。然而,这一假设在恶意软件领域并不成立。包括恶意软件在内的软件应用程序会随着时间的推移而变化,变化的原因包括增加特性和功能、修复漏洞、移植到新平台等。此外,同一软件的版本预计会与以前的版本相似,只有少数例外。因此,随着时间的推移,以前版本和未来版本之间的相似性会慢慢降低。这就是所谓的概念漂移问题。概念漂移是指数据中的基本关系发生变化的问题。随着恶意软件的演变和新变种的出现,这将导致恶意软件检测器和分类器的预测质量随时间推移而下降(Pendlebury et al.)

此外,恶意软件不断推陈出新,以避免被反恶意软件引擎检测到,并能够感染新的主机。因此,恶意软件作者有充分的动机利用各种混淆技术故意制作广告范例(Huang 等人,2011 年)(You 和 Yim,2010 年)。因此,在建立可持续的恶意软件检测和分类模型的过程中,必须考虑到上述问题(Jordaney et al.)

7.2.未来工作

        未来的研究方向之一可能是采用新的架构,从以字节序列表示的二进制内容中对恶意软件进行检测和分类,因为与文献中的其他方法相比,当前方法的性能低于平均水平。第二个研究方向是研究将更多数据模式或特征类型纳入当前的多模式架构,并分析其对系统性能的影响。第三个研究方向是研究可解释人工智能(XAI)技术,以解释用于恶意软件检测和分类的机器学习模型的结果,从而帮助安全研究人员进行恶意软件分析。

这属于多模态吗?

这个方法可以被归类为多模态学习,因为它使用了来自不同来源的信息来反映恶意软件可执行文件的各种特征。尽管输入都是文本,但每个文本表示不同的模态。例如,API函数调用序列表示了可执行文件的行为特征,助记符序列表示了汇编代码的结构特征,字节序列表示了二进制内容的特征。这些不同的文本表示形成了多模态输入,通过多模态神经网络进行处理和融合,以实现恶意软件的分类。因此,尽管输入都是文本,但由于表示不同的模态,这个方法仍然可以被视为多模态学习的一种应用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值