基于AI的恶意软件分析技术(3)

一篇综述:用于检测和分类恶意软件的机器学习的兴起:研究的发展、趋势和挑战

阅读The rise of machine learning for detection and classification of malware: Research developments, trends and challenges翻译&笔记

原文:https://www.sciencedirect.com/science/article/pii/S1084804519303868

本文的主要贡献是:(1)全面描述了传统机器学习工作流中用于恶意软件检测和分类的方法和功能;(2)探讨了传统机器学习的挑战和局限性;(3)分析了该领域的最新趋势和发展,特别强调了深度学习方法。此外,(4)介绍了最新技术的研究问题和尚未解决的挑战;(5)讨论了新的研究方向。 该调查有助于研究人员了解恶意软件检测领域以及科学界为解决该问题而探索的新发展和研究方向。

关键字:恶意软件检测、特征工程、AI、多模态学习

本文目录:
论文第2节提供了对文献中被调查的研究结果的总结。
论文第3节描述了恶意软件分析技术的背景知识。
第4节提供了对恶意软件检测的静态和动态方法的系统描述,并概述了对手头任务的最具鉴别性的特征。
第5节详细介绍了基于深度学习的恶意软件分析方法。
第6节介绍了多模态方法和混合方法。
在第7节中,讨论了新的挑战和恶意软件检测问题的全面分析。
最后,第8节总结了本综述的总结语

1、介绍

简要回顾一下恶意软件的历史提醒我们,自从计算机诞生以来,恶意软件威胁就一直伴随着我们。最早记录的病毒出现在20世纪70年代。它被称为爬行虫,是一个实验性的自我复制程序,它将自身复制到远程系统,并显示信息:“我是爬行虫,如果可以,抓住我。”。后来,在80年代初,出现了Elk Cloner,一种针对Apply II计算机的引导区病毒。从这些简单的开始,一个巨大的行业诞生了,从那时起,打击恶意软件的斗争从未停止过。从表面上看,这场斗争是一场永无止境的周期性军备竞赛:随着安全分析师和研究人员提高防御能力,恶意软件开发人员不断创新,寻找新的感染载体,并增强他们的混淆技术。由于技术进步带来的机遇,恶意软件威胁继续纵向(即数量和数量)和横向(即类型和功能)扩展。互联网、社交网络、智能手机、物联网设备等使智能复杂恶意软件的创建成为可能。近年来,勒索软件和加密挖掘恶意软件成为最多产的类型,Cerber和Locky在全球各地持有计算机索要赎金,而Cryptoloot则在受害者不知情的情况下利用受害者的计算能力挖掘加密软件。尽管针对计算机系统的恶意软件仍然在生态系统中占主导地位,但移动和物联网恶意软件仍在上升。根据赛门铁克(Symantec)(Corporation,2018)的数据,2017年移动恶意软件变种增加了54%,而物联网攻击增加了600%,Mirai僵尸网络及其变种成为历史上最强大的DDoS攻击的载体(Kolias等人,2017)。

为了跟上恶意软件的发展,安全分析师和研究人员需要不断提高他们的网络防御能力。一个基本要素是端点保护。Endpoint protection提供一套安全程序,包括但不限于防火墙、URL过滤、电子邮件保护、反垃圾邮件和沙箱。具体来说,反恶意软件提供了最后一层防御。AV引擎负责防止、检测和删除安装在终端设备上的恶意软件。传统上,AV解决方案依赖于基于签名和基于启发式的方法。签名是唯一标识特定恶意软件的算法或哈希,而启发式是专家在分析恶意软件行为后确定的一组规则。然而,这两种方法都要求在定义这些规则和启发式之前对恶意软件进行分析。恶意软件分析的目标是提供有关给定软件的特征、用途和行为的信息。有两种类型的分析:(1)静态分析和(2)动态分析。一方面,静态分析涉及在不执行的情况下检查可执行文件。另一方面,动态分析涉及通过运行可执行文件来检查其行为。这两种类型的分析都有各自的优势和局限性,它们相互补充。静态分析速度更快,但如果使用代码混淆技术成功隐藏恶意软件,它可能会逃避检测。相反,代码混淆技术和多态恶意软件在监视和分析程序的运行时执行时几乎无法逃避动态分析。然而,传统的恶意软件检测和分析无法跟上新的攻击和变种。组织面临着每天应对数百万次袭击的艰巨挑战。此外,组织也面临网络安全技能和人才短缺的问题(关于第44届总统网络安全等,2010年)。已识别的问题为机器学习提供了一个独特的机会,因为机器学习能够处理大量数据,从而显著影响和改变网络安全格局(Fraley et al.,2017)。

在过去十年中,机器学习在包括网络安全在内的许多领域引发了根本性的转变。网络安全专家普遍认为,人工智能驱动的反恶意软件工具将有助于检测现代恶意软件攻击并改进扫描引擎。这一信念的证据是过去几年发表的大量关于利用机器学习的恶意软件检测技术的研究。据谷歌学者1称,2018年发表的研究论文数量为7720篇,比2015年增加95%,比2010年增加476%。研究数量的增加是多种因素共同作用的结果,包括但不限于公开标记的恶意软件源的增加、价格下降的同时计算能力的提高,以及机器学习领域的发展。机器学习领域在计算机视觉和语音识别等广泛任务上取得了突破和成功。根据分析的类型,传统的机器学习方法可以分为两大类:静态方法和动态方法。它们之间的主要区别在于,静态方法从恶意软件的静态分析中提取特征,而动态方法从动态分析中提取特征。第三组被定义为混合方法,可以考虑。混合方法结合了静态和动态分析的各个方面。此外,神经网络在从各个领域的原始输入中学习特征方面表现得更出色。机器学习用于网络安全的最新趋势正在复制神经网络在恶意软件领域的成功。例如,Raff等人(2018a)和Krˇcál等人(2018)提议建立一个卷积神经网络来确定PE可执行文件本身的原始字节的恶意。神经网络方法背后的动机是建立不依赖专家领域知识来定义鉴别特征的检测系统。

鉴于人工智能工具在检测恶意软件方面的影响越来越大,考虑到最近的研究,并探索传统静态和动态方法的细节,需要进行新的文献综述。有一些研究讨论了恶意软件检测方法,但我们认为这是不完整的。(读者请参阅第2节)。为了补充所调查的论文并减少文献中的一些缺陷,本文系统地回顾了传统的和最先进的机器学习技术用于恶意软件检测和分类,特别强调了从可移植可执行文件中提取的信息(特征)的类型。本文提供了恶意软件分析的基本背景,并简要描述了剖析恶意软件的过程和工具。关于更完整的描述,请参考Ligh等人(2010);西科尔斯基和霍宁(2012);蒙纳帕(2018)。本综述旨在帮助可能有兴趣将机器学习应用于恶意软件分析过程自动化的安全分析师对当前使用的方法和新趋势有一个大致的了解。本文对三种主要方法进行了分类:(1)静态方法。此外,本文还详细介绍了基于神经网络的恶意软件检测和分类方法,并根据输入在输入神经网络之前的预处理方式进行了分类,还简要介绍了多模态学习方法。本文最后讨论了该领域研究人员面临的研究问题和挑战,包括评估方法性能的开放和公共基准的可用性、恶意软件领域的概念漂移问题、增量学习、对抗性学习以及类不平衡问题。

本次调查的组织方式如下。第2节提供了在文献中被调查的研究的总结。第3节描述了恶意软件分析的背景。第4节提供了对恶意软件检测的静态和动态方法的系统描述,并概述了对手头任务的最具鉴别性的特征。第5节详细介绍了基于神经的方法。第6节介绍了多模态方法和混合方法。在第7节中,讨论了新的挑战和恶意软件检测问题的全面分析。最后,第8节总结了本次调查的总结语。

2、相关工作

本节总结了文献中被调查的研究,并讨论了它的一些缺陷。表1总结了文献中调查的主要贡献。接下来,我们将对每个调查进行简要描述,以及我们在工作中试图减轻它们的缺陷。

(1)Shabtai等人(2009)通过报告文献中使用的一些特征类型和特征选择技术,为使用机器学习算法的恶意软件检测提供了分类。他们主要关注特征选择技术(增益比、Fisher评分、文档频率和分层特征选择)和分类算法(人工神经网络、贝叶斯网络、朴素贝叶斯、K-最近邻等)。此外,他们还回顾了集成算法如何用于组合一组分类器。
(2)Bazrafshan等人(2013)确定了检测恶意软件的三种主要方法:(1)基于签名的方法,(2)基于启发式的方法和基于行为的方法。此外,他们还调查了恶意软件检测的一些特征,并讨论了恶意软件用来逃避检测的隐藏技术。尽管如此,上述研究并未考虑动态或混合方法。
(3)Souri等人(2018年)将恶意软件检测方法分为两类:(1)基于特征的方法和(2)基于行为的方法。然而,该调查既没有回顾最新的深度学习方法,也没有对用于恶意软件检测和分类的数据挖掘技术中使用的特征类型进行分类。
(4)Ucci等人(2019)根据以下内容对方法进行分类:(i)他们试图解决的目标任务是什么,(ii)从可移植可执行文件(PE)中提取的特征类型是什么,以及(iii)他们使用的机器学习算法是什么。尽管调查提供了特征分类法的完整描述,但并未概述新的研究趋势,尤其是深度学习和多模式方法。
(5)Ye等人(2017)介绍了用于恶意软件检测的传统机器学习方法,包括特征提取、特征选择和分类步骤。然而,诸如文件的熵或结构熵之类的重要特性,以及诸如网络活动、操作码和API跟踪之类的一些动态特性都缺失了。此外,深度学习方法或多模式恶意软件检测方法在过去几年中一直是热门话题,但并未涵盖。
(6)Razak等人(2016年)对恶意软件进行了文献计量分析。它按国家、机构或与恶意软件相关的作者分析出版物。尽管如此,本文并未对恶意软件检测器所使用的功能进行描述,也未考虑该领域的最新技术。

鉴于上述被调查论文的局限性,本研究对传统的和最先进的机器学习技术进行恶意软件检测和分类进行了系统的回顾。本文将传统方法分为(1)静态方法和(2)动态方法两类,根据从可执行文件中提取的信息类型或特征类型对方法进行分类。它通过探索结合不同模式或类型的信息的各种方法,扩展了被调查的论文,并分析了最先进的深度学习方法,这些方法根据输入到系统中的原始数据的性质进行分组。本文最后讨论了研究所面临的问题和挑战,包括但不限于概念漂移、对抗性学习和阶级不平衡问题。

