恶意软件检测(1)SeqNet: An Efficient Neural Network for Automatic Malware Detection
SeqNet: An Efficient Neural Network for Automatic Malware Detection
- https://github.com/Darren-8/SeqNet.git.
摘要
恶意软件继续快速发展,每天捕获超过45万个新样本,这使得手动恶意软件分析变得不切实际。然而,现有的深度学习检测模型需要人工特征工程,或者需要很高的计算开销来进行长时间的训练,这可能会很难选择特征空间,并且很难再训练来缓解模型老化。因此,对探测器的一个关键要求是实现自动、高效的检测。在本文中,我们提出了一种轻量级的恶意软件检测模型SeqNet,该模型可以在原始二进制文件上以低内存进行高速训练。通过避免上下文混淆和减少语义丢失,SeqNet在将参数数量减少到仅136K时保持了检测精度。在我们的实验中,我们证明了我们的方法的有效性和SeqNet的低训练成本要求。此外,我们还公开了我们的数据集和代码,以促进进一步的学术研究。
一、说明
恶意软件是一种严重的网络安全威胁,可能会对个人和公司系统造成严重损害,例如,急剧减速或崩溃、严重数据丢失或泄漏,以及灾难性的硬件故障。AVTest报告称,平均每天检测到超过45万个新的恶意程序和可能不需要的应用程序。[1]. 大量新的恶意软件变体使得手动恶意软件分析效率低下且耗时。为了更有效地检测恶意软件,许多研究人员提出了用于恶意软件分析和检测的高级工具[2,5,9,14]。这些工具通过对分析员的行为进行部分工作,帮助他们更高效地完成任务。然而,在处理如此大量的恶意软件时,这些解决方案无法从根本上减少工作量。为了解决这个问题,许多专家和学者将机器学习算法,尤其是深度学习应用于恶意软件检测和分类[7,12,15,16,18,22,26,28,34,37,45,50,51,53,55,58-60,62,63]。他们的努力为恶意软件分析神经网络的研究和实用的恶意软件自动检测做出了很大贡献。
然而,这些模型通常需要各种特征工程来帮助神经网络做出判断,这可能很费劲,并且容易丢失一些关键信息。为了实现更加友好和自动的检测,提出了基于二进制的方法[31,37,41,42]。两种流行的原始二进制处理方法是文件剪切和二进制图像转换。然而,这两种方法可能会遇到语境混乱和语义丢失,这将在后面讨论。
此外,模型老化是神经网络的一个关键问题[25,40]。与计算机视觉和自然语言处理不同,恶意软件正在不断快速发展。恶意软件检测是攻击者和检测器之间的斗争。随着恶意软件的不断发展,深度学习模型可能已经过时。例如,五年前训练的模型在今天的恶意软件检测中可能非常薄弱。神经网络很难识别看不见的恶意行为,这可能会导致较低的检测精度和更容易的规避。模型不可能预测未来恶意软件的特征,但快速学习检测新恶意软件的知识是可行的。因此,再培训模式成为缓解老龄化问题的少数方法之一。我们可以让神经网络快速重新训练,学习新恶意软件的新特征,以便识别新的攻击方法。
由于模型的结构和规模,再培训可能会耗费时间和计算量,而且如此高的成本可能会导致模型更新困难。此外,恶意软件检测是几乎所有电子系统中的常见操作,对于计算能力较低的设备来说,进行检测是必要的。例如,笔记本电脑或其他移动设备很难运行一个庞大的模型来扫描所有文件以检测恶意软件。这些要求表明,检测模型应该足够小和有效,使其更实用,以便我们能够快速重新培训或执行检测。此外,无需复杂特征工程的自动检测对于各种场景中使用的模型至关重要。
总的来说,我们的工作面临两个挑战:自动化和高效。检测模型应该足够自动化,并且几乎不需要人工特征工程。该模型的规模应足够小,以降低训练和检测成本。
在本文中,我们提出了一个有效的恶意软件自动检测模型,该模型只有大约136K个参数,我们称之为SeqNet。在没有人工特征选择的情况下,SeqNet可以仅基于原始二进制文件自动分析样本并找出恶意程序和良性程序之间的差异。较小的神经网络通常具有较少的参数,这可能会导致较低的学习能力。这可能是因为较小的模型往往更难适应从原始二进制文件到恶意域的复杂映射。这个问题可能会导致小型深度学习模型中恶意软件检测的准确性较低。
为了在减少参数数量时保持准确性,我们提出了一种新的二进制代码表示方法,以减少语义损失并避免上下文混淆。根据我们的方法,我们使SeqNet在无需特征工程的情况下,在可移植可执行(PE)恶意软件检测方面表现良好。基于这种表示方法,我们创建了一种新的卷积方法,称为序列深度可分离卷积(SDSC),以进一步压缩检测模型的规模。我们在一个大型PE数据集上对SeqNet进行训练,发现与许多现有的基于二进制的方法和模型相比,它具有很好的性能。我们还在进一步的实验中证明了我们的模型收缩方法的有效性。此外,我们还公开了我们的代码和数据集以供进一步研究,我们希望深度学习算法能够更好地应用于恶意软件检测。
我们在一个大型PE数据集上对SeqNet进行训练,发现与许多现有的基于二进制的方法和模型相比,它具有很好的性能。我们还在进一步的实验中证明了我们的模型收缩方法的有效性。此外,我们还公开了我们的代码和数据集以供进一步研究,我们希望深度学习算法能够更好地应用于恶意软件检测。
本文的主要贡献包括:
- 我们提出了一种新的方法来表示二进制代码,同时减少语义损失,避免上下文混淆。
- 基于上述新的表示方法,我们提出了一种新的卷积压缩恶意软件检测模型的方法SDSC。
- 我们设计了一个深度卷积神经网络(CNN),称为SeqNet,它具有更小的规模和更短的训练过程。
- 我们将数据集和代码公开以供进一步研究。
这是本文的布局。第2节介绍了深层恶意软件检测的主要方法和几个问题。第3节描述了我们应用于SeqNet的主要方法。第四部分阐述了我们的实验和相应的结果。
二、背景
在本节中,我们将介绍使用深度学习进行恶意软件检测的背景。首先,我们列举了这方面的两种主要方法。然后进一步讨论了目前流行的二进制表示方法的几个问题。最后,我们解释了其中一种方法所基于的深度可分离卷积。
2.1 深度恶意软件检测
神经网络具有强大的学习能力,在计算机视觉和自然语言处理中得到了广泛的应用。深度学习算法已经被许多研究人员应用于恶意软件检测。据我们所知,我们认为有两种主流思想,类似于[47]。
基于特征的方法。在早期作品中,深度学习模型是从精心制作的恶意软件功能中训练出来的[7、15、16、18、26、28、34、58、63]。在检查可疑样本时,模型需要提取特定特征,以特定方式处理它们,然后检测恶意代码以给出结果。所选功能可以是API调用、控制流图(CFG)或任何其他能够反映程序操作的信息。的确,人工特征学习是神经网络识别恶意样本和良性样本之间主要差异的有效方法。然而,特定的领域特征只能从一个角度很好地描述样本的关键信息。它不能完全覆盖二进制代码的语义,甚至会引发严重的信息丢失。例如,仅使用API调用作为特性会导致模型忽略控制流。此外,精心设计的功能需要足够的先验知识,这需要专家仔细选择。因此,耗时的手动特征提取可能会限制基于特征的模型的使用,并使其难以对抗恶意软件的持续演化。
基于二进制的方法。与传统的特征工程相比,自动特征提取是神经网络的发展趋势之一,人工干预更少,性能更好。我们读取文件的二进制文件,直接将其发送到检测模型,无需或几乎不需要预处理。该模型将自动找到可疑部分,并将二进制文件识别为恶意或良性。这种方法可以更有效地避免人们分析恶意软件的需要,并更好地减少分析人员的工作量。此外,通过减少手动特征工程造成的损失,直接从原始二进制文件学习可能会更好地保留语义和上下文信息。
为了使我们的模型更加自动化,避免信息丢失,我们将重点放在基于二进制的模型上,SeqNet将原始二进制文件用作输入。此外,较低的计算开销可以使模型更好地适应恶意软件的演变,并扩展应用场景,例如在物联网环境中。我们将一种新颖但简单的二进制代码表示方法应用于SeqNet,并在减少参数时保持其性能。
2.2 二进制代码表示法
在这一部分中,我们将介绍几种主要的二进制代码表示方法,它们适用于基于二进制的模型。将样本转换为神经网络的输入会显著影响模型的性能。因此,正确的二进制代码表示方法是基于二进制的恶意软件检测神经网络的重要组成部分。目前,人们提出了两种主要的方法来完全表示原始二进制码。
文件剪切。由于内存限制的限制,许多作品对最大文件大小设置了人为限制,这种方法是从二进制程序的开头提取一段固定长度的代码片段。如果二进制程序的长度小于所需代码段的长度,则该代码段的末尾将填充零。文件剪切会导致语义信息丢失,因为如果二进制文件的结尾比固定长度长得多,就会忽略它。然而,恶意代码通常位于二进制文件的末尾。例如,嵌入的病毒通常嵌入在受感染文件的尾部,这可能有助于它们逃避基于这种方法的模型的检测。为了缓解这个问题,Mal-ConvGCT[42]通过扩展代码段大小限制来提高MalConv[41]的性能。
二值图像转换。第二种方法将所有二进制代码转换为图像,并利用图像分类解决方案执行恶意软件检测。所有图像都可以使用双线性插值算法重新采样到相同的大小。然而,图像与序列不同,这可能会导致几个问题。我们认为这种方法会导致上下文信息混乱,下面列举了三个例子。
- 边缘丢失:如果二进制指令位于图像边缘,换行符可能会将指令分成两部分,如图1(a)所示。此问题可能会导致模型难以识别多条长指令。此外,由于强相关指令的中断,上下文信息可能在边缘被破坏。
- 重采样噪声:如果我们重塑图像大小,不同行中不相关的指令会导致上下文信息混淆,如图1(b)所示。这个问题很容易使原始序列中的指令彼此相距很远,而被迫集成到相应的图像中,这可能会混淆神经网络。
- 填充问题:填充操作可能会使模型难以识别原始序列的开始和结束,如图1(c)所示。为了确保卷积层输入和输出的一致性,我们通常在输入的边缘填充一些零,神经网络可能会根据填充得到空间信息[27]。与图像处理不同,识别出的空间信息可能会误导模型。
文件剪切导致的语义丢失和二值图像转换导致的上下文混乱阻碍了恶意软件检测模型的性能。这些问题可能会混淆神经网络,甚至误导它们做出截然相反的决定。通过缓解这些问题,我们可以帮助我们的模型在减少参数时保持其性能。
2.3 卷积法
传统的卷积算法模拟动物视觉,在计算机视觉中具有很好的性能。这个简单的操作可以有效地提取图像中的视觉特征。低级卷积层检测图像中的纹理和简单特征,高级卷积层可以识别内容和整体语义[61]。这就是为什么计算机可以通过多个卷积层的叠加来识别复杂的物体。
然而,传统卷积所需的参数数量往往使得深度学习模型太大,无法应用于计算能力较低的设备。此外,参数过多的模型可能需要很长的训练过程。例如,VGG有超过1.3亿个参数,已经接受了2年的培训 3周[49]。如此庞大的模型不适合在普通设备上运行。
因此,我们将CNN架构应用于SeqNet,并将DSC的输入形式从2D调整为1D,从而更好地减少了训练参数的数量。因此,训练时间成本和新生成的模型的大小都进一步减小。我们的方法的细节在第3节中描述。
三、 方法
在本节中,我们将介绍SeqNet的详细信息。首先,我们概述了我们的方法。其次,我们引入了可以减少语义损失和避免语境混淆的序列表征。第三部分描述了SDSC如何压缩模型的规模。最后,我们详细介绍了SeqNet的体系结构。
3.1概述
SeqNet的目标是以较低的培训成本实现高效、自动的恶意软件检测。在整个培训和检测过程中,操作员不需要专业的恶意软件分析知识来执行手动领域特定的功能工程。实际上,我们直接将原始二进制文件输入SeqNet,SeqNet将自动分析序列并提取特征。SeqNet的输出是可疑样本的恶意可能性,输入样本是否为恶意软件取决于模型给出的可能性。
准确检测是恶意软件检测模型的基本要求。我们认为恶意软件检测不同于图像分类。恶意软件检测可能需要更多地关注几个关键的恶意代码,而图像分类可能更关注整体。根据这一理论,我们对SeqNet的主要设计要点之一是减少上下文混淆和语义丢失。我们使用原始二进制序列作为SeqNet的输入,这样可以避免上下文混淆,减少语义损失。
轻量级模型通常具有更广泛的应用场景和更快的检测性能。显然,小型模型的培训成本也很低。因此,压缩SeqNet的规模是必要的。新的卷积方法,称为序列深度可分离卷积(SDSC),有助于SeqNet满足这一要求。
3.2 序列表征
输入格式对神经网络性能和模型大小至关重要。较大的输入往往导致较大的模型,适当的输入格式可以有效地提高神经网络的学习效果。SeqNet的输入是原始二进制序列,这些序列通过线性插值算法调整到相同的长度。原始二进制序列输入几乎不需要人工干预。在不转换为图像的情况下,很明显,我们可以避免上下文信息混淆,减少语义损失,如图所示
一个例子表明,序列表征可以解决上下文混淆和语义丢失的问题。在图像中,二进制指令“BF 01 00”在边缘被切断,但它仍保留序列中的形状。插值后,我们可以看到,图像强制加强了“56”与“00”之间的关系,其中“56”表示“推esi”,而“00”在“0F 85 93 00 00 00 00 00”中表示“jnz loc 1000DF90”,但它忽略了具有更强关系的指令,例如“推edi”和“mov edi,1”。在序列中,指令“56”与前端结合,而不是“00”,并且在物理上与“57”保持接近,后者表示“推edi”。在图像中,输入到卷积层之前添加的填充提供了不正确的位置信息,但在序列中,它标记了开始和结束。
- 避免边缘丢失。由于序列只有两条边,即开始和结束,因此可以避免边缘丢失。序列格式符合代码的空间结构,因此任何指令都没有中断,这使得所有指令在输入模型时都完好无损。中断的消失也有效地保护了原始二进制序列的语义,因为相邻的指令是不分离的。
- 重采样降噪。当我们调整序列的大小时,元素只会受到前向和后向上下文的影响,因此重采样噪声可以减少。此外,图像中两条无关指令之间的强制关系消失。通过使用序列特征,远程指令不能相互影响,这使得模型能够更清楚地识别指令之间的关系。此外,通过使用线性插值算法,我们可以确保输入序列的长度是相同的。
- 避免问题。填充问题可以解决,因为在卷积之前,我们只需要在序列的两端填充。此外,与向图像中添加不正确的信息相比,序列中的填充将有效地标记相应程序的开始和结束。因此,该模型可以根据填充来识别指令的正确位置。
- 语义损失减少。由于我们输入的是整个二进制文件,而不仅仅是一个片段,因此语义损失可能会减少。通过线性插值算法,我们可以压缩语义,而不是忽略它。在这种情况下,嵌入式病毒也可能包括在内,因为程序中的所有指令都被输入到模型中。
在缩放到相同的长度之前,我们首先规范化整个序列,使元素的值介于-1和1之间,并以浮点格式存储。由于实数字段的连续性,浮点格式可以比整数格式代表更多的信息。因此,这个操作对于减少线性插值算法造成的语义损失是必要的,如图4所示。通过对数据集进行统计,我们发现大多数文件的大小约为256KB。因此,我们将所有输入序列扩展到2^18字节。
图4:如果我们在规范化之前调整序列的大小,结果不能代表原始二进制代码(a)中的所有信息。相反,如果我们在规范化后调整以浮点格式存储的序列的大小,我们可以有效地减少语义损失(b)。
在序列格式中,指令之间的所有信息都将得到正确和更好的保留。两条指令之间的物理距离反映了关系的真实强度。这种表示方法还利用了代码中的空间局部性,因为模型将更多地关注附近的指令,而不是那些相关性较弱的指令。因此,该模型在学习和检测时接收到的干扰较小。
使用序列特征而不是二进制图像转换的另一个原因是,可执行文件的前后相关性比平面相关性更明显。这就是为什么序列可以更好地代表程序。
3.3 序列深度可分离卷积
序列输入格式不仅解决了语义丢失和上下文混淆的问题,还压缩了SeqNet的规模。SeqNet的卷积核只需要在只有一维的序列上提取特征。与处理一维输入相比,提取二维特征需要更大的卷积核和更多的计算。例如,如图2(c)所示,a 3 3用于图像的内核至少需要10个参数(包括偏差),而3 1序列中使用的内核只需要至少四个参数(包括偏差)。
基于序列输入和深度可分离卷积[21],我们提出了一种称为序列深度可分离卷积(SDSC)的方法,它需要更少的参数和更少的计算。在SDSC中,我们使用3 1个内核替换DSC中的2D深度卷积内核。通过使用SDSC层,SeqNet的尺寸比现有模型小得多。在下文中,我们分析了与DSC相比计算量的减少。
此外,SDSC的输入是一维数据,因此与DSC相比,它不太容易受到无关指令的影响。在实验中,我们发现SDSC具有良好的性能,并成功地保持了SeqNet的性能。基于SDSC,我们在SeqNet中使用了以下两种主要的卷积块架构。
- 标准SDSC块。如图5(a)所示,标准SDSC块由三部分组成。我们使用批量归一化层[23]来帮助模型更好地了解训练样本的概率分布。ReLU[38]激活函数可以通过使模型快速收敛来加速训练过程
- 残差SDSC块。如图5(b)所示,剩余SDSC块结合了ResNet[19]中使用的方法。通过跳过SDSC块,我们可以有效地防止梯度消失,并构建更深层的架构。
3.4 模型架构
SeqNet的构建主要基于SDSC,图6解释了该架构。为了减少参数的数量,我们使用更小的核和更深的结构,这也可以扩大感受野。标准SDSC块用于在对序列进行下采样时提取特征。对于第一个卷积层,我们使用单个公共卷积层嵌入原始输入,内核大小为3*1.我们设置大小是因为经常使用的CPU指令的长度通常是三个字节。对于高层特征,我们使用五个剩余的SDSC块进行分析,与完全连接的层相比,这也可以更好地保留上下文和空间信息。此外,残差SDSC块可以防止梯度消失,使模型快速收敛。最后两层是完全连接层和softmax层。全连通层用于对模型前端给出的分析结果进行分类。
在这个公式中,P表示转换后的结果,x表示softmax层的输入。对于池层,我们使用平均池。在我们的实验中,我们发现当剩余SDSC块的数量为5个,输入128个通道,并且完全连接的层的数量仅为1个时,该模型的性能最好。SeqNet输出样本的恶意可能性,如果可能性超过50%,模型将视其为恶意软件。根据输出,对于损失函数,我们使用交叉熵函数。SeqNet总共只有大约136K个参数,几乎是MalConv的十分之一,我们将在第4节中讨论。
四、实验
4.1培训数据集
建立良好的培训数据集对于评估SeqNet的性能至关重要。正确的标签和足够的样本是展示SeqNet学习能力的必要条件。对于样本类型,我们认为PE恶意软件是电子系统的主要威胁之一。此外,有很多PE恶意样本,很容易获得足够的PE样本。
因此,以下实验适用于一组PE文件,因为它们很普遍。在这项工作中,所有恶意样本都来自VirusShare[4]。齐安信公司提供了约10000份良性样本。我们还从真实的个人电脑中收集了许多良性样本,以模拟我们日常生活中的真实环境。为了确保良性样本中没有混合病毒,我们使用VirusTotal[6]检测所有文件。如果在VirusTotal报告中没有AV引擎将其视为恶意软件,我们将其视为良性样本。操作系统文件和恶意软件通常具有类似的行为,这可能会混淆检测模型,甚至会混淆训练有素的分析师[8]。因此,为了帮助SeqNet观察恶意程序和良性程序之间的一般差异,并使SeqNet更加健壮,我们添加了大约10000个系统文件作为良性数据。VirusTotal[6]也会检查系统文件,以确保它们是良性的。我们总共获得了72329个二进制文件的训练数据集,其中37501个恶意文件和34828个良性文件,以及24110个二进制文件的验证数据集,其中12501个恶意文件和11609个良性文件。
数据集中的所有文件都是PE文件,我们通过比较SHA256值来消除重复。我们将恶意和良性样本的比例设置为1左右,以确保结果可靠。例如,如果数据集只有恶意样本,模型可能会通过识别“4D 5A”来检测所有恶意软件。相反,如果我们向数据集中添加足够多的良性样本,模型就可以了解恶意样本和良性样本之间的真正区别。
4.2 测量
在我们的实验中,我们从训练成本和准确性两个方面测量SeqNet。对于培训成本测量,我们使用参数的数量来表示模型的规模。更大的模型包含更多的神经元,需要更多的参数来构建。在训练和预测过程中,每个参数都会占用恒定的内存。因此,参数的数量显著影响模型训练和预测所需的记忆。为了准确测量模型推理的计算开销,我们通过输入一个随机二进制来计算每个模型上的浮点运算(Flops)。我们还通过记录一个历元所需的时间来测量模型的速度,包括训练和验证过程。
4.3 培训
设置模型和培训设置会显著影响培训过程和结果。所有模型都经过70个阶段的训练,我们选择了过去30个阶段的验证结果,以获得平均精度和其他指标。我们将批量大小设置为32,并选择Adam[29]作为所有模型的优化器。为了保证训练的公平性,我们将交叉熵损失应用于所有模型。
4.4 模型评估
我们选择几种最先进的基于二进制的方法作为基线。为了反映基于图像转换的模型的总体性能,我们选择著名的MobileNet[21]作为代表性模型。我们将程序转换为RGB图像作为MobileNet的输入。在转换过程中,一个字节映射一个通道中的一个像素。对于基于文件剪切的模型,我们选择MalConv[41]和MalConvGCT[42]。ResNet和MobileNet都是由Pytorh[39]实现的,我们使用ResNet18作为ResNet,而MobileNet v2作为MobileNet。我们使用MalConv和MalConvGCT作者提供的源代码,并将它们应用到我们的实验中。我们在每个模型的末尾添加一个softmax层,以便在验证时将结果转换为可能性格式。根据表1中的参数数量,我们可以发现SeqNet的最小参数仅为MalConv和Mal-ConvGCT的十分之一。此外,SeqNet在恶意软件检测方面保持了良好的性能。图7是精度和模型尺寸对比图,左上角的模型位置表明模型尺寸较小,精度较高。
精度还表明,SeqNet误解良性样本的可能性很低。此次召回意味着SeqNet可能有能力防止逃税。在训练过程中,我们发现大多数模型在第一个历元后达到90%的准确率。在我们的训练中,我们发现SeqNet只需要大约两分钟半就可以完成一个历元,而Mal-Conv大约需要一个小时。因此,我们可以看到,SeqNet的微小尺寸导致了较低的计算开销,基于卷积的体系结构加速了训练和推理。
4.5 进一步评估和消融研究
接下来,我们将描述进一步的实验,以讨论SeqNet中的上下文混淆避免、模型收缩和架构设计。我们对SeqNet进行了几个简单的更改,以测试我们的假设。
- 语境混乱。为了证明上下文混淆的存在,我们将SeqNet更改为SeqNet2D,可以输入512 * 512张图片。我们将图像大小设置为512 * 512,因为它可以提供与序列相同的信息量。SeqNet2D使用深度可分离卷积层的架构与SeqNet非常相似。表2确保了图像转换方法会导致混淆,在从程序学习功能时可能会混淆网络。MobileNet使用图像作为输入,因此表1还通过SeqNet和ResNet之间的比较反映了上下文混淆的存在。
- 模型收缩。SDSC层通过降低输入维数和分解卷积来减少参数量。我们用SeqNet中的公共卷积层替换所有SDSC层,并将新模型命名为SeqNetConv,以反映因子分解卷积的效果。为了验证尺寸减小在模型收缩中的作用,我们使用SeqNet2D作为实验对象。我们还将公共卷积层应用于SeqNet2D,并调用新模型SeqNet2DConv来展示这两种方法的缩减效果。如表2所示,我们可以看到维数的有效降低减少了参数的数量,卷积分解进一步减少。通过结果可以看出,SDSC层在保持性能的情况下有效地缩小了模型。我们还发现,参数越少,模型在训练时收敛速度越快。
- 结构设计。在我们的实验中,我们还发现,更深层次的结构可能不会表现得更好。我们调整SeqNet的深度。具有更深层次架构的模型称为SeqNetDeep,而更浅层次的架构称为SeqNetShal。与我们的直觉类似,较浅的体系结构会显著降低模型的性能。然而,表2中的结果表明,更深层次的体系结构并不能明显提高性能,而是扩大了模型的规模。我们假设这种现象可能是因为从二进制到恶意软件的简单映射关系,而不需要复杂的神经网络来拟合。另一个可能的原因是,更深层次的结构使网络难以训练,这可能会导致精确度较低。我们发现的另一个现象是,扩张卷积不能有效地提高性能。我们认为这是因为与输入的长度相比,使用或不使用扩张卷积对模型的感受野没有太大影响。
4.6 稳健性评估
我们还检查了SeqNet的健壮性,并将其与MalConv进行了比较。关于攻击深度模型有大量的研究[24,32,36,44,48,54,56]。然而,与针对图像相关任务的神经网络的传统攻击不同,我们不能直接在二进制文件上添加扰动,因为这可能会使二进制文件不可执行。此外,我们很难根据提取的特征[47]调整攻击策略以适应原始的二进制模型。因此,对于攻击策略,我们采用[30]中的方法,在输入端的填充部分注入一个短的有毒二进制文件。
由于Mal-Conv和SeqNet之间的输入格式不同,我们等效地采用了有毒二进制生成方法。与沿梯度选择最近的嵌入向量相比,SeqNet的毒药生成过程如下所示。
为了使攻击策略在有限的二进制长度下有效,我们从验证恶意数据集中随机选择了500个可用样本。我们将毒药的长度设置为32000字节,MalConv的整个二进制文件固定为16000000字节,并逐步增加毒药生成迭代次数。我们测试了SeqNet和MalConv错误分类的样本数量。结果如图9所示。我们看到SeqNet对有毒二进制攻击有很强的防御能力。我们假设这种现象是由于文件剪切方法中的填充部分造成的漏洞。基于文件剪切的模型在训练时经常会看到不完整的二进制文件。因此,文件剪切中的填充使攻击者有机会混淆模型,而模型不确定有毒二进制文件是否是样本的一部分。与文件剪切相比,我们的方法可以通过输入整个二进制文件来缓解这个问题。然而,我们认为这一理论仍需进一步验证,我们可能会在未来的工作中对其进行研究。
4.7 案例研究
为了更好地理解SeqNet所学到的知识,我们随机选择了四个样本,并使用Grad CAM[46]解释技术生成热图,以便我们能够可视化哪个部分对结果影响最大。此外,我们还手动分析相应的样本,以验证SeqNet是否找到了正确的恶意代码。在手动分析中,我们通过IDA Pro[3]分解样本,精确定位恶意功能或代码。为了更好地绘制结果,我们提取了热图的关键部分,并对片段应用以下归一化公式。
其中X表示代码段。用于热图的激活图是由SeqNet的最后一个卷积层和ReLU层生成的,因为剩余的空间信息由卷积层编码。我们还在原始二进制文件上标记手动定位结果,以便更好地进行比较。图10显示了手动定位和基于梯度凸轮的解释之间的比较。我们看到,本地激活位置与分析人员定位的恶意部件接近,这反映了SeqNet可能会发现恶意代码并进行可靠的检测。在我们的解释中,我们发现在整个热图中有许多噪音。我们认为这可能是因为数据集中可能存在潜在的异常统计[10]和一些错误标签[43]。然而,遗憾的是,由于学术界对良性档案的忽视,我们很难收集到更多的良性样本。我们希望在未来的工作中能够探索这一现象。此外,我们还发现PE头通常会对SeqNet产生很大影响。这可能意味着PE头包含恶意软件中的恶意信息。更多细节见附录。
5.讨论
在这一部分中,我们将讨论我们的工作的局限性,并提出一些未来需要进一步研究的工作。
5.1局限性
尽管SeqNet表现良好,但我们的工作仍有一些局限性。仍然是语义缺失。虽然我们有效地减少了语义损失,但SeqNet的输入仍然不能包含所有语义。如果序列太长,在插值过程中会对序列进行压缩,压缩后的序列不能代表所有原始信息。此外,如果序列太短,序列将被扩展,这可能会混淆SeqNet。SeqNet的体系结构决定了输入必须具有相同的大小,这是SeqNet的一个限制。
缺乏良性样本。我们面临的主要困难是缺乏良性样本。我们可以获得大量恶意软件收集网站,但很难找到权威的良性样本提供商。为了均匀采样,仅通过添加恶意样本来扩展训练数据集是不合适的,这可能会降低SeqNet的性能,并使实验结果不可靠。因此,很难在具有足够样本的更大数据集上训练神经网络。
标签的质量。除了缺乏良性样本,标签的质量可能是一个潜在问题。由于权威供应商寥寥无几,我们无法保证培训和验证数据集中的所有良性样本都正确标记。我们数据集中的所有恶意样本都是从VirusShare收集的,无需人工确认。几家报纸检查了恶意软件标签的质量,发现它可能达不到我们的预期[43]。虽然这些限制可能会对SeqNet的训练过程产生一些影响,但我们假设,几个不正确的标记样本不会显著影响整体性能。
可能存在的漏洞。对抗性攻击是大多数神经网络的风险,我们也不例外。有动机的对手可能会污染训练数据集,并逃避SeqNet的检测。此外,基于梯度的攻击是混淆深度学习模型的有效方法[17,30,32]。相反,这个问题也有很多解决方案[7,12,20,33,57]。虽然SeqNet可以抵御多次攻击,但我们仍然无法完全保证SeqNet的安全。此外,SeqNet的健壮性原则需要我们进一步探索。
5.2 未来工作
我们提出了一种高效的恶意软件自动检测神经网络SeqNet。SeqNet的主要目标是实现自动、高效的检测,可以以较低的原始二进制文件培训成本快速进行培训。尽管如此,未来仍有许多工作需要完成。基于深度学习的恶意软件检测研究的最大障碍之一是缺乏工业规模的公共可用数据集。研究人员需要权威可靠的数据集,这些数据集不仅包含恶意特征,还包含原始二进制序列。我们将建立一个更大的数据集,以进一步评估SeqNet的性能。此外,还需要足够的良性样本进行进一步研究。我们认为,当使用深度学习模型进行检测时,恶意软件分析不仅应该关注恶意样本,还应该关注良性样本。由于神经网络是黑盒模型,恶意软件检测神经网络的可靠性可能会受到怀疑。虽然SeqNet给了我们很好的结果,但我们仍然无法完全解释原因。因此,在实践中使用深度学习算法检测恶意软件仍需进一步研究。通过我们的实验,我们认为神经网络在恶意软件检测方面可能具有巨大的潜力,我们期待着神经网络在这一领域取得重大突破。SeqNet的健壮性仍需进一步研究。我们仍然缺乏这方面的实验和研究。在未来的工作中,我们将更深入地探索该模型的稳健性,并对其进行更多的改进和分析。
基于二进制的模型。与传统的特征工程相比,自动特征提取是神经网络的发展趋势之一,人工干预更少,性能更好。Raff等人设计了一种称为MalConv的架构,它可以直接从原始PE二进制样本中学习,而无需手动选择特征[41,42]。Krc al等人设计了一个简单的CNN,可以从PE原始字节序列中学习,而无需特定领域的特征选择,这项工作获得了较高的AUC分数,尤其是在小型PE恶意软件样本上[31]。