Deep Android Malware Detection (操作码)
摘要
在本文中,我们提出了一种新颖的Android恶意软件检测系统,该系统使用深度卷积神经网络(CNN)。通过对反汇编程序的原始操作码序列进行静态分析,进行恶意软件分类。恶意软件的特征是通过网络从原始操作码序列中自动学习的,因此不再需要手工设计的恶意软件特征。我们提出的系统的训练流程比现有的基于n-gram的恶意软件检测方法要简单得多,因为网络是端到端训练的,可以同时学习适当的特征并执行分类,因此在训练期间不再需要明确列举数百万个n-gram。网络设计还允许使用像长n-gram一样的特征,这是现有方法在计算上不可行的。一旦训练完成,该网络可以在GPU上高效执行,可以快速扫描大量文件。
CCS概念:
- 安全和隐私 → 恶意软件及其缓解;软件和应用程序安全;
- 计算方法 → 神经网络;
关键词:恶意软件检测、Android、深度学习
1. 引言
恶意软件检测是一个不断增长的问题,特别是在移动平台上。随着移动设备和与之相关的应用商店的普及,新应用程序的数量太大,无法手动检查每个应用程序以查找恶意行为。传统上,恶意软件检测是基于手动检查已知恶意软件程序的行为和/或反编译代码,以手工设计恶意软件签名。这个过程不容易扩展到大量应用程序,特别是考虑到基于签名的恶意软件检测的静态性质,这意味着新的恶意软件可以被设计成规避现有的签名。因此,最近有大量关于使用机器学习思想进行自动恶意软件检测的研究工作。已经提出了各种方法,基于检查动态应用程序行为[18, 21]、请求的权限[14, 16, 19]和应用程序字节码中存在的n-gram[7, 11, 10]。
然而,许多这些方法依赖于专家分析,以设计传递给用于最终分类决策的机器学习系统的区分性特征。最近,卷积神经网络已经在与自然语言处理相关的各种任务上表现出良好的性能[12, 26]。在这项工作中,我们通过将应用程序的反汇编字节码视为要分析的文本来研究卷积网络在恶意软件检测中的应用。这种方法的优点是特征可以从原始数据中自动学习,因此不再需要手工设计恶意软件签名。我们提出的恶意软件检测方法在计算上是高效的,因为训练和测试时间与恶意软件示例的数量成正比。检测网络可以在GPU上运行,这现在是许多移动设备的标配组件,意味着可以每秒扫描大量恶意软件文件。此外,我们预计随着提供更多的训练数据,恶意软件检测的准确性将提高,因为已经证明神经网络具有非常高的学习能力,因此可以受益于非常大的训练集[20]。
我们提出的恶意软件检测方法受到现有的基于n-gram的方法的启发[7, 11, 10],但与现有方法不同,在训练期间不需要穷举大量的n-gram。这是因为卷积网络可以本质上学会检测类似n-gram的签名,方法是通过学会检测表明恶意软件的操作码序列。此外,我们提出的方法允许发现非常长的n-gram类型的签名,如果需要明确列举所有n-gram将是不切实际的。由所提出的方法发现的恶意软件签名可能与手工发现的签名互补,因为自动化系统将具有不同于人类分析师的优势和偏见,因此它们可能对与传统的恶意软件签名数据库一起使用非常有价值。一旦我们的系统被训练,可以使用GPU实施高效地扫描大量文件,鉴于新的恶意软件不断出现,我们提出的方法的一个有用特点是它可以使用新的恶意软件样本进行重新训练,以适应不断变化的恶意软件环境。
2.相关工作
2.1 恶意软件检测
基于手工设计特征的学习方法已广泛应用于动态[18, 21]和静态[23, 22, 25]恶意软件检测。各种类似的静态恶意软件检测方法使用手动提取的特征,如API调用、意图、权限和命令,结合不同的分类器,如支持向量机(SVM)[5]、朴素贝叶斯和k-最近邻[19]。还提出了一些恶意软件检测方法,仅使用应用程序请求的权限派生的静态特征[14, 16]。
与使用高级手工设计特征的方法相比,基于n-grams的恶意软件检测使用低级操作码序列作为特征。n-grams特征可用于训练分类器以区分恶意软件和良性软件[10]。也许令人惊讶的是,甚至基于1-gram的特征,即每个操作码使用次数的直方图,也可以区分恶意软件和良性软件[7]。所使用的n-gram的长度[10]和分类中使用的n-gram序列数量[7]都可能影响分类器的准确性。然而,增加其中任何一个参数都可能极大地增加所需的计算资源[7],这显然是标准基于n-gram的恶意软件检测方法的一个缺点。N-grams方法还需要特征选择来减少特征向量的长度,否则在长n-grams的情况下,特征向量可能会成千上万个元素长。在这项工作中,我们提出了一种方法,允许使用非常长的n-grams特征,并允许以更高效的方式基于神经网络训练n-grams分类器。
2.2 神经网络
最近,卷积神经网络(CNN)在图像中的物体识别[20]和自然语言处理(NLP)[12]领域表现出了最先进的性能。在NLP中,称为n-grams的符号的局部模式已用作各种任务的特征[27]。最近的研究表明,如果有足够的训练数据,非常深的CNN可以在一系列文本分类任务[26]上胜过传统的NLP方法。我们假设静态恶意软件分析与NLP有很多共同之处,因为对给定程序的反汇编源代码的分析可以被理解为一种文本处理形式。因此,如CNN等技术在恶意软件检测领域有巨大的潜力。
已经提出了多种使用其他神经网络架构进行恶意软件检测的方法。其中一些方法是基于学习哪些操作系统调用或API调用序列表示恶意软件的[15, 9, 8]在动态分析期间。现有的基于神经网络的恶意软件检测方法与我们提出的方法不同,因为它们利用虚拟机来捕获动态行为特征[15, 9, 8]。这可能会成为问题,因为恶意软件通常被设计成可以检测是否在虚拟环境中运行,以规避检测。其他现有的基于神经网络的恶意软件检测方法使用手工设计的特征,这可能不是检测恶意软件的最佳方法[17]。我们将尝试通过使用基于CNN架构的新颖静态分析方法,该方法可以从原始数据中自动学习适当的特征表示,来解决现有基于神经网络的恶意软件检测方法的局限性。
在这项工作中,我们将卷积神经网络应用于恶意软件检测问题。CNN学会检测应用程序的反汇编字节码中表明恶意软件的模式。我们的方法相对于现有的恶意软件检测方法有几个优势,如基于高级手工设计特征的方法和基于n-grams检测的方法。可扩展性和性能是现有基于n-grams方法的主要缺点,因为增加n-gram的长度时,特征向量的长度会迅速增加。相反,我们的方法在训练期间消除了计数和存储数百万个n-grams的需求,并可以学习比传统用于恶意软件检测的方法更长的n-grams。提高的效率使我们的提出的方法可以在更大的数据集上使用,而传统方法的使用将变得困难。
我们的整个系统经过联合优化,可以通过向系统展示大量带标签的样本,同时执行特征提取和分类。这消除了手工设计特征的需求,因为特征在受监督的网络训练期间会自动学习,还消除了由特征提取、特征选择和分类组成的特设流程的需求,因为特征提取和分类一起进行了优化。完全端到端系统的存在也节省了当系统面临新的需要识别的恶意软件时的时间,因为可以通过简单地增加训练集的大小来轻松更新网络,这也可能提高其总体准确性。最后,我们的方法发现的特征可能与手动分析发现的特征不同,但也可能是互补的。
3. 方法
在这项工作中,我们提出了一种使用卷积网络处理Android应用程序的原始Dalvik字节码的恶意软件检测方法。恶意软件检测网络的整体结构如图2所示。在接下来的部分,我们将首先解释如何对Android应用程序进行反汇编,以获得一系列原始Dalvik字节码,然后解释卷积网络如何处理这些字节码序列。
3.1 Android应用程序的反汇编
在我们的系统中,对应用程序的预处理包括对应用程序进行反汇编并提取用于静态恶意软件分析的操作码序列,如图1所示。Android应用程序是一个apk文件,这是一个包含代码文件、AndroidManifest.xml文件和应用程序资源文件的压缩文件。代码文件是一个可以转化为smali文件的dex文件,其中每个smali文件表示一个单独的类,包含该类的方法。每个方法包含指令,而每个指令由一个操作码和多个操作数组成。我们使用baksmali [1]对每个应用程序进行反汇编,以获得包含应用程序人可读的Dalvik字节码的smali文件,然后从每个方法中提取操作码序列,丢弃操作数。预处理的结果是从应用程序的所有类中获取所有操作码序列。然后,将所有类的操作码序列连接在一起,以得到表示整个应用程序的操作码序列。(想知道这个操作码序列长什么样子)
3.2 网络架构
3.2.1 操作码嵌入层
设是一系列以独热编码向量表示的操作码指令,其中xn是序列中第n个操作码的独热向量。为了形成独热向量,我们将每个操作码与范围在1到D之间的数字关联起来。在Dalvik的情况下,当前有218个已定义的操作码,D = 218 [2]。独热向量xn是一个长度为D的全零向量,其中第n个操作码的整数映射位置有一个'1'。在反汇编和预处理期间,与操作码关联的任何操作数都被丢弃,这意味着恶意软件分类仅基于操作码序列中的模式。
将X中的操作码投影到一个嵌入空间中,X中的操作码通过将每个独热向量与权重矩阵WE相乘,其中k是嵌入空间的维数,如下所示:
=
(1)
对X中的所有操作码进行投影,程序表示为大小为n×k的矩阵P,其中每一行pi对应于操作码xi的表示。WE中的权重以及每个操作码的表示首先以随机方式进行初始化,然后在训练过程中通过反向传播与网络的其余参数一起进行更新。
将程序表示为一系列一热向量然后投影到嵌入空间的目的是,它允许网络学习每个操作码的适当表示,作为k维连续向量空间Rk中的矢量,在其中可以表示操作码之间的关系。嵌入空间可能会编码语义信息,例如,在训练期间,网络可能会发现某些操作码具有相似的含义或执行等效操作,因此应该在分类目的中以类似的方式处理。这可以通过将这些操作码投影到嵌入空间中的附近点来实现,而非常不同的操作码将被投影到远离的点。嵌入空间中使用的维数可能会影响网络执行这种语义映射的能力,因此使用更多的维数可能会在一定程度上为网络提供更大的灵活性,以学习从操作码序列到分类决策的高度非线性映射。
3.2.2 卷积层
在我们提出的网络中,我们使用一个或多个卷积层,从1到L编号,其中表示第
个卷积层。第一个卷积层接收n×k程序嵌入矩阵P作为输入,而更深的卷积层接收前一个卷积层的输出作为输入。每个卷积层具有
个滤波器,第一层中的滤波器大小为
×k,而在更深的层中为
×
。这意味着第一层中的滤波器可以潜在地检测最多
个操作码的序列。在通过卷积层的前向传播期间,
个卷积滤波器中的每一个都会生成一个大小为n×1的激活图
,可以堆叠在一起形成一个大小为n×
的矩阵
。请注意,在应用卷积滤波器之前,我们会通过
/2的零填充来确保卷积层的输出矩阵长度与其输入的长度相同。第一层滤波器与程序嵌入矩阵P的卷积可以表示如下:
其中和
分别是卷积层l的第m个卷积滤波器的权重和偏差参数,Conv表示卷积滤波器与输入的数学运算,relu(x) = max{0, x}表示使用的修正线性激活函数。在更深的层中,卷积操作类似,但我们在等式2中将输入矩阵P替换为前一个卷积层的输出矩阵
。
给定来自最终卷积层的输出矩阵,然后在程序长度维度上使用最大池化[27]如下:
(ml是最后一层卷积核的数量)以得到长度为的向量f,其中包含每个卷积滤波器在程序长度上的最大激活。通过在操作码序列的长度上使用最大池化,可以将任意长度的程序表示为一个固定长度的特征向量。此外,使用最大池化来选择每个卷积滤波器的最大激活还将焦点集中在与分类任务最相关的操作码序列部分。(因为当时n是一个apk中操作码的数量,现在是取在这n个操作码中取和恶意软件最相关的操作码)
3.2.3 分类层
最后,得到的向量f传递到多层感知器(MLP),其中包括一个全连接的隐藏层和一个全连接的输出层。MLP的目的是输出当前示例为恶意软件的概率。使用具有隐藏层的MLP允许检测并用于分类的卷积层提取的特征之间的高阶关系[6]。我们可以将隐藏层表示如下:
其中Wh和bh是全连接隐藏层的参数,使用relu线性激活函数。最后,MLP的输出z传递给softmax分类器函数,该函数给出程序X是恶意软件的概率,表示如下:
其中wi和bi表示类i ∈ 的分类器的参数,标签y表示当前样本是恶意软件还是良性。softmax分类器输出当前样本属于每个类的归一化概率。由于恶意软件分类是一个两类问题(良性/恶意软件),即
= 2,z是一个两个元素的向量。增加类别
的数量,可以针对其他应用,如恶意软件家族分类问题,其中I等于要分类的恶意软件家族的数量。
3.3 学习过程
根据上述定义,在训练过程中要最小化的成本函数(对于一批b个训练样本,{})可以写成如下形式:
其中是将神经网络应用于示例训练样本
后的向量输出,
是示例
的正确标签,1{x}是一个指示函数,如果其参数x为真则为1,否则为0。成本既依赖于神经网络的参数Θ,即所有层的权重和偏差 -WE, wl,m, bl,m,Wh, bh,wi,和bi - 也依赖于当前训练样本。在训练过程中的目标是随机计算成本函数相对于参数的梯度,∂C/∂Θ,给定当前批量的样本,并使用该梯度来更新参数以减小成本,更新如下:
其中α是一个小正实数,称为学习率。在训练过程中,网络会反复呈现以随机顺序排列的批量训练样本,直到参数收敛。为了解决恶意软件和良性类别训练样本数量不平衡的问题,用于更新网络参数的梯度会根据当前训练样本的标签进行加权。这有助于减小分类器对预测较多样本类别的偏见。假设在训练集中,恶意软件样本的数量为M,良性样本的数量为B。假设良性软件样本较多,则恶意软件样本的权重为1 − M/(M + B),而良性样本的权重为M/(M + B),即梯度根据每个类别的样本数量的倒数进行加权。
需要注意的是,在设计我们提出的体系结构时,一个考虑因素是保持参数数量相对较低,以帮助防止过度拟合,鉴于通常可用的训练样本数量相对较少。典型的深度网络可能有数百万个参数[20],而我们的恶意软件检测网络只有数万个参数,这极大地减少了对大量训练样本的需求。
4. 结果
为了评估我们方法的性能,设计了一组实验。所有实验中使用的体系结构只有一个卷积层。之所以使用这种体系结构,是因为可用的数据集具有相对较少的训练样本,这意味着具有大量参数的网络可能容易过拟合。已经证明只有一个卷积层的卷积网络在自然语言文本分类任务上表现良好[27]。在这种体系结构中,其余的超参数,如嵌入空间的维度和卷积滤波器的长度和数量,是根据小型和大型数据集上的10折交叉验证的经验值进行设置的。得到的值是8维的嵌入空间,8个长度为8的卷积滤波器和16个隐藏的全连接层神经元。
我们的实验是在三个不同的数据集上进行的。第一个数据集包括来自Android恶意软件基因组项目[28]的恶意软件,已经广泛使用[10, 11]。该数据集总共包含2123个应用程序,其中863个是良性应用程序,1260个是来自49个不同恶意软件家族的恶意软件。对每个样本都提供了恶意软件家族的标签。该数据集中的良性样本是从Google Play商店收集的,并经过病毒总扫描以确保它们高度可能是无恶意软件的。我们将这个数据集称为"小数据集"。
第二个数据集是由McAfee Labs(现在是Intel Security)提供的,来自供应商的内部Android恶意软件仓库。在丢弃空文件或少于8个操作码的文件后,数据集包含2475个恶意软件样本和3627个良性样本。该数据集不包括恶意软件家族的标签,可能包括小数据集中的恶意软件和/或良性应用程序。因此,为了确保训练的卫生条件,即确保不在测试集上进行训练,网络在每个数据集上都是单独训练和测试的,以确保不会发生交叉污染。我们将这个数据集称为"大数据集"。
我们还有一个由McAfee Labs提供的附加数据集,包含约18,000个Android程序,比前两个数据集更近地收集。这个数据集用于在使用较小的数据集设置超参数后,测试最终系统。在丢弃短文件后,数据集包含9268个良性文件和9902个恶意文件。我们将这个数据集称为"非常大数据集"。
每个数据集被分为90%的训练和验证集,其余10%用于测试。确保验证集和测试集中正样本和负样本的比例与整个数据集相同。结果报告使用分类准确度、精确度、召回率和F值的均值。性能的关键指标是F值,因为恶意软件和良性类别的样本数量不相等。在这种情况下,分类准确度受到每个类别中样本数量的影响太大。例如,如果大多数样本属于类别x,分类器在所有情况下都只报告x,那么分类准确度将很高,尽管分类器将无用。但在相同条件下,基于精确度和召回率的F值将很低。
我们的神经网络软件是使用Torch科学计算环境[4]开发的。在训练过程中,使用学习率为1e-2的RMSProp [3]来优化网络参数,进行10个时期的训练,使用小批量大小为16。网络权重是使用默认Torch初始化随机初始化的。我们使用Nvidia GTX 980 GPU来开发网络,训练网络执行恶意软件分类在大数据集上大约需要25分钟(包含大约6000个示例程序)。一旦网络已经训练好,我们的实现可以在GPU上每秒分类大约3000个文件。
4.1 计算效率
在这个实验中,我们比较了我们提出的恶意软件分类系统与我们实现的传统n-gram恶意软件分类系统[10]的计算效率。请注意,在报告结果时,我们不包括解析恶意软件文件所需的时间,因为这对两个系统都是恒定的。表2中的结果以每个恶意软件文件达成分类决策的平均时间和相应的每秒可以分类的平均程序数量来呈现。
从表2可以看出,我们的系统比基于n-gram的系统可以产生更多的恶意软件分类决策。基于n-gram的系统在增加n-gram特征的长度时也会经历指数级的减速。这严重限制了使用更长的n-gram,这对于提高分类准确度是必要的。我们提出的系统没有同样的限制,实际上,CNN的第一层提取的特征可以被认为是n-gram,其中n = 8。在传统的基于n-gram的系统中使用这样的特征将会大大增加计算开销。我们提出的神经网络系统是在台式机GPU上实现的,具体来说是Nvidia GTX-980,但它可以轻松地移植到移动设备的GPU上,从而实现对Android应用程序的快速和高效的恶意软件分类。
最后,执行训练好的神经网络所需的内存使用量是恒定的。增加卷积滤波器的长度或数量,或线性增加训练样本的数量都会线性增加内存使用。而基于n-gram的系统,增加训练集大小会显著增加唯一n-gram的数量,因此会增加内存使用。例如,在小数据集中,有213个唯一的1-gram,1891个唯一的2-gram和286471个唯一的3-gram。这意味着我们提出的基于神经网络的系统在训练期间也更节省内存使用。
4.2分类准确率
在这个实验中,网络的性能以准确性为度量标准。网络是使用完整的训练和验证集进行训练的,然后在超参数调整过程中未看到的测试集上进行测试。我们将我们提出的系统的性能与我们自己实现的基于n-gram的恶意软件检测方法[10]进行比较。为了直接比较它们的性能,两个系统都使用相同的训练和测试样本。小数据集和大数据集的结果如表1所示。我们努力选择来自文献的使用类似Android恶意软件数据集的论文,以尽可能公平地进行比较。
在小数据集中,我们提出的方法明显达到了最先进的性能,与[10]和[23]等方法相当。它的性能比我们的基准n-gram系统使用1-gram特征要好,并且与使用2和3-gram特征的基准性能几乎相同。
由于大数据集中存在更多恶意软件的差异性,因此更具挑战性。我们的系统在具有更高计算效率的情况下实现了与基线n-gram系统相似的性能(见第4.1节)。尽管其他方法在类似的测试中取得了更好的性能,但它们使用了额外的外部信息,例如应用程序的请求权限或API调用[25]。相比之下,我们提出的方法只需要原始操作码,从而避免了需要由领域专家手动设计的特征。此外,我们提出的方法具有与现有方法相比非常高的计算效率,因为它能够每秒分类大约3000个文件。
从相同来源获得的大数据集中的结果可以看出,随着提供更多的训练数据,我们系统的性能会提高。这种现象在其他领域的神经网络训练中已经观察到,性能与训练样本的数量高度相关。我们期望这些结果可以在提供更多训练数据的情况下进一步改善,这也将允许探索更复杂的网络体系结构。不幸的是,由于与n-gram方法相关的计算成本,无法对大数据集进行基线n-gram系统的比较。
4.3 学习曲线
在这个实验中,我们的目标是了解系统性能与训练数据数量的关系,以预测如果提供更多的训练数据,系统的性能可能会如何改变。这个实验是在V.大数据集上进行的。与以前的实验一样,数据集被分成训练和验证集。在整个实验过程中,验证集保持不变。通过从完整的训练样本集中随机子采样来构建一个人为减小的训练样本集。然后,网络是从头开始在这个减小的训练样本集上进行训练,然后在训练和验证集上测量系统的性能。这个过程对于几种不同大小的训练样本集都是重复的,从小数量的示例到包含所有训练示例的完整集。然后将验证集和训练集上的系统性能作为训练集大小的函数绘制出来。性能以1 - f-score的形式记录,这意味着完美的性能将产生零值。
从图3中,我们可以看出,当只提供少量的训练样本时,训练集性能是完美的,而验证集性能非常差。这是可以预期的,因为使用这么少的训练样本,系统将过度拟合训练集,学到的参数不会推广到未见的验证集。然而,随着提供更多的训练样本,验证集误差减小,表明系统已经学会从训练集推广。我们可以从图3中的学习曲线预测,如果提供更多的训练样本,验证集误差将继续减小。
这些结果表明,与预期的神经网络[20]一样,我们的系统受益于更多的训练数据。它们还表明,大数据集的性能不佳,这是由于数据不足引起的。当只提供大约6000个训练样本时,验证集和测试集的错误之间的差距表明了这一点。
4.4现实性检验
这个实验的目的是在实际环境中评估我们提出的分类技术的潜力,我们将我们训练好的网络应用于一个全新的数据集。这使我们能够展示我们的分类技术在应用于一个未知和实际数据集时的真实潜力。在这个实验中使用的网络是在第4节介绍的V.大数据集上训练的。我们的新数据集包括96,412个良性应用程序和24,103个恶意应用程序。良性应用程序是从Google Play商店中随机选择的,并且是在2016年7月和8月收集的。为了表示一个不同的恶意应用程序集,我们使用了另一个包含已知恶意应用程序的数据集,包括来自Android恶意软件基因组项目[28]的那些应用程序,但删除了与网络的训练集重叠的应用程序。在这个实验中使用了约1 TB的APK。这些APK通过一个由29台机器并行运行的云架构转换为操作码序列,这个过程花费了大约11小时。操作码序列的分类是使用Nvidia GTX 1080 GPU执行的,并且花费了一个小时来完成。需要注意的是,对于这个实验,我们假设Google Play数据集中的所有APK都是良性的,恶意数据集中的所有APK都是恶意的。当然,这可能是一个天真的假设,因为Google Play上可能存在恶意应用程序。我们对新数据集进行了交叉验证测试。在每个交叉验证折叠中,使用了大约24,000个恶意应用程序和24,000个良性应用程序。因此,为了向网络呈现所有应用程序,使用了四倍的交叉验证。这个实验的结果如表3所示。
从表3的结果可以看出,尽管F1分数低于先前的实验,但我们的系统在实际环境中有潜力运行。这是因为我们的新测试数据集比用于训练网络的数据集大得多,并包含更多种类的应用程序。这个实验的结果表明,该网络已经学会了具有泛化到实际数据的功能。在未来的工作中,我们希望利用我们的新数据集,探索更复杂的网络体系结构,以根据更多的训练数据进行学习。
5. 结论
在本文中,我们提出了一种基于深度神经网络的Android恶意软件检测系统。将深度学习应用于恶意软件分析领域的创新应用表现出良好的性能和潜力,已在四个不同的Android恶意软件数据集中得到验证。我们的系统能够同时学习执行特征提取和恶意软件分类,只需要大量标记的恶意样本的原始操作码序列。我们系统的主要优势是它消除了手工设计恶意软件特征的需求,比现有的基于n-gram的恶意软件分类系统更具计算效率,并且可以在移动设备的GPU上运行。
作为未来的工作,我们希望将我们的方法扩展到不同平台的动态和静态恶意软件分析。我们提出的方法足够通用,可以应用于其他类型的恶意软件分析,只需要对网络体系结构进行轻微的修改。例如,该网络可以处理动态分析软件生成的指令序列。同样,通过更改反汇编预处理步骤,可以将相同的网络体系结构应用于不同平台的恶意软件分析。
对于恶意软件分类的另一个开放问题,它可能允许使用更多参数的网络,从而具有更大的判别能力,是数据增强。数据增强是一种通过轻微修改现有训练示例来人为增加训练集大小的方法。数据增强中使用的转换通常选择模拟在真实世界数据中发生的变化,但这些变化可能在可用的训练集中没有得到充分覆盖。我们希望研究设计适用于恶意软件检测的数据增强方案。