在这里插入图片描述
表1被调查论文的贡献一览表。✓表示调查试图涵盖的信息,但它不一定提供对主题的详细描述

3.背景

本节概述了分析针对Windows操作系统的恶意软件的分析类型、技术和工具,该操作系统是迄今为止世界上使用最多的操作系统。首先,我们描述了便携式可执行文件的格式。然后,我们提供了一个对恶意软件分析的基本方法的描述,并给出了一个用于检查恶意软件的最常用工具的列表。最后,我们介绍恶意软件的分类和简要概述它的演变。

3.1.便携式可执行文件格式

便携式可执行文件(PE)格式是一种用于可执行文件、对象代码、单位代码、FON字体文件和其他文件的文件格式。PE32格式代表32位的便携式可执行文件,而PE32+代表64位格式的便携式可执行文件。

便携式可执行文件封装了Windows操作系统管理可执行代码所需的信息。这包括用于链接的动态库引用、API导出和导入表、资源管理数据和构成威胁的本地存储数据。PE文件由许多标题和部分组成,这些部分告诉动态链接器如何将文件映射到内存中。见图1。PE头包含有关可执行文件的信息,如节数、“PE可选头”的大小、文件的特征等。2它还包含导入地址表(IAT),这是应用程序在调用不同模块中的函数时使用的一个查找表。此外,便携式可执行文件具有包含可执行文件的代码和数据的各种部分,包括但不限于以下内容:

  • The. data section:本节用于声明在运行时不发生更改的初始化数据或常量。
  • The. bss section: 本节用于声明变量,并包含未初始化的数据
  • The. text section: 本节保留了该程序的实际代码。
  • The. rdata section:本节包含了该程序的所有资源。
  • rdata部分:本节保存调试目录,存储在文件中的各种类型调试信息的类型、大小和位置
  • idata部分:本节包含有关程序从dll导入的函数和数据的信息。
  • edata部分:本节包含PE文件为其他程序导出的函数和数据的列表
  • Reloc部分:本节包含一个基本的重新定位表。基本重定位是对指令或初始化变量值的调整,如果加载器不能加载链接器假设的文件,则需要该值。

在这里插入图片描述
图1。便携式可执行文件格式。

关于PE文件格式的更多信息可以在微软提供的文档中找到。

3.2.恶意软件分类法

恶意软件,也被称为恶意软件,是任何专门设计用来破坏、破坏或获得未经授权访问计算机系统或网络的软件。根据目的和扩散系统,恶意软件可以分为不同的,而不是相互排斥的类别。

  • 恶意广告软件恶意软件设计为自动生成在线广告。这种类型的恶意软件通过在用户界面或屏幕上显示广告,为其开发者创造了收入。
  • 秘密的计算机软件,设计用来绕过系统的安全机制,安装在计算机上允许攻击者访问的。
  • 肤蝇的幼虫创建用来自动执行特定操作的软件,如DDoS攻击或分发其他恶意软件。机器人是僵尸网络的一部分,僵尸网络是一个由相互连接的设备组成的网络,它使用命令和控制(C&C)软件进行控制。
  • 下载程序。一个下载程序的目的是下载和安装额外的恶意程序。
  • 启动器。启动器是一种计算机程序,被设计用来秘密启动其他恶意程序。
  • 勒索软件。恶意软件,通过加密文件或锁定系统来限制用户访问计算机系统的赎金。
  • 根套件。恶意软件旨在隐藏其他恶意程序的存在的恶意软件
  • 间谍软件。未经许可从受害者的计算机上监视和收集敏感信息的计算机软件。例如,包括键记录器、密码雕刻器和嗅探器。
  • 特洛伊木马。木马是一种恶意软件,它伪装成合法的软件,欺骗用户在他们的系统上下载和安装恶意软件。
  • 病毒。可以从其他设备传播到其他设备的恶意软件。
  • 蠕虫。一种利用操作系统的漏洞进行传播的病毒。蠕虫和病毒之间的主要区别是,蠕虫具有独立地自我复制和传播的能力,而病毒则依赖于人类的活动。
3.3.恶意软件分析

分析恶意软件以了解它是如何工作的,确定其功能、来源和潜在影响的过程被称为恶意软件分析。随着数以百万计的新恶意程序的出现,以及以前检测到的程序的突变版本,安全分析师遇到的恶意软件总数在过去几年中一直在增长。4因此,恶意软件分析对任何响应安全事件的业务和基础设施都至关重要。
恶意软件分析有两种基本方法:(1)静态分析和(2)动态分析。一方面,静态分析涉及到检查恶意软件而不运行它。另一方面,动态分析涉及到运行恶意软件。第3.3.1节和第3.3.2节提供了对这两种方法的深入描述。

3.3.1.静态分析

静态分析包括检查可执行文件的代码或结构,而不执行它。这种分析可以确认一个文件是否具有恶意性,提供关于其功能的信息,还可以用于生成一组简单的签名。例如,用于唯一识别恶意程序的最常见的方法是哈希。也就是说,一个哈希程序产生一个唯一的哈希,一种识别程序的指纹。两个最流行的哈希函数分别是消息摘要算法5(MD5)和安全哈希算法1(SHA-1)。最常见的静态分析方法是:

  • 查找字符或字符串的序列。搜索程序的字符串是获得有关其功能的提示的最简单的方法。从二进制文件中提取的字符串可以包含对可执行文件修改或访问的文件路径的引用、程序访问的url、域名、IP地址、攻击命令、加载的Windows动态链接库(dll)的名称、注册表项等等。实用程序工具字符串5可用于搜索ASCII或Unicode字符串,而忽略可执行文件中的上下文和格式化。
  • 收集可执行文件的链接库和函数,以及头文件中包含的文件的元数据。这些数据提供了关于许多程序通用的代码库和功能的信息,程序员链接这些程序,以便它们不需要重新实现某个功能。这些Windows函数的名称可以让我们了解可执行文件的是什么。实用程序依赖Walker6是微软的免费程序,用于列出导入和导出的PE文件函数。
  • 分析PE文件头和部分。PE文件头提供的信息不仅仅是导入。它们包含关于文件本身的元数据,例如文件的实际部分。检索此信息的一种方法是使用PEView工具。7
  • 正在搜索已打包/加密的代码。恶意软件编写者通常使用包装和加密来使他们的文件更难分析。与合法程序相比,被打包或加密的软件程序通常包含很少的字符串和更高的熵。检测打包文件的一种方法是使用PEiD程序8
  • 分解程序,即将机器码翻译成汇编语言。这个反向工程过程将可执行文件加载到一个反汇编程序中,以发现程序的功能。拆卸PE可执行文件最相关的软件程序是IDAPro、9Radare210和Ghidra。11
3.3.2.动态分析

动态分析包括执行程序和监视其在系统上的行为。这通常在静态分析达到死角时执行,无论是由于混淆还是由于耗尽了可用的静态分析技术。与静态分析不同,它跟踪由程序执行的真实操作。但是,分析必须在一个安全的环境中运行,以免使系统暴露于不必要的风险之中,因为系统既是运行分析工具的机器,也是网络上的其他机器。为此目的,将设置专用的物理机或虚拟机。

物理机器必须建立在有空气漏洞的网络上,这是一个隔离的网络,其中机器与互联网或任何其他网络断开连接,以防止恶意软件的传播。物理机器的主要缺点是这种没有互联网连接的情况,因为许多恶意程序依赖于互联网连接来进行更新、命令和控制以及其他功能。

第二种选择是设置虚拟机来执行动态分析。虚拟机模拟计算机系统并提供物理计算机的功能。虚拟机中运行的操作系统与主机操作系统保持隔离,因此,虚拟机上运行的恶意软件不会损害主机操作系统。VMware Workstation12和Oracle VM VirtualBox 13是可供分析师使用的一些虚拟机解决方案。此外,还有几种基于沙盒技术的一体化软件产品,可用于执行基本的动态分析。最著名的是布谷鸟沙盒,14,一个开源的自动恶意软件分析系统。这个模块化的沙盒提供了跟踪API调用、分析网络流量或执行内存分析的功能。此外,还有一系列实用程序可用于动态分析恶意软件,并对某些功能执行高级和特定的监控。ProcessMonitor,15或procmon,是Windows的一个工具,用于监视特定的注册表、文件系统、网络、进程和线程活动。Process Explorer 16显示有关哪些句柄和DLL进程被打开或加载到操作系统中的信息。Regshot17是一个注册表比较实用程序,允许拍摄和比较注册表的快照。NetCat18是一种网络实用工具,可用于监控网络上的数据传输。Wireshark19是一个开源嗅探器,它允许捕获数据包,拦截和记录网络流量。另一个不可或缺的软件工具是调试器。调试器用于检查另一个程序的执行情况。它们提供程序运行时的动态视图。恶意软件分析人员选择的主要调试器是OllyDbg20,这是一个免费的×86调试器,有许多插件可以扩展其功能。

使用虚拟化和沙箱进行恶意软件分析的风险在于,一些恶意软件可以在虚拟机或沙箱中运行时检测到,随后,它们的执行方式与在物理机器中执行方式不同,从而使恶意软件分析人员的工作更加困难。 此外,即使你采取了所有可能的预防措施,在分析恶意软件时也总是存在一些风险。不时地在虚拟化工具中发现漏洞,使攻击者能够利用其一些特性,如共享文件夹特性。

3.4 恶意软件进化

恶意软件的多样性、复杂性和可用性对保护网络和计算机系统免受攻击构成了巨大挑战。恶意软件不断演变,迫使安全分析师和研究人员通过改进网络防御来跟上步伐。由于使用多态和变形技术来逃避检测并隐藏其真正目的,恶意软件的扩散有所增加。多态恶意软件使用多态引擎变异代码,同时保持原始功能完好无损。打包和加密是隐藏代码的两种最常见的方法。打包器通过一层或多层压缩来隐藏程序的真实代码。然后,在运行时,解包例程恢复内存中的原始代码并执行它。加密人员对恶意软件或其部分代码进行加密和操作,使研究人员更难分析该程序。加密程序包含用于加密和解密恶意代码的存根。变质恶意软件在传播时会将其代码重写为等效代码。恶意软件作者可能使用多种转换技术,包括但不限于寄存器重命名、代码置换、代码扩展、代码收缩和垃圾代码插入。上述技术的结合导致了恶意软件数量的快速增长,使得恶意软件案件的法医调查耗时、成本高昂且更加困难。

传统的防病毒解决方案依赖于基于特征码和启发式/行为方法,存在一些问题。签名是一种独特的特征或一组特征,可以唯一地区分可执行文件,如指纹。然而,基于签名的方法无法检测未知的恶意软件变体。为了应对这些挑战,安全分析人员提出了基于行为的检测,它分析文件的特征和行为,以确定它是否确实是恶意软件,尽管扫描和分析可能需要一些时间。为了克服传统防病毒引擎之前的缺陷,并跟上新的攻击和变种,研究人员开始采用机器学习来补充他们的解决方案,因为机器学习非常适合处理大量数据。

4.传统的机器学习方法

在过去的十年里,机器学习解决方案的研究和部署有所增加,以解决恶意软件检测和分类的任务。如果没有最近的三项事态发展,机器学习方法就不可能取得成功和巩固:

  1. 第一个开发是标记恶意软件源的增加,这意味着,标记恶意软件第一次不仅可用于安全社区,而且也可用于研究社区。这些提要的大小范围从有限的高质量样本,如微软(Ronen等人,2018)为大数据创新者收集反恶意软件预测挑战提供的样本,到大量的恶意软件,如动物园(YuvalNativ,2015)或病毒s共享(2011)。
  2. 第二个发展是,计算能力迅速增长,同时也变得更便宜,更接近大多数研究人员的预算。因此,它允许研究人员加快迭代训练过程,并使更大、更复杂的模型适应不断增长的数据。
  3. 第三,在过去的几十年里,机器学习领域以越来越快的速度发展,在计算机视觉、语音识别和自然语言处理等广泛任务的准确性和可扩展性方面取得了突破性的成功。

在机器学习中,工作流是一个迭代过程,涉及收集可用数据、清理和准备数据、构建模型、验证和部署到生产中。见图2。传统机器学习方法的数据准备过程不是处理原始恶意软件,而是对可执行文件进行预处理,以提取一组提供软件抽象视图的功能。然后,这些特征被用来训练一个模型来解决手头的任务。由于恶意软件功能的多样性,不仅要检测恶意软件,而且要区分不同类型的恶意软件,以便更好地了解它们的功能。用于检测或分类恶意软件的机器学习解决方案之间的主要区别在于所实现的系统返回的输出。一方面,恶意软件检测系统输出一个值y=f(x),范围从0到1,表示可执行文件的恶意。另一方面,分类系统输出属于每个输出类或族的给定可执行文件的概率y∈ ℝN、 其中N表示不同族的数量。5.

在这里插入图片描述
图2。机器学习的工作流程。

在这里插入图片描述
图3。传统M.L.所使用的特征的分类法。方法

图3提供了这些特征的分类法。因此,特性的类型可以分为两组,如恶意软件分析方法的类型:(1)静态特性和(2)动态特性。下面分别是每个特性类型。

4.1.静态特征

静态特征是从一个程序片段中提取的,而不涉及其执行。在Windows便携式可执行文件中,静态特性基本上来自两个信息来源,即可执行文件的二进制内容,或者是在反编译和分解二进制可执行文件后获得的汇编语言源文件。另一方面,在安卓系统的应用程序中,这些功能是通过拆卸APK来提取的。要提取某些给定软件的汇编语言源代码,您可以使用您所选择的反汇编器工具。对于Windows,你可以使用IDAPro或Radare2。表2和表3总结了所审查的静态方法。上面是图3中对每种静态特性类型的描述。

4.1.1.字符串分析

字符串分析是指提取可执行文件或程序中的每个可打印的字符串。字符串是指一系列字符。搜索字符串是获取有关程序功能的线索的最简单的方法。在这些字符串中可以找到的信息可以是,例如,程序连接到的url、文件位置或由程序访问/修改的文件的文件位置或文件路径、应用程序菜单的名称等。名为“字符串”的实用程序可用于搜索ASCII和Unicode字符串,忽略上下文和格式。

虽然有研究使用字符串分析来检测恶意软件(Konopisky,2018年2;Lee等人,2011),字符串分析通常与其他静态或动态技术一起使用,以减少其缺陷。(Ye等人,2008a)。开发了一个恶意软件检测系统,基于从API执行调用和语义中反映攻击者意图和目标的字符串中提取的可解释字符串。该系统由一个为每个PE文件提取可解释字符串的解析器和一个带装包的SVM集成组成。在金山杀毒实验室收集的数据集上,对该系统的性能进行了评估。

4.1.2.字节和操作码的 N-Gram模型

为恶意软件检测和分类的最常见的特征类型是n-gram。n-gram是给定文本序列中n个项的连续序列。n-克兰斯可以从代表恶意软件的二进制内容的字节序列和从汇编语言的源代码中提取出来。通过将一个文件视为一个字节序列,通过查看每n个连续字节的唯一组合作为一个单个特征来提取字节n-克。另一方面,也可以从汇编语言的源代码中提取汇编语言指令的顺序。在这种情况下,只保留指令的助记符,即。“ADD”、“MUL”、“PUSH”等。因此,操作码或助记符n-克是指每n个连续操作码的唯一组合作为一个单独的特征。

Moskovitch et al. (2008)提出了一种基于文本分类技术的恶意软件分类方法。首先,他们从训练数据中提取出所有的n-gram,n的范围从3到6。其次,他们根据自己的文档频率(DF)评分选择了前5500个特征,然后应用Fisher评分特征选择技术。然后,利用得到的特征作为输入,他们训练了各种算法,如人工神经网络(ANN)、支持向量机(SVM)、朴素贝叶斯(NB)和决策树(DT)。

Jain and Meena (2011) 提出了一种从已知的恶意样本中提取n字节n-gram特征,n范围从1到8的方法,以协助未知可执行文件的分类。由于唯一的n-gram的数量非常大,他们使用了一种称为类文档频率的技术来减少特征空间。最后,利用朴素贝叶斯、基于实例的学习者、决策树、成人森林和随机森林等不同的分类器建立了不同的n-gram模型

Fouana等人(2017)提出了一种计算训练样本中每个字节ng信息增益的方法,并选择以最大为特征的Kng作为特征。然后,他们分别计算了来自恶意软件和良性样本的特征向量的每个属性的平均值。最后,根据未知样本的特征向量与两类平均向量的相似性,将新软件划分为两类之一。

Santos等人(2013)提出了一种基于操作码序列出现频率及其相关性的恶意软件检测技术。每个程序都被表示为一个特征的向量,其中每个特征对应于一个不同的1-g或2-g。为了减少2g特征的数量,他们应用信息增益来选择前1000个特征。他们的方法在17000个恶意程序和1000个良性程序上进行了验证,结果表明,以皮尔逊VII为核的支持向量机分类器获得了更高的精度。

Shabtai等人(2012)提出了一个基于操作码n-gram特征的恶意软件检测框架,n的范围为1到6。他们进行了一系列广泛的实验:(1)确定最好的术语表示,无论是术语频率(TF)或术语频率逆文档频率,(2)确定n-gram大小,(3)找到最优K前n克和特征选择方法,和(4)评估各种机器学习算法的性能。

Hu等人(2013)提出了MutantX-S,这是一种基于从拆卸过程后获得的恶意软件的汇编语言源码中提取的操作码N-gram特征的聚类方法。MutantXS通过应用哈希技巧和近距离线性聚类算法,提高了处理大量具有高维特征的恶意软件的可伸缩性。该算法不处理大量数据,而是只对原型进行凝聚层次聚类。

在这里插入图片描述
表2 A所回顾的基于静态的方法的算法和特征类型的并排比较。算法:支持向量机(SVM)、随机森林(RF)、推理树(IT)、递归二分区(RB)、朴素贝叶斯(NB)、人工神经网络(ANN)、决策树(DT)、基于实例的学习者(IL)、K最近邻(K-NN)、Logistic回归(LR)、梯度提升(GB)、序列最小优化(SMO)、决策树(DS)、随机树(RT)、投票感知器(VT)。

在这里插入图片描述
表3 并排比较的数据集特征的静态方法。

另外,Yusin等人(2019)使用深度信念网络(DBN)作为自动编码器来减少输入特征向量的维数。因此,在学习完成后,DBN的最后一个隐藏层输出一个作为输入传递的N-gram向量的新的表示或编码。通过使用未标记数据训练DBN,其分类精度优于k-最近邻、支持向量机和决策树算法。

尽管n-gram方法成功地检测到了恶意软件,但它们仍有一些值得一提的问题。首先,详尽地枚举所有的n个克是不切实际的,而且在计算上也是禁止的。当特征数大于样本数时,估计模型参数可能会导致维数的诅咒。因此,必须采用特征选择和缩减技术。其次,研究人员(Raffetal.,2018b)得出结论,字节n克似乎主要从可执行文件中的字符串内容,特别是从PE头的项目中学习。由于有数百万个潜在的n克(对于一个较大的n克),特征选择技术倾向于选择那些足够频繁出现的特征作为特征。这鼓励了选择主要由字符串和填充物组成的低熵特征。第三,无论学习到什么n-克,我们在对新样本进行分类时都必须获得精确的匹配。因此,任何微小的变化都会使该特性不会发生,因此,也不会影响我们的模型。因此,这种泛化的缺乏是过拟合的一个潜在来源。

4.1.3.API函数调用

应用程序编程接口(API)及其函数调用被认为是非常有区别性的特性。文献表明,API函数调用可以用于建模程序的行为。本质上,API函数和系统调用与操作系统提供的服务有关,如网络、安全、文件管理等。由于软件在没有使用API函数的情况下没有其他方式访问系统资源,因此对特定API函数的调用提供了表示恶意软件行为的关键信息。

Sami等人(2010)提出了一个基于API调用的使用情况来分类PE文件的三步框架。首先,他们分析了便携式可执行文件,并提取了导入的API调用的列表。其次,他们使用clospan算法减少了特征向量(Yanetal.,2003)。最后,利用特征子集使用随机森林学习模型。

Ye等人(2008b)提出了一种基于规则的恶意软件分类系统。该系统由三个主要组件组成:(1)PE解析器、(2)OOA(面向目标的关联)规则生成器和(3)恶意软件检测模块。PE解析器负责解析可执行文件,并提取相应的API函数的静态执行调用。然后,这些调用被用作PE文件的签名,并存储在签名数据库中。然后,应用OOA算法生成存储在规则数据库中的类关联规则。最后,将特性调用和规则传递给恶意软件检测模块,以确定一个文件是良性的还是恶意的。

Ahmadi等人(2016)使用794个API函数调用的子集的频率,从对近500K个恶意软件样本的分析中提取,构建一个多模态系统,将恶意软件划分为家族。第6节提供了对他们的研究的完整描述

4.1.4.熵

恶意软件作者经常使用各种模糊技术来隐藏可执行文件的恶意目的。最常用的两种是压缩和加密,它们用于在静态分析中隐藏恶意段。因此,能够检测可执行文件中是否存在加密或压缩的代码段是信息安全行业非常感兴趣的问题。为此,人们采用了熵分析,因为带有经过压缩或加密的代码段的文件往往比本机代码具有更高的熵。在信息论的背景下,字节序列的熵反映了它的统计变化。尤其是,零熵意味着相同的特征已经在分析的片段中重复。这种行为可以在“填充”的代码块中观察到。相反,高熵值表明区块完全由不同的值组成。例如,Lyda et al.(2007)分析了由纯文本文件、原生文件、压缩文件和加密可执行文件组成的文件库,发现可执行文件的平均熵分别为5.09、6.80和7.17。

因此,以往的研究使用了高平均熵来检测加密和压缩的存在。然而,当恶意代码以一种复杂的方式隐藏时,可能很难通过这种简单的熵统计来检测。减少文件熵的一种常见方法是填充“nop”指令。然而,具有加密、压缩、原生或填充段的文件往往具有独特和独特的熵水平。因此,研究人员(Sorokin和6月,2011)开始分析所谓的结构熵的文件,表示恶意软件的字节序列作为流的熵值,每个值表示熵的数量在一小块代码在一个特定的位置(见图4)。特别是,Sorokin和Jun(2011)比较了一个未知文件的结构熵与训练数据集之间的相似性来检测恶意软件。

Baysa等人(2013)扩展了之前的工作来检测变质恶意软件。他们应用小波分析来确定熵值有显著变化的区域。然后,他们使用莱文什坦距离比较了两个文件之间的相似性。因此,给定一个未知的软件片段,它将被归类为与训练集中最相似的样本对应的类。

Wojnowicz等人(2016)开发了一种方法,可以自动量化文件的结构熵的变化使其可疑的程度。这个分数是通过两步计算的:(1)他们计算了可执行文件的结构熵的基于小波的能谱;(2)他们在第j个分辨率水平上匹配各种逻辑回归模型,产生一组beta系数来加权每个分辨率能量的强度对文件的恶意概率。

4.1.5.恶意软件表示为灰度图像

一种有趣的恶意软件可视化方法首先被引入。
Nataraj等人(2011),他将恶意软件的二进制内容可视化为一个灰度图像。这是通过将图像中的每个字节解释为一个像素来实现的,其中的值范围从0到255(0:黑色,255:白色)。然后,生成的数组被重新组织为一个二维数组。

图5显示了来自两个恶意软件家族的样本,以灰度图像表示。您可以观察到,给定家族的样本的图像表示非常相似,但与属于不同家族的图像不同。这种视觉上的相似性是通过重用代码来创建新的二进制文件而产生的结果。因此,如果重复使用旧的样本来实现新的二进制文件,那么所得到的样本将是相似的。在大多数情况下,通过将一个可执行文件表示为灰度图像,就可以检测到属于同一家族的样本之间的微小变化。

这种视觉相似性已经被不同的作者用来检测和分类恶意软件。特别是,Nataraj等人(2011)从恶意软件的二进制内容的灰度表示中提取了GIST特征。最后,以欧氏距离为度量,利用K-最近邻算法(K-NN)将一个新的可执行文件分类为一个族或另一个族。Ahmadi等人(2016)提取了Haralick和局部二元模式特征,以便使用增强树分类器对恶意软件进行分类。

Kancherla等人(2013)提取了三组特征:(1)基于强度的特征,(2)基于小波的特征,(3)基于Gabor的特征。特别是,他们提取了平均强度、方差、模式、偏度、峰度以及强度值为0和255的像素数。关于基于小波的特征,他们使用Daubechies小波(也称为db4)进行了三级小波分解,得到了一组近似系数和三组详细系数。从这些系数中提取的特征包括均值、方差、最大值和最小值。最后,为了提取基于Gabor的特征,他们将Gabor滤波器(输入与Gabor函数的卷积)应用于图像。在15000个恶意样本和12000个良性样本的数据集上评估了支持向量机作为学习算法的性能,其中70%用于训练,30%用于测试。

软件的灰度图像表示存在一些与图像生成方式直接相关的缺点。首先,二进制文件不是二维图像,通过这样转换它们,您可以引入不必要的先验。首先,要构造一个图像,你需要选择一个图像宽度,它添加一个新的超参数来调整。请注意,选择宽度会根据二进制的大小决定图像的高度。其次,它赋予不同行像素之间不存在的空间相关性,这可能不是真的。

此外,与大多数静态特性一样,它也存在代码混淆技术的问题。特别是,加密和压缩等技术可能会完全改变二进制程序的字节结构,因此,基于这种表示方式的方法将无法正确地对其类进行分类。这可以在属于自动运行的样本的灰度表示中观察到。K和Yuner。来自MalImg数据集的一个家族(Nataraj等人,2011年),由于两者都被UPX封隔器压缩,它们几乎相等。

4.1.6.函数调用图

函数调用图(FCG)是一个有向图,其顶点表示组成软件程序的函数,而边表示函数调用。一个顶点由以下两种类型的函数之一表示:

  1. 本地函数,由程序员实现,以执行特定的任务。
  2. 外部功能:由操作操作系统提供。或系统库和外部库。

该图的一个特殊性是,只有局部函数可以调用外部函数,而不是相反。函数调用图是由拆汇编文件的静态分析生成的。为了提取WindowsPE可执行文件的FCG,可以使用IDAPro或Radare2。

Kinable等人(2011)提出了一种基于函数调用图之间结构相似性的集群恶意软件的方法。他们研究了k-medoids和基于密度的空间聚类与噪声应用(DBSCAN)算法的性能。通过图匹配的成对图相似度得分计算调用图之间的比较。该实验是在一个包含来自1050个不同恶意软件家族的194,675个样本的数据集上进行的。

Hassen和Chan(2017)提出了一种基于函数聚类提取函数调用图向量表示的方法。系统的第一个模块提取FCG,并用函数名为外部函数标记顶点。内部函数的原始名称不会被保留,相反,每个内部函数都表示为该函数实现的指令序列。然后,将生成的FCG传递给下一个模块,对本地函数进行聚类,并用它们的聚类id重新标记。最后,使用基于函数的Minhash签名的函数聚类将图形表示转换为特征向量。
在这里插入图片描述
图4。属于拉姆尼特和加塔克家族的样本的结构熵表示。

在这里插入图片描述
图5。属于拉姆尼特和棒棒糖家族的恶意软件样本的二进制内容的灰度表示。

4.1.7.控制流程图

控制流图(CFG)是一个有向图,其中节点表示基本块,边表示控制流路径。基本块是具有入口点(执行的第一指令)和退出点(执行的最后一条指令)的程序指令的线性序列。CFG是在程序执行过程中可以遍历的所有路径的表示。

Eskandari and Hashemi (2011)提出了一种通过他们的控制流图来检测变质恶意软件的方法。该系统由三个组成部分组成。首先,将拆解PE文件。其次,对程序集文件应用预处理算法,生成包含API调用的CFG。然后,将得到的稀疏图转换为一个向量表示。第三,系统使用分类算法对CFG进行标签。分别对系统的2140个和2305个良性和恶意PE可执行文件进行了性能评估,采用随机森林分类器获得了最佳结果,准确率为97%。

Faruki等人(2012)提出了一种生成API调用ngram的方法,以检测来自恶意软件的CFG中的恶意代码。在他们的工作中,可执行文件的抽象是由所进行的API调用来表示。这些API调用随后使用n-gram分析转换为特征向量,n的范围为1到4。然后,使用各种算法进行分类,包括随机森林、序列挖掘优化、J-48决策树、朴素贝叶斯和投票感知器。以API4-g特征向量为输入,随机森林分类器效果最好。

4.2.动态特性

动态特征是从运行时恶意软件的执行中提取的特征。动态分析涉及在恶意软件运行时监控恶意软件(并观察实际执行的指令序列或触发的API函数序列),或在恶意软件执行后检查系统。文件和注册表值的创建和修改。表4和表5汇总了所审查的动态方法。下面介绍了通过动态分析提取的最常见信息和特征。方法根据其输入数据分为四组。第4.2.1节介绍了从恶意软件的内存、寄存器和CPU使用情况中提取特征的方法。第4.2.2节包括从可执行文件的运行时跟踪中提取功能的方法。第4.2.3节总结了从恶意软件的网络活动中提取特征的方法。最后,第4.2.4节介绍了处理恶意软件API调用跟踪的方法。

4.2.1.内存和寄存器的使用情况

计算机程序的行为可以用运行时的内存内容的值来表示。换句话说,在计算机程序运行时存储在不同寄存器中的值可以区分良性程序和恶意程序。

Ghiasi等人(2012)提出了一种基于恶意软件行为相似性的方法。首先,他们监视恶意软件的运行时行为,并在调用API之前和之后存储每个连接的API调用的寄存器值。随后,他们追踪了寄存器值的分布和变化,并为EAX、EBX、EDX、EDI、ESI和EBP寄存器的每个值创建了一个向量。在匹配阶段,计算一个新文件和整个训练文件之间的相似性得分。然后,将新文件设置为训练集中相似性得分最高的文件的标签。

Ghiasi等人(2015)基于二进制行为以不同方式影响寄存器值的假设,提出了一种查找运行时行为相似性的方法。在他们的工作中,记录运行时行为,并连接来自公共dll的一些API调用。该系统分析内存内容和寄存器值,以建立两个文件之间的相似性得分。当一个新文件输入系统时,将计算该文件与原型之间的最高相似度得分。原型是作为整个数据集的代表性样本的小的文件集,它在成对的距离分析中提供了一个可接受的近似。然后,如果这两个文件达到了相似度的最小阈值,则它们是相似的。

在这里插入图片描述
表4:基于动态的方法的算法和输入数据的并排比较。算法:Logistic回归(LR)、决策树(DT)、随机森林(RF)、支持向量机(SVM)。

4.2.2.指令跟踪

动态指令跟踪是在程序执行过程中调用的处理器指令序列。与静态指令跟踪相反,动态跟踪是在执行时排序的,而静态跟踪是在在二进制文件中出现时排序的。动态跟踪是对程序行为的一种更健壮的度量方法,因为代码打包器和加密器可能会混淆和阻碍代码指令的静态分析。

Carlin等人(2017a)提出了一种在虚拟机上执行动态分析的方法,以从良性和恶意的可执行文件中提取程序运行时跟踪。他们通过测试两种算法来分析用于检测恶意软件的操作码序列:(1)随机森林分类器对所有基于计数的数据进行分类,(2)隐马尔可夫模型对基于操作码序列中的时间关系的数据进行分类。Carlinetal.,2017b,不是基于操作码计数建立一个分类系统,而是执行了n-克兰姆分析,其中n=1……3,以增强特征集。他们的方法使用高达32K的操作码序列来检测恶意软件,准确率为99.01%。

O‘kane等人(2016)分析了恶意运行时跟踪,以确定(1)构建软件恶意的稳健指标所需的最优操作码集,并确定(2)程序执行的最佳持续时间,以准确分类良性和恶意软件。该方法在程序执行过程中提取的操作码密度直方图上使用了一个支持向量机来检测恶意软件。

Anderson等人(2011)介绍了一种恶意软件检测方法,该方法基于分析使用从执行目标可执行文件中收集的指令跟踪构建的图。这些图表示马尔可夫链,其中的顶点是指令,而转移概率是由轨迹中包含的数据估计的。利用高斯核和谱核等图核的组合,计算了指令迹图之间的相似性矩阵。最后,将得到的相似矩阵输入给支持向量机进行分类。

Storlie等人(2014)提出了一种基于动态收集的指令跟踪分析的恶意软件检测系统。指令跟踪是从沙箱环境中执行恶意软件中收集的,这是以太恶意软件分析框架的修改版本(Dinaburgetal.,2008)。每个指令轨迹都用一个马尔可夫链结构表示,其中每个转移矩阵P都有一些行被建模为狄利克雷向量。然后,使用灵活的样条逻辑回归模型确定程序的恶意性。

4.2.3.网络流量

检测网络上的恶意流量可以唯一地提供对恶意程序行为的具体见解。一旦恶意软件感染了主机,它可能会与外部服务器建立通信,以获得对受害者执行的命令,或下载更新、其他恶意软件,或泄露用户/设备的私人和敏感信息。因此,对进出网络的网络流量、网络内的流量和主机活动的监控,为检测恶意行为提供了有用的信息。文献中的方法在几个抽象级别上提取事件,从原始数据包到网络流,详细的协议解码,如HTTP和DNS请求,到基于主机的事件和元数据,如IP地址、端口和数据包计数。
Bekerman等人(2015)提出了一种通过分析网络流量来检测恶意软件的系统。在他们的工作中,他们从分析互联网、传输和应用层上的网络流量中提取了972个行为特征。然后,使用相关特征选择算法(Hall,1999)。然后,利用得到的特征来测试三种不同的分类算法,包括朴素贝叶斯、决策树(J48)和随机森林。

Zhao等人(2015)提出了一种基于恶意DNS和流量分析的APT恶意软件感染检测系统。该系统由两个主要组件组成:(1)恶意DNS检测器和(2)恶意网络流量分析器。一方面,恶意DNS检测器提取了14个表明APT恶意软件和C&C域的特征。另一方面,网络流量分析器结合了基于签名的系统和基于异常的系统,该系统基于Snort的VRT规则集(Snort,2015)的规则的准确性检测感染,以及在协议和应用程序级别发生的异常。然后,用J48决策树对威胁进行分类。

Kheir(2013)提出了一种基于恶意软件HTTP流量中的用户代理异常来建立检测签名的系统方法。首先,他们在HTTP流量中提取用户代理报头字段。然后,他们执行了一个初始的高级集群步骤,以对可能具有类似模式的用户代理进行分组。然后,他们对每一组用户代理应用了第二个聚类步骤,以将那些可以用一组公共签名来描述的代理分组在一起。最后,采用增量K-means聚类方法对在同一集群中共享相似模式序列的用户代理进行重新分组。然后,令牌子序列算法进一步提取这些共享模式,并构建令牌序列列表,这些序列被转换为使用web代理应用于网络或应用层的签名。

Boukhtuta等人(2016年)提出了一种基于DPI和流压缩头的恶意软件检测和分类系统。他们的方法在沙箱中执行恶意软件3分钟,以产生具有代表性的恶意流量。然后,从流量中提取双向流特征,如前向和后向数据包的数量、前向数据包的最大和最小到达时间、数据包大小等。所得特征作为以下分类算法的输入:Boost J48、J48、Naïve Bayes、Boost Naïve Bayes和SVMs,检测到流量是否恶意。一旦流量被定义为恶意,隐马尔可夫模型创建了非确定性模型,该模型使用一组45个特征(包括数据包总数、中间值、平均值和到达时间的第一个四分位数等)来描述恶意软件系列。

Perdisci和WenkeLee(2015)提出了一种基于在受控环境中监控可执行文件所获得的HTTPs流量,对恶意软件进行行为聚类的方法。该方法记录了恶意软件执行的HTTP请求序列,并使用这些信息使用以下聚类算法之一对恶意软件进行聚类:粗粒度聚类、细粒度聚类和聚类合并。最后,提取每个集群的网络签名,并用于识别受感染的计算机。

4.2.4.API调用跟踪

软件程序员使用WindowsAPI访问基本资源窗口系统,包括但不限于,文件系统、设备、进程、线程和错误处理,也访问功能超出内核如Windows注册表,启动/停止/创建一个Windows服务,管理用户帐户等。因此,在文献中使用了WindowsAPI调用跟踪来捕获恶意应用程序的行为。

Galal等人(2016)提出了一种处理通过API调用连接收集的原始信息的方法,以产生一组表示恶意软件的恶意行为的行为。动作是使用一组启发式函数从API调用序列中推断出的代表性语义特征。然后,通过诸如决策树、随机森林和支持向量机等各种分类算法来评估行动的可行性。

Ding等人(2013)提出了一种基于API(应用程序编程接口)的恶意软件检测关联挖掘方法。为了提高面向目标的关联(OOA)挖掘的检测速度,他们提高了规则质量,改变了API选择的标准,去除了不能成为频繁项目的API,找到了具有最强判别能力的关联规则等。这些策略将其方法的运行速度分别提高了数据挖掘和分类时间成本的32%和15%。

Salehi等人(2017)提出了一种基于API调用的参数和返回值来检测AndroidAPKs中的恶意活动的动态方法。他们开发了一种“内部”工具,包括一个虚拟机、一个挂钩工具和一个日志记录系统,用于分析二进制文件并监控它们的行为。他们的方法基于这样一个假设,即API名称可能不能代表函数执行的操作的意图。因此,使用API调用、它们的输入参数和返回值来构建了建模恶意和良性行为的特性集。然后,通过两个阶段的过程对特征集进行简化。在第一阶段,采用Fisher评分来选择最具鉴别性的特征。在第二阶段,基于递归特征消除的支持向量机进一步降低了特征集。然后,将生成的特征集作为分类算法的输入。

Rieck等人(2011)开发了一个框架,可以使用聚类技术自动分析恶意软件的行为。该框架自动识别具有类似行为的新的恶意软件类,并将未知的恶意软件分配给这些已发现的类。恶意软件在一个沙箱中被监控,并在运行时检查API调用。二进制文件的每次执行都表示为MIST指令的顺序报告。这个信息用q-克嵌入到一个向量空间中。然后,使用原型对嵌入式报告进行集群化。采用层次聚类来确定恶意软件行为的组。对于分类,该算法确定了训练数据的最接近的原型。

Uppal等人(2014)提出了一种基于API序列特征的恶意软件识别方法。该方法监视二进制文件的执行情况,以跟踪被调用的API调用。然后,生成API调用克,并计算每个克的比值比。该比值比用于对特征进行排序,并选择n个特征形成特征向量。对于分类,提出了各种算法,包括朴素贝叶斯、随机树、决策树和支持向量机。他们的方法的评估是在从VXHeavens获得的270个二进制文件的数据集上进行的。

5.深度学习方法

上述传统的机器学习方法(见第4节)主要依赖于基于该领域的专家知识的手工设计的特性。这些解决方案提供了一个抽象的恶意软件的视图,一个机器学习分类器,如神经网络,决策树,支持向量机等,用来做出决策。特征工程和特征提取是机器学习工作流程的关键、耗时的过程。随着计算机视觉和自然语言处理领域的最新发展趋势,法学硕士学位的发展。针对恶意软件检测的解决方案已经开始向深度学习架构的方向发展。这些解决方案已经取代了上述的特征工程过程。工作流具有一个完全可训练的系统,从原始输入开始到可识别对象的最终输出。

解决恶意软件检测和分类问题的深度学习方法可以根据输入的预处理方式分为不同的组。表6和表7总结了最近的事态发展。下面提供了对不同的组和方法的详细描述。

5.1.特征向量表示

该类别对应的方法执行特征工程,提取一组特征,从而提供可执行文件的抽象表示。然后,将得到的特征向量作为输入馈入一个前馈神经网络。请注意,由第4.1节和第4.2节中提出的方法提取的特征向量也可以用于训练前馈网络。

Saxe等人(2015)引入了一种恶意软件检测系统,由三个主要部分组成:(1)特征提取组件提取4种不同类型的特征、字节/熵直方图特征、PE导入特征、字符串二维直方图特征和PE元数据特征;(2)第二部分由深度神经网络分类器组成;第三部分(3)是评分校准器,对最终分数进行校准。他们的系统在从Invencea数据库中检索到的431926个可执行文件的数据集上进行了评估,达到了95%的检出率。

Huang和Stokes(2016)提出了一种用于恶意软件检测和分类的多任务深度学习架构。他们从静态和动态分析中提取了一个组合特征集,包括端空标记、API事件加参数值和API三元图。由于输入空间的高维性,我们执行互信息来生成最能描述每个类的特征。然后,利用随机投影将得到的特征向量减少到50000个特征。最后,利用投影特征向量训练了一个深度前馈神经网络。

Dahl等人(2013)研究了一种恶意软件分类架构,该架构使用随机投影将一个高维的特征向量投影到一个低得多的维度。更具体地说,随机投影将特征向量的维数从179000个减少到4000个特征。然后,神经网络分类器学习非线性模型对恶意软件进行分类。该系统在260万个标记样本的数据集上进行了评估,结果为0.49%的错误率。

在这里插入图片描述
表6A对所回顾的深度学习方法的算法和输入数据的并排比较。算法:卷积神经网络(CNN)、残差网络(ResNet)、自动编码器(AE)、递归神经网络(RNN)、长短期记忆网络(LSTM)、网控递归单元网络(GRU)、神经网络(NN)。

在这里插入图片描述
表7深度学习方法的数据集特征。

5.2.基于IMG的表示

基于深度学习img的方法将恶意软件二进制内容的灰度图像表示已经在4.1.5节中描述。它们不再依赖手工设计的特征提取器来收集有关灰度图像的相关信息,而是将图像输入卷积神经网络体系结构,同时执行特征学习和分类

Gibert等人(2018c)提出了一种卷积神经网络体系结构,由三个卷积块、一个全连接块和输出层组成。每个卷积块由一个卷积操作、ReLU激活、最大池化和归一化组成。卷积层作为数据中存在特定特征或模式的检测滤波器,随后的全连接层结合学习到的特征并确定特定的目标输出。他们的方法在微软恶意软件分类挑战(Ronen等人,2018)上对手工制作的特征提取器进行了评估(Nataraj等人,2011;坎切拉等人,2013;Ahmadi等人,2016),结果表明,深度学习架构对以灰度图像表示的恶意软件进行分类具有优越的性能。类似地,Rezende等人(2017)提出使用带有预先训练的权重的ResNet-50架构来对从MalImg数据集获得的恶意软件图像进行分类(Nataraj等人,2011)。

5.3.API调用跟踪

第4.1.3节介绍了作为输入特征向量的方法,其中向量的每个位置都表明是否由程序调用了特定的API函数。但是,这种特性表示并没有考虑到API函数被调用的顺序。或者,您还可以收集被调用的API函数的顺序序列,并使用这些信息来构建可捕获API函数跟踪中的依赖项的分类器。

athiwaratkun等人(2017)研究了循环神经网络架构,以更好地捕获API调用跟踪中的长期依赖关系。他们尝试了长短期记忆(LSTM)和门控循环单元(GRU)作为语言模型。他们提出的方法包括两个阶段。在第一阶段中,LSTM或GRU用于构造与特定API调用跟踪相关联的特性。在第二阶段,这些特征通过单个全连接层或使用softmax的逻辑回归进行分类。此外,他们还提出了一个字符级的卷积神经网络(Zhangetal.,2015)。该网络以一个最大长度为1014个字符的序列作为输入,其中每个字符都是一个事件。小于1014个字符的序列最后用序列末标记填充。所提出的特征级网络由9层、6层卷积层和3个全连接层组成。

Kolosnjaji等人(2016)研究了利用神经网络改进新检索的恶意软件样本分类为预定义的恶意软件家族。他们分析了两种类型的神经网络层来建模系统调用序列:卷积层和循环层。他们构建了一个基于卷积层和循环层的神经网络,该神经网络结合了n-克的卷积和全序列建模。网络的输入是恶意软件的API调用序列,没有API调用,连续重复两次以上。每个API调用都使用一个热编码进行编码,以为每个API调用找到唯一的向量。网络的卷积部分由一个卷积层组成,然后用卷积层作为特征提取器进行池化。卷积部分的输出连接到循环部分,该循环部分在内核API跟踪中建模顺序依赖关系。为了从LSTM输出中提取最重要的特征,我们使用了均值池化。此外,他们还应用了辍学来防止过拟合,以及一个软max层来输出类概率。

5.4.指令跟踪

类似地,一个程序可以被建模为由处理器执行的指令序列。

这些指令序列可以从静态和动态分析中获得。一方面,可以通过分解二进制可执行文件和处理生成的分解文件来获得它们。另一方面,可在运行时监视可执行文件,并提取在系统上执行的完整指令序列。这些指令序列可用于训练端到端系统,以联合学习适当的特征并执行分类,而无需在训练过程中明确地枚举数百万个 n-grams。

Gibert等人(2017)提出了一种具有一个嵌入层、一层卷积层、一个最大池化和一个输出层的神经网络架构。卷积层可以通过学习检测指示恶意软件的操作码的子序列,从本质上学习检测类似n-克的签名。此外,根据内核的大小,卷积层允许检测非常长的类似n格的签名,如果需要显式枚举所有n格,这将是不切实际的。这是通过定义各种大小的过滤器来实现的。例如,在他们的工作中,卷积层包含64个大小为 h x k 的过滤器,每个h∈{2,3、4,5,6,7},其中k表示嵌入向量的大小。然后,在特征映射上应用最大池运算子(也称为全局最大池),取最大值作为过滤器对应的特征。这允许提取n范围从2到7的n克类签名。最后,softmax层输出在类上的概率分布。

另外,Gibert等人(2019)提出了一种分层卷积神经网络(HCNN)来处理PE可执行文件的层次结构。在他们的工作中,他们没有将恶意软件表示为一系列指令,而是以相同的功能将指令分组,以保持计算机程序的层次结构。因此,汇编语言指令被分割为函数,其中每个函数由一系列助记符表示。因此,层次卷积神经网络在记忆级和函数级捕获特征。

5.5.基于字节的表示

表示计算机程序最简单的方法是用字节序列表示。换句话说,每个字节被视为输入序列中的一个单元。这种表示方法的主要优势是,它可以用来代表恶意软件运行系统和硬件的朦胧地,因为它不是可执行文件格式的影响,是否可移植可执行(PE)文件,或一个可执行的和可链接格式(精灵)文件,等等。但是,将可执行文件表示为字节序列会带来其他领域所没有的巨大挑战。首先,将每个字节作为序列中的一个单元处理,得到的字节序列的大小可能包含数百万个时间步,这使其成为最具挑战性的序列分类问题之一。第二,任何特定字节的意义取决于它的上下文,可以编码任何类型的信息,如二进制代码、人类可读的文本、图像、声音等。第三,二进制文件表现出不同层次的空间相关性。相邻的机器指令往往在空间上是相关的,但由于跳转和函数调用,这种相关性可能并不总是存在,因为它们将程序的控制权转移到内存中的其他地址,并从那里继续执行。因此,这些不连续在二进制文件及其十六进制表示中得到维护。因此,当设计一个从字节序列检测恶意软件的模型时,必须考虑:(1)其随序列长度良好伸缩的能力,以及(2)在检查整个文件时兼顾本地和全局上下文的能力。

Raff等人(2018a)提出了一种卷积神经网络架构来捕获这种高水平的位置不变性。他们将卷积激活与完全连接层之前的全局最大池化结合起来,以允许模型产生其激活,而不管检测到的特征在字节序列中的位置如何。他们没有对原始字节值执行卷积,而是使用一个嵌入层将每个字节映射到一个固定长度的特征向量。

Krˇcal等人(2018)探索了一种更深层次的体系结构,它包括一个嵌入层,然后是四个卷积,由第二个和第三个卷积层之间的最大池化层分隔,然后是全局平均池化和四个全连接层。他们根据MalConv架构评估了他们的模型,并发现他们将MalConv在其数据集中的性能从94.6%略微提高到96.0%。此外,他们用手工制作的特征丰富了全局池化后获得的特征向量,以构建更强的分类器。

作为对给定输入包含恶意代码的可能性的分析的一部分,一个可执行文件可以被划分为代码块。然后,每个块中的信息可以被编码或编码为单个值。因此,得到的输出将是一个时间序列m={m1,m2,…,mn},其中mi是第i个块的对应编码,n是一个二进制被分割的块的数量。Gibert等人(2018b)提出了一种使用卷积神经网络将恶意软件表示为熵值流进行分类的方法。因此,他们计算了每个代码块的熵。然后,他们对熵时间序列进行单级离散小波变换,以压缩信号,降低噪声。小波变换产生了两个时间序列,近似系数和细节系数。然后,将两个时间序列输入一个卷积神经网络,该网络对两个时间序列进行特征学习,并将给定的恶意软件样本分类为相应的家族。

Gibert等人(2018a)使用去噪自动编码器(DAE)对每个块存储的信息进行编码。在他们的工作中,他们首先将一个二进制文件划分为连续的、不重叠的固定大小的块。然后,去噪自动编码器将每个字节块作为输入,并将其投影到一个单一的值中,以捕获数据中变化的主要因素。然后,所得到的时间序列被输入一个扩展的剩余网络,该网络从字节序列的编码中学习描述性模式,并分配一个标签,表明恶意软件所属的家族。

赛伦斯的专利(戴维斯etal.,2017),而不是在一个特定的信息编码成一个单一的值,他们实现了计算机方法检测恶意代码,包括三个阶段:(1)检查序列块的卷积神经网络,(2)分析至少一些块使用递归神经网络(RNN),和(3)确定输入包括恶意代码的可能性,基于至少一些使用RNN分析的块。

5.5.1.网络流量

属于这一类的方法是那些旨在对网络流量进行分类的方法。更具体地说,他们试图通过识别通过网络流动的流量的类型和数量来检测恶意跟踪。

Prasse等人(2017)提出了一个基于HTTP流量分析的检测客户端计算机上的恶意软件的框架。他们从客户端计算机发送或接收的流序列和域名特性中提取各种特性。然后,LSTM分类器以这些流序列作为输入,并学习确定这些流是否来自恶意应用程序。

AL-Hawawreh等人(2018)提出了一种基于深度学习模型的用于检测互联网工业控制系统(IICSs)入侵的异常检测技术。该系统包括一个无监督的学习阶段,其中一个深度自动编码器学习正常的网络行为,以及一个有监督的学习阶段,其中一个深度神经网络使用自动编码器的估计参数。

6.多模态方法

到目前为止,我们已经提出了一种主要依赖于一种特征或数据模式来检测和分类恶意软件的方法。然而,恶意软件检测是一个研究问题,其特征是多模式的,因为它包括多种模式的数据。多模态学习是研究如何能够同时解释这些多模态信号的领域。虽然结合不同的模式或类型的信息来提高性能似乎是一项直观上吸引人的任务,但要将不同水平的噪声和模式之间的冲突结合起来是非常具有挑战性的。考虑到多种模态的组合方式,多模态方法可以分为三组。

  • 输入水平或早期融合。早期的融合方法创建了从多种模式中单独提取的单峰特征的联合表示。组合这些单峰特征向量的最简单方法是将它们连接起来以得到融合表示。中非共和国图6。接下来,训练一个单一的模型来学习每个模态的特征之间的相关性和相互作用。模型的最终结果可以写成p=h([v1,v2,…,vm]),其中h表示单个模型,[v1,v2,…,vm]表示特征向量的串联,m表示不同的单峰特征向量的数量。
  • 决策级或晚期融合。与早期融合相比,晚期融合方法为每个模态训练一个模型,并将学习到的决策值与平均、投票、学习到的模型等融合机制进行融合。中非共和国图7。晚期融合的主要优点是它允许在不同的模式上使用不同的模型,因此更加灵活。此外,由于对每种模式的预测都是单独进行的,因此更容易处理缺失的模式。假设模型hi是模态i的决策值,最终预测为p=F(h1(v1),h2(v2),…hm(vm)),其中F表示融合策略的类型。
  • 中间融合。中间融合方法通过合并由单独的机器学习模型获得的中间特征来构建一个共享表示。然后,将这些中间特征连接起来,然后训练一个机器学习模型来捕获模式之间的相互作用。中非共和国图8。

此外,从静态和动态两种分析类型中提取的特征可以结合起来构建更鲁棒的分类器。结合静态分析和动态分析的方法被称为混合方法。

一方面,静态分析的目的是在没有实际运行的情况下发现可执行程序、应用程序或程序的恶意特性。静态分析更快,但会受到代码混淆的影响。也就是说,恶意特征可以使用不同的混淆技术(You et al., 2010)或通过多态和变形恶意软件(Moser et al., 2007)隐藏。另一方面,这种混淆技术无法进行动态分析,因为它监视和分析程序在受控环境中执行期间的运行时行为。但是动态分析有一些局限性。监视进程非常耗时,并且必须保护程序运行的环境,以免影响平台。此外,受控环境可能与实际运行时环境不同,恶意软件的行为可能不同,从而导致不准确的行为日志记录。
此外,程序的一些动作只有在满足某些条件时才会被触发,而在受控环境中可能不会被检测/激活。考虑到静态和动态恶意软件检测的优点和缺点,自然的改进和研究方向是将两者的元素结合起来的混合方案。

请注意,混合方法还包括各种数据模式,可以包括在同一类别下。混合方法和多模态方法之间的主要区别是,混合方法结合了来自静态和动态分析的特征,而多模态方法不必这样做。

表8和表9总结了恶意软件检测和分类的多模态和混合方法的主要特征。下面提供了每个一个的描述。

在这里插入图片描述
表8 并排比较了多模式和混合方法的特征和融合策略。算法:支持向量机(SVM)、朴素贝叶斯(NB(SVM)、决策树(DT)、随机森林(RF)、卷积神经网络(CNN)、神经网络(NN)、k最近邻(K-NN)、被动攻击I(PA-I)、被动攻击II(PA-II)、置信加权学习(CW)、自适应权重(AROW)的正则化、正常群(NHERD)、逻辑回归(LR)。
在这里插入图片描述
图8。中间融合策略

在这里插入图片描述
表9 对所回顾的多模态方法的数据集特征的并排比较。

Ahmadi等人(2016)提出了一个系统,该系统使用不同的恶意软件特征,根据其对应的家族对恶意软件样本进行有效分类。对于每个恶意软件样本,他们提取了一组基于内容和统计特征,以反映PE文件的结构。然后,通过使用前向逐步选择技术的变体,将这些特征分类堆叠成单个特征向量来组合这些特征。他们不是通过一个一个地向模型中添加特性来逐步增加特性集,而是考虑属于一个类别的所有特性子集。他们选择的分类算法是Gradient Boosting Tree分类器XGBoost的并行实现。此外,他们使用bagging来提高分类器的稳定性和准确性。他们的方法在微软恶意软件分类挑战数据集(Ronen等人,2018年)上进行了评估,其准确性可与竞赛获胜者媲美21,但不需要相同的计算资源。另一方面,获胜的团队依赖于大量知名的功能,包括但不限于字节n元和操作码n元,这在训练和测试阶段都需要大量的计算资源。

Kolosnjaji等人(2017)提出了一种由卷积和前馈子网络组成的神经网络架构。卷积子网从分解的恶意二进制文件序列中学习特征。相反,前馈网络将从PE头中包含的元数据和导入的函数及其DLL文件列表中提取的一组特征作为输入。然后,最终的基于神经网络的分类器将前馈和卷积的神经网络结构及其相应的特征结合成一个单一的网络。该网络在聚合了两个子网学习到的特征后,生成最终的分类输出。

Bayer等人(2009)基于系统调用、其依赖关系和网络活动构建了恶意软件的行为配置文件。这种广义表示可以作为一个聚类算法的输入,该算法可以对表现出类似行为的恶意软件样本进行分组。集群恶意软件是一个多步骤的过程。第一步是对由扩展版本的异常数组执行的可执行文件进行自动分析。第二步是提取行为特征。最后,在第三步中,表现出相似行为的样本使用基于局部敏感哈希的近似概率方法在同一集群中分组(Indyk和Motwani,1998)。

Mohaisen and Alrawi (2013)提出了一种基于行为的方法来识别属于宙斯家族的恶意软件。宙斯银行木马是一种针对Windows操作系统的恶意软件,经常被用来从被感染的受害者那里窃取金钱和凭证。为了分类,提取了65个独特且健壮的特性,包括创建、修改或删除的文件、创建、修改或删除的注册表项、目标IP地址、端口、TCP和UDP连接、请求、DNS记录等。然后,利用所得到的特征向量来评价各种m.l.的性能。SVM、LR、DT和K-NN等算法。

Dhammi和Singh(2015)提出了一种基于使用布谷鸟沙箱进行恶意软件动态分析的恶意软件检测系统。他们的方法从恶意软件执行中提取了各种特征,如文件详细信息、签名、涉及的主机、受影响的文件、注册表项、互斥关系、部分详细信息、导入和字符串。从布谷鸟身上获得的所有特征都被映射到一个属性关系文件格式(ARFF)文件中,然后,生成的ARRF文件被输入WEKA(Halletal.,2009)进行分类。

Pekta¸和Acarman(2017)提出了一种应用在线机器学习的基于运行时行为的恶意软件分类系统。该系统包括三个阶段。第一阶段包括监控沙箱环境中的文件的行为;VirMon和布谷鸟。在第二阶段,应用特征提取,构建一个基于文件系统、网络和注册表活动以及API调用N-gram的特征组成的特征向量。最后,第三阶段使用在线学习算法进行分类。

Mohaisen等人(2015)提出了AMAL,一个基于行为的自动恶意软件分析系统,提供工具来收集基于文件系统、内存、网络和注册表的使用来描述恶意软件的行为特征。然后,利用所得到的特征向量,使用支持向量机、决策树、Logistic回归和k-最近邻算法进行分类。

Islam等人(2013)提出了一种将静态和动态特征集成到单一分类系统中的方法。对于每个可执行文件,它们提取并转换为函数长度频率和可打印字符串信息的向量表示。在运行可执行文件并记录WindowsAPI调用之后,他们提取了包含API函数名和参数的API特性。然后,将所有特征向量组合为每个可执行文件的一个向量。接下来,生成的向量被用作四个基本分类器的输入:支持向量机、随机森林、决策树和基于实例的分类器。

Han等人(2019a)建立了一个基于静态和动态API调用序列的相关性和融合的恶意软件检测框架。在他们的工作中,他们通过定义许多类型的恶意行为来探索静态和动态API调用序列之间的差异和关系。经过相关和融合,建立了混合特征向量空间进行检测和分类。为了评估他们的方法的有效性,他们训练了4个分类器来检测/分类恶意软件,包括k-最近邻、决策树、随机森林和极端梯度增强。

Han等人(2019b)提出了恶意瞄准器,一个基于程序分析的恶意软件检测框架:(1)他们的基本结构,(2)他们的低级行为,和(3)他们的高级行为。这三个方面反映了结构特征;与操作系统、文件、注册表和网络交互的主要操作。所得到的特征集用于训练各种机器学习分类器:k-最近邻、决策树、随机森林和极端梯度增强。这些分类器在一个包含4250个样本的数据集上进行评估,这些数据样本来自病毒共享和Windows7Pro操作系统。结果表明,检测未知恶意软件的准确率为97.21%。

Kumar等人(2019)使用静态和动态方法的组合,在使用随机森林分类器执行的最初4秒内将恶意软件分类为不同类型。在分析完全执行之前尽早停止该过程被称为早期阶段检测。从静态分析中,他们从PE头中提取信息,如文件头、可选头和节头。他们还从节表和部分中提取信息,如部分的数量、大小、区段虚拟地址等。从动态分析中,他们根据如网络数据、系统调用、流程和注册表等关键资源提取特征。然后,利用信息增益算法来简化特征集。最后,通过训练随机森林、决策树、XGBoost、神经网络和K-NN分类器,将所得到的特征向量用于分类目的。

在这里插入图片描述
图9。类分布在微软恶意软件分类挑战数据集。

Rhode等人(2019年)收集了两种类型的特性:(1)API调用和(2)机器指标。布谷鸟沙箱用于收集API调用特性,而Psutil库用于收集机器度量。机器指标包括用户CPU使用、系统CPU使用、内存使用、交换使用、接收和传输的字节、接收和传输的数据包数、进程总数、最大进程ID和自执行开始以来以秒为单位的时间。然后,将这两个特征向量融合为一个单一的向量,使用神经网络、随机森林或支持向量机作为分类器,用于检测恶意软件。

7.研究问题和挑战

本节将介绍安全研究人员所面临的一些问题和挑战。它的结构如下:第7.1节介绍了类的不平衡问题。第7.2节回顾了恶意软件的公共基准的可用性。最后,第7.3节讨论了概念漂移的问题,并提出了各种对抗性学习技术来欺骗机器学习检测器。

7.1.类不平衡

获得良好的训练数据是任何机器学习问题中最具挑战性的方面之一。机器学习分类器只与用于训练它们的数据一样好,而可靠的标记数据对于恶意软件检测的任务尤其重要,在那里,标记一个文件的过程可能是一个非常耗时的过程。

此外,还有各种学科,包括欺诈检测、恶意软件检测、恶意软件分类、医学诊断等,通常每个类的样本数量不成比例。例如,良性样本的数量可能不与恶意样本的数量成比例,或者属于一个家族的样本数量可能远远超过来自其他家族的样本数量。这就是所谓的阶级不平衡问题(贾普科维茨和斯蒂芬,2002;郭etal.,2008)。

通过一个例子,让我们来看看图9中微软数据集的类的分布。Kelihos_ver3、棒棒糖和Ramnit家族分别有2942,2478,1541个样本。另一方面,Simda和Kelihos_ver1家族分别有42个和398个样本。
这种分布,其中一个类比另一个类大得多,可以导致一个模型来预测所有预测的大多数类的价值,并且在缺乏预测能力的情况下仍然实现较高的分类精度。

换句话说,分类器可能偏向于大多数类,而对少数类的分类率非常低。分类器可能会将所有内容预测为主要类,而最终忽略次要类。这被称为准确性悖论。在这些情况下,准确性是一种误导性的措施。选择一个较不准确但具有较大预测能力的模型可能是可取的。对于这样的问题,需要额外的度量来评估分类器,如精度1、召回率2和F1分数3。另外,受试者工作特征(ROC)曲线图形化地说明了二元分类器的鉴别能力。

精度§是真阳性数(Tp)超过真阳性的数量加上假阳性的数量(Fp)。

P = Tp/( Tp + Fp) (1)

Recall®是真阳性(Tp)的数量加上假阴性的数量(Fn)。

R = Tp/( Tp + Fn) (2)
F1评分为精度的加权平均值,定义如下:

f1=2·P*R /(P+R) (3)

最后,通过绘制真阳性率(TPR)或对假阳性率的回忆来创建ROC曲线。FPR也被称为误警概率,可以计算为(1-特异性),其中特异性等于TN/(TN+FP)。AUC越高,模型就越能预测正确的类标签。

7.2.公开和公共基准测试

恶意软件检测和分类的任务在研究领域并没有得到与其他应用程序相同的关注,在那里存在丰富的基准数据集。这些方法包括数字分类、图像标记、语音识别等。法律上的限制加剧了这种情况。尽管恶意软件二进制文件通过病毒共享和VXHeaven等网站被慷慨地共享,但良性二进制文件通常受到禁止共享的版权法的保护。然而,良性和恶意的二进制文件只能通过病毒Totul等服务批量获取以供内部使用,但禁止后续共享。此外,与其他领域不同,数据可以非常快速地标记,在许多情况下由非专家标记,确定文件是恶意的还是良性的可能是一个耗费时间的过程,即使对安全专家来说也是如此。此外,像病毒道达尔这样的服务专门限制了供应商反恶意软件标签的公开共享。

上述问题使得无法有意义地比较不同工作的准确性数字,因为不同的数据集使用不同的标记程序。目前,研究社区关于Windows便携式可执行文件的唯一标准基准是微软(Ronen等人,2018年)为大数据创新者收集反恶意软件预测挑战提供的基准。该数据集托管在Kaggle上,包含近半tb的恶意软件,其中包括来自9个家族的大约2万个恶意样本。每个示例由两个文件组成:(1)是恶意软件的二进制内容的十六进制表示,(2)是它们相应的分解文件。不幸的是,字节代码不包括标头,因此,不可能动态地分析可执行文件或重新生成拆卸过程。因此,研究人员只能使用所提供的字节代码和反汇编文件(由IDAPro反汇编器生成)。

7.3.概念漂移

在机器学习文献中,术语“概念漂移”被用来描述数据中潜在关系不断变化的问题。监督学习是学习一个函数的机器学习任务,它基于一组输入输出样本将一个输入映射到一个输出。从技术上讲,这是一个近似给定输入数据(x)的映射函数(x)来预测输出值(y),y=f(x)的问题。传统的机器学习应用,如数字分类、文本分类或语音识别,假设训练数据是从一个平稳的总体中抽样的。换句话说,他们假设从历史数据中学习的映射对未来的新数据是有效的,并且输入和输出之间的关系不会随着时间的推移而改变。但这对于恶意软件的检测和分类的问题是不正确的。

软件应用程序,包括恶意软件,自然地随着时间的推移,由于添加特性、修复错误、移植到新的环境和平台所产生的变化(Lehman,1996)。预计这些变化将相对较少地被引入。此外,该软件的连续版本预计将与以前的版本非常相似,很少有例外,比如当代码库进行了重要的重构,并且与该软件链接的编译器或库发生了变化。此外,以前版本和未来版本之间的相似性预计会随着时间的推移而缓慢下降。因此,随着恶意软件的发展和新的变异体和家族的出现,预测质量会随着时间的推移而下降(Jordaneyetal.,2017)。因此,为了建立高质量的恶意软件检测和分类模型,必须识别模型何时显示出退化的迹象,从而无法识别新的恶意软件。现有的解决方案(康氏等人,2013年;Gama等人,2014)旨在定期重新训练模型,希望模型能随着时间的推移自动适应恶意软件的变化。模型再训练的过程可以从头开始,部分和增量,增量再训练是指使用新的标记恶意软件样本和所有之前的训练样本对给定的模型进行再训练,而不忘记从先前数据集获得的知识。

7.4.对抗性学习

恶意软件被推动为了生存和操作而进化。也就是说,恶意软件必须不断发展,以避免被反恶意软件引擎检测到。因此,恶意软件编写者很有动机,通过使用广泛的混淆技术来有意地寻求逃避(You等人,2010;OKane等人,2011)。

将它放在机器学习环境中,攻击者的目标是通过诱导与良性行为高度相关的特征表示,在特征空间中伪装一块恶意软件来欺骗机器学习检测器。攻击者绕过机器学习解决方案的能力与他们对特征和目标机器学习模型的知识有关。例如,考虑一种机器学习方法,它依赖于程序调用API函数或由可执行文件动态加载的dll。攻击者可能通过打包可执行文件,只留下导入表的存根,甚至根本不留下导入表来隐藏任何可疑API函数的使用。这些对特性空间的修改可以手动执行。

对抗性机器学习(Huangetal.,2011)是一种试图通过自动制作对抗性示例来欺骗机器学习的技术。也就是说,具有小的、有意的特征扰动的样本会导致机器学习模型做出错误的预测。基于机器学习的检测器很容易受到敌对的例子的影响,而机器学习在网络安全领域的应用并不构成例外。关于过去十年中对抗性机器学习的演变的详细概述,我们可以参考Biggio和Roli(2018)。他们回顾了在各种应用程序中所做的工作,包括计算机安全及其军备竞赛概念,并提出了一个全面的威胁模型,解释系统设计中攻击者的存在。最近提出的用于恶意软件检测的分类器确实很容易被精心设计的对抗性操作所欺骗(Demetrio等人,2019年;陈等人,2017年;黄等人,2018年;Suciu等人,2018年;马奥卡等人,2019年)。Chen等人(2017)探索了基于从PE文件中提取的Windows应用程序编程接口(API)调用输入的对抗性机器学习来攻击恶意软件检测器。

Suciu等人(2018)分析了各种基于附加程序的策略,以生成敌对的示例来隐藏恶意软件,并绕过MalConv(Raff等人,2018a)模型。

此外,Demetrio等人(2019)提出了一种新的攻击算法来生成对抗性的恶意软件二进制文件,该算法只改变文件头的几十个字节。他们的算法对MalConv进行了评估。他们发现,MalConv主要从文件头的特征中学习有区别的特征,并利用他们的发现来开发和绕过该模型。相反,Maiorca等人(2019年)探索了对抗性攻击的类型,这些攻击利用pdf组件的漏洞来绕过恶意软件检测器,包括基于javascript的攻击、基于动作脚本的攻击和基于文件嵌入的攻击。

7.5.模型的可解释性

对机器学习模型的解释是一个新的、开放的挑战(白崎和山口,2017;Gilpin等人,2018)。目前使用的大多数模型都被当作一个黑盒子。这个黑盒子被赋予一个输入X,它通过一系列人类难以理解的操作产生一个输出Y。这可能会在网络安全应用程序中造成一个问题,因为分析人员希望理解它发生的原因。模型的可解释性决定了分析人员管理和评估质量和纠正给定模型的操作的容易程度。出于这个原因,网络安全分析师更喜欢更容易解释和可理解的解决方案,如基于规则和基于签名的系统,而不是基于神经的方法,因为它们更容易调整和优化,以减轻和控制假阳性和假阴性的影响。然而,在文献中并没有研究用于恶意软件检测和分类的机器学习模型的可解释性。

8. 总结

本文利用机器学习进行恶意软件检测和分类方法。综上所述,我们共回顾了67篇针对Windows平台上的恶意软件检测和分类问题的研究论文。根据输入特征、分类算法、数据集的特征和目标任务等各种基本因素,对这些论文进行了比较和分析。我们的工作有四个主要贡献。

首先,我们详细描述了传统机器学习工作流程中的方法和特征,从特征提取、选择和简化步骤到分类。传统的方法主要分为三类:基于(1)静态和基于(2)动态的方法和(3)混合方法。一方面,基于静态的方法从一个程序中提取特征,而不涉及其执行。另一方面,基于动态的方法包括那些在运行时从恶意软件的执行中提取特性的方法。最后,混合方法是那些结合静态和动态分析来提取特征的方法。

其次,通过深度学习对现有的恶意软件检测文献进行了整理,并基于网络体系结构及其输入,对这些方法进行了比较分析。深度学习方法考虑到网络输入的输入类型进行分组:执行特征工程提取表示可执行文件的特征向量的(1)方法;以可执行文件的灰度表示作为输入的(2)方法;输入API函数调用序列的(3)方法;将程序建模为指令序列的(4)方法;以字节序列表示计算机程序的(5)方法;以及目的是从网络流量中分类程序的(6)方法。

第三,它介绍了新的研究方向,并提出了依赖于不止一种类型的特征或数据模式来检测恶意软件的分类词。根据不同模态数据的融合方式,它将多模态方法分为三组:(i)早期融合方法创建单模态特征向量的联合表示;(ii)后期融合方法训练每个模态训练一个模型并融合输出决策值;(iii)中间融合方法通过合并单独模型获得的中间特征来构造一个共享表示。

第四,讨论了研究者所面临的最重要的研究问题和挑战。特别强调了概念漂移的问题和对抗性学习的挑战。此外,它还考察了科学界用来评估其方法的性能的基准的状况,并回顾了阶级不平衡的问题。

  • 7
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值