基于参数优化元学习和困难样本挖掘的小样本恶意软件分类方法

2022-03-04 06:47王方伟柴国芳李青茹王长广
武汉大学学报(理学版) 2022年1期
关键词:集上准确率样本

王方伟,柴国芳,李青茹,王长广

1.河北师范大学河北省网络与信息安全重点实验室,河北 石家庄 050024;

2.河北师范大学计算机与网络空间安全学院,河北 石家庄 050024

0 引言

恶意软件指能够影响系统的完整性、保密性和功能性的恶意代码[1]。随着因特网与物联网的蓬勃发展,恶意软件数量剧增,恶意软件成为网络安全的 主要威胁 之一[2]。AV-TEST(AntiVirus-Test,反病毒测评机构)数据显示,每天新增恶意软件数量巨大。截至2021年4月,已经出现12亿多个恶意软件,与2011年相比,增长了近1 800%,因此需要研究者提出更为有效的方法来检测恶意软件。恶意软件根据其功能的不同可分为蠕虫、后门、木马、病毒等。另外,攻击者通过代码变换、代码插入、子程序重排等构建了恶意软件的许多变种。所以,为了检测恶意软件的变种,需要不断提高恶意软件的检测能力。传统方法大多采用基于特征技术来检测恶意软件[3]。但是,结合多态等技术的恶意软件很容易逃避基于特征的安全设备的检测。目前,恶意软件分析及检测技术主要分为三类:静态分析、动态分析、混合方法[4]。静态分析主要通过对恶意软件二进制文件进行反汇编提取其静态特征[5,6],如操作码,系统调用等,混淆技术的出现导致无法检测未知恶意软件及其变种;而动态分析主要通过虚拟环境如沙箱来分析恶意软件的行为[7,8],但该方法扩展性不足,计算资源消耗大且费时。Natraj等[9]提出了可视化特征检测,将恶意二进制文件转换为灰度图进行特征提取,结果表明该方法相比提取文本特征来检测恶意软件的方法更准确。还有学者使用支持向量机、K近邻、随机森林、神经网络等机器学习方法来分类恶意软件[10,11]。目前,深度学习已成为检测恶意软件的主流方法[12~16],该类方法使用包含多个隐含层的神经网络结构来检测和分类恶意软件,但在提取特征时需要更高的运算能力和足够的样本。

针对小样本的存在而导致分类准确性低的问题,本文提出了一种基于参数优化元学习和困难样本挖掘的恶意软件检测方法。该方法通过简单浅层神经网络来提取样本(灰度图)特征,并使用基于参数优化的元学习方法训练模型。同时,为了提高模型的分类精度,使用困难样本挖掘的方法,将分类准确率低的类作为困难类,再次参与模型训练,使模型具有更好的泛化能力,最后进行分类测试。

1 相关工作

将恶意软件可视化,进而提取特征并用于恶意软件分类的方法,具有直观、有效等优点受到业界的广泛关注。恶意软件的特征可视化的检测方法分为基于机器学习和基于深度学习两大类。

1.1 基于机器学习的恶意软件分类

该类方法先将可执行恶意软件反编译得到二进制文件,进而转化为灰度图,再通过提取可视化特征进行分类。Nataraj等[9]首次提出使用灰度图进行恶意软件分类。该方法先将恶意软件的二进制信息转化为图像,然后提取GIST(generalized search trees)特征,最后使用K近邻分类技术进行分类。该方法在包含25类的数据集上进行实验,准确率高达0.971 8。Makandar等[17]使用相同的特征提取方法,并且使用人工神经网络(artificial neural network,ANN)进行分类。在8类1 719个样本上实验,准确率为0.980 0;在24类3 131个样本上实验,准确率为0.963 0。Narayanan等[18]使用主成分分析(principal component analysis,PCA)技术进行特征提取,用K最近邻分类算法,在8类10 000个样本上进行实验,准确率为0.960 0。上述分类方法在对恶意软件进行纹理分析时需要消耗大量时间。

1.2 基于深度学习的恶意软件分类

深度学习已经广泛地应用在多个领域,并取得了很好的效果。Kalash等[19]将恶意软件转化为灰度图,并使用卷积神经网络(convolutional neural networks,CNN)结构的模型在数据集Malimg[9]和Microsoft Malware[20]进 行 分 类,其 准 确 率 分 别 为0.985 2和0.999 7。Tobiyama等[21]使用循环神经网络(recurrent neural network,RNN)提取恶意软件行为特征,再用提取的特征训练CNN并进行分类。为了减少分类的错误率,数据不平衡问题成为研究的重点,Cui等[22]提出使用蝙蝠算法来处理数据不平衡,并使用CNN来分类,在25类9 339个样本上准确率为0.945 0。Rafique等[23]提出利用不同的CNN提取不同的空间特征,然后构建一个混合的特征空间,再用支持向量机进行分类,在BIG-2015数据集上进行实验,准确率为0.975 6。Vasan等[14]将二进制执行文件转化为彩图并使用数据增强处理数据不平衡问题,微调已经训练好的CNN模型检测和分类恶意软件。该方法在Malimg数据集(9 435个样本)上的准确率为0.988 2。此外,在深度学习的基础上,一些学者开始考虑使用迁移学习。迁移学习是先用一个带有大量标记的自然图像数据集训练CNN去学习通用的图像特征,然后微调该网络将其应用于恶意软件的图像分类。但通过迁移学习学到的特征是自然图像的特征不是恶意图像的特征,且网络结构比较复杂。

1.3 困难样本挖掘

困难样本是预测时与真值标签误差较大的样本,通过对困难样本的再训练可使模型有更高的鲁棒性和更好的分类准确率。困难样本挖掘最早是被Shrivastava等[24]提出用于目标检测任务,而对于分类网络来说就是将困难样本加入到下一次取样的任务中,重新去训练模型。本文使用基于参数优化元学习的方法在多个任务上训练模型,使模型能快速学习到较好的初始化参数,且在此参数的基础上能快速适应于新任务。同时,为了提高模型分类准确率,使用困难样本挖掘的方法,将分类准确率低的类别重新取样再训练模型。本文所使用的模型简单,所需样本量小,对于恶意软件家族分类有良好表现。

2 本文方法

本文的方法主要分为三个步骤:恶意软件预处理,模型训练,模型测试。其中,所用的模型为浅层神经网络,特征提取器包括四个卷积块,每个卷积块的卷积核数量逐渐增多;分类器为Linear层。

2.1 恶意软件预处理

1)生成恶意软件图像。图1是将二进制文件转化为灰度图的过程。转化后所有图像的宽度都是固定的,而高度则是根据文件的大小来确定。属于同一家族的图像在布局和风格上很相似而不同的家族纹理特征明显不同。如图2(a)为Agent.FYI家族灰度图,3个文件大小不同,拥有相似的纹理特征,而图2(a)~(c)中三个不同的恶意软件家族纹理线条是明显不同的。比如Agent.FYI家族的上部有一个明显的黑色区块而其他两个家族没有。因此,可以将恶意软件家族分类的问题转化为图像分类问题。

图1 恶意软件图像生成过程Fig.1 Malware image generation process

图2 恶意软件家族样本Fig.2 Malware family samples

2)恶意软件图像归一化。为了数据处理的方便,也为了加快程序运行时的收敛速度,需要利用归一化将灰度图调整为统一的尺寸,本文统一调整尺寸为80×80像素。归一化不仅有利于提高网络训练速度还降低了图像在降维过程中丢失一些重要的特征的风险。在归一化的过程中,恶意软件图像的纹理特征几乎没有变化。如图3(a)所示,Lolyda.AT家族的一个变体的原始尺寸是64×385像素,经过归一化为80×80像素后,可以看到,其特征没有因此而丢掉。又如图3(b)所示,Adialer.C家族的一个变体的原始尺寸是512×410像素,经过归一化之后,其特征仍然保留。

图3 恶意软件图像归一化Fig.3 Malware image normalization

2.2 模型训练

模型训练过程如图4所示。在训练集上随机抽取任务,在卷积神经网络(CNN)上进行特征提取,通过基于参数优化的元学习训练模型,经过两次梯度下降,使模型学到初始化参数。同时在训练的过程中,根据分类样本准确率选择困难样本,将困难样本和下一轮选择的任务组成新的任务一起训练模型,直到损失函数收敛,结束模型训练,输出分类结果、模型以及学习到的初始参数。

图4 模型训练过程Fig.4 Model training process

1)基于参数优化的元学习训练。将恶意软件数据集按照比例划分为训练集Dmetatrain和测试集Dmetatest,分别用于元学习训练和元测试。在元学习训练阶段,首先,初始化模型M及其参数ϕ;然后,从Dmetatrain中随机取出一批任务进行训练。其中,对于每个任务,从已有的类别中抽取N个类,每个类随机抽取K个样本(共N×K个样本)组成支持集Dsupport,再从这N个类别剩余的样本中随机抽取一批样本作为查询集Dquery。这样用少量样本构建分类任务称为N-wayK-shot分类问题[25]。在每个任务的Dsupport上计算参数的梯度并保存更新后参数。本文使用交叉熵损失函数来计算,计算公式如下

其中,xi和yi是从任务中取出的样本⁃标签对,fϕ是初始化参数为ϕ的神经网络模型;lTi是交叉熵损失函数,θ′i是第i个任务Dsupport的恶意软件样本计算的一次参数更新,α为学习率,∇lTtr(fϕ(x,y))是损失函数对初始化参数的梯度。以第一次更新参数θ′i为初始参数,使用Dquery中的恶意软件样本学习模型参数,使损失函数之和最小;以第一次更新参数θ′i为模型参数,以任务中恶意软件样本的损失函数总和为目标函数,优化模型参数。模型参数更新方法为

其中,β为学习率,Ti为第i个任务为Dquery上的任务对初始参数的梯度,ϕ为模型经过训练更新后的参数。

2)困难样本挖掘。在恶意软件家族分类时,存在一些分类准确率较低的家族样本,所以在训练模型时,结合困难样本挖掘的方法有目的地选择训练样本以提高模型的分类准确率,如图4所示。在第一次梯度下降后,根据准确率这一指标来判断困难类,本文选择当前任务中准确率最低的类作为困难类。当一批任务训练完后,得到这批任务中的所有困难类,在进行下一轮训练时,就从这些类中选取样本。这里需要注意的是:①在选择困难类时,本文根据当前任务中准确率的高低进行排序来选择困难类;②在选择困难样本时,本文选择对困难类进行重新取样而不是选择当前任务中所取的样本。

2.3 模型测试

模型微调和测试的过程如图5所示,与训练的过程大致相同。模型微调和测试不同的有以下几个方面:1)测试不再使用随机化的初始参数,而是使用在模型训练时学到的初始参数ϕ的基础上进行迭代;2)在测试集Dmetatest上随机抽取多个任务,任务中的支持集Dsupport用来微调模型,查询集Dquery用来测试模型;3)在模型微调的过程中,不再使用困难样本挖掘;4)对最后的测试结果进行平均,从而避免极端情况。

图5 模型微调和测试过程Fig.5 Process of model fine-tuning and testing

3 实验结果及分析

3.1 数据集

使用两个基准恶意数据集Malimg数据集和BIG-2015数据集来评价本文的方法。Malimg数据集中包括25个恶意家族共9 339个恶意样本,BIG-2015包括9个恶意家族共21 741个样本,详细信息如表1和表2所示。在进行样本分类的时候,本文采用灰度图作为网络的输入,将BIG-2015数据集中十六进制PE文件(portable executable)转化为灰度图,并且做归一化处理。Malimg数据集原始文件提供的就是灰度图,所以只需进行归一化处理即可。在Malimg数据集上使用25个类进行训练和测试,将数据集中的2/3用来训练,1/3用来测试。元学习训练时,每次随机在每类取300个样本,如果该类没有300个样本,则用数据增强方法补足样本。在BIG-2015数据集上进行实验时采取和Malimg数据集相同的取样操作。

表1 Malimg数据集Table 1 Malimg dataset

表2 BIG-2015数据集Table 2 BIG-2015 dataset

3.2 网络结构

本文使用浅层神经网络作为目标模型,如图6所示。该模型只包含四个卷积块和一个线性层,其中特征提取器使用四个卷积块,每个卷积块包括一个卷积层,一个BatchNorm层和一个ReLU非线性层,每一块的卷积核个数逐渐增大,每个卷积块之后是一个2×2的最大池化层(Max Pooling),用来缩小模型的尺寸,提高计算速度和所提取特征的鲁棒性。分类器是一个Linear层。从模型的深度来讲,本文使用的结构只有四个卷积块和一个Linear层;从模型的宽度来讲,每个卷积块卷积核的个数依次为6,16,32,32。所以,从模型的设计上来说模型计算量少。本文使用交叉熵损失函数(cross entropy loss),优化器使用Adam优化器,学习率为0.000 1,使用Pytorch框架。

图6 神经网络结构Fig.6 Neural network structure

3.3 评价指标

本文使用准确率(Accuracy)、精确率(Preci⁃sion)、召回率(Recall)和F1值(F1-score)4个评价指标去评价分类器的性能。这些评价指标已被广泛应用在各个研究领域。这4个指标的详细计算公式如下

其中,TP指本来是正样本,分类成正样本,分类正确个数;TN指本来是负样本,分类成负样本,分类正确个数;FP指本来是负样本,被分类成正样本,分类错误个数;FN指本来是正样本,被分类成负样本,分类错误个数。

3.4 元学习对分类准确率的影响

元学习通过在多个任务上训练模型,可使模型有一个表现较好的初始化参数。当新任务再进入模型时,只需简单微调就可使模型更好地适应现有任务。我们通过比较以元学习的方式(随机抽取任务)训练模型和普通深度学习的方式(随机抽取样本)训练模型来分析元学习对分类效果的影响。在Malimg数据集上进行以下的实验:

1)5-way 1-shot分类(简称5分类)。每类随机取1个样本,有5类,则支持集有5个样本;查询集随机取15个样本,则共有75个样本。这样一个任务共有80个样本,每次取16个任务进行训练和测试。

2)20-way 1-shot分类(简称20分类)。每类随机取1个样本,有20类,则支持集有20个样本。每类随机取15个样本,则查询集有300个样本,一个任务共有320个样本,每次取8个任务进行训练和测试。

3)25-way 5-shot分类(简称25分类)。每类随机取5个样本,有25类,则支持集有125个样本;每类随机取15个样本,则查询集共有375个样本,一个任务共有500个样本,每次取8个任务进行训练和测试。

在BIG-2015数据集上进行了9-way 5-shot分类(简称9分类)。每类随机取5个样本,有9类,则支持集有45个样本,每类随机取10个样本,则查询集有90个样本,一个任务有135个样本,每次随机取15个任务进行模型的训练和测试。

图7所示(a)~(c)分别是在Malimg数据集上进5分类、20分类和25分类的实验结果。其中,CNN是指只使用卷积神经网络进行分类的结果,CNN+Meta Learning是指在卷积神经网络上使用元学习训练模型。在没有使用元学习的情况下,5分类平均分类准确率为0.966 7,20分类的平均分类准确率为0.972 3,25分类的平均分类准确率为0.874 4。从图7中的(a)~(c)可看出,CNN+Meta Learning的分类准确率更高。可见,利用元学习的方法能够提高模型的分类性能。在BIG-2015数据集上进行同样实验,取样的过程和Malimg数据集一样,实验结果如图7(d)(e)所示。进行多次试验,取模型的平均准确率,5分类的平均准确率为0.962 7,9分类的平均准确率为0.966 1,CNN+Meta Learning模型的分类性能也高于CNN。这是因为元学习是基于任务进行模型训练,通过在多个任务上学习找到一个较好的初始值,然后在该初始值的基础上,再通过少量任务的训练,使模型具有更好的效果。

图7 两种数据集上元学习对分类准确率的影响Fig.7 Effect of meta-learning on classification accuracy on two dataset

3.5 困难样本对分类准确率的影响

3.4节只使用元学习进行模型训练,元训练批次是由随机抽样的任务组成的。当在元学习基础上结合困难样本挖掘方法训练模型时,任务由分类准确率低的样本和随机抽样的样本共同构成。由于5分类和20分类的准确率已经非常高,利用困难样本挖掘的方法对分类准确率的影响不明显,所以这里重点讨论该方法对Malimg数据集上25分类和BIG-2015数据集上9分类的影响。实验结果如图8所示,其中Meta Learning是指只使用元学习训练模型,CL+Meta Learning是指在卷积神经网络上既使用元学习又使用困难样本训练模型。图8(a)是在BIG-2015数据集上9分类的准确率;图8(b)是在Malimg数据集上进行25分类的准确率。可以看到在这两种数据集上,CL+Meta Learning都比Meta Learning的分类性能好。

图8 困难样本的选择对模型分类结果的影响Fig.8 Effect of the selection of hard samples on the classification results of the model

图9是在BIG-2015数据集上进行5类、9类,在Malimg数据集上进行5类、20类、25类分类时的损失。可以看到随着训练epoch的增加损失值逐渐减小并趋于稳定。

图9 两个数据集上进行不同分类时的损失Fig.9 The loss for different classifications on two datasets

3.6 和其他恶意软件分类方法的比较

为了验证方法的有效性,将本文提出的方法与传统的机器学习方法[9,23]以及最近提出的基于图像的深度学习方法[13,22,26]进行比较,结果如表3所示。

从表3中可以看到,本文提出的方法分类准确率和分类精准率均高于文献已有值。Nataraj等[9]将二进制文转化为灰度图,然后通过机器学习方法提取GIST特征,最后使用KNN进行分类。Rafique等[23]提出利用不同的CNN去提取不同的特征空间特征,然后构建一个混合的特征空间,再用支持向量机进行分类。这些传统的机器学习方法大多数都是基于纹理相似度来提取特征,而提取恶意图像复杂的纹理特征需要耗费大量的计算量。所以在大数据集的处理上,这种方法需要耗费大量的时间。Cui等[22]用BAT(蝙蝠)算法解决数据不平衡的问题来提高模型的性能,但该算法需要大量时间来生成样本。Vasan等[13]提出IMCFN微调CNN去分类恶意软件并提出使用数据增强解决数据不平衡问题。Finn等[26]将预训练好的模型进行微调,并使用下采样的方法解决数据不平衡问题,这种方法会造成大量数据的浪费和丢失。相比以上方法,本文提出的基于参数优化元学习恶意软件检测方法,通过抽取不同的任务训练模型使其能够学习到较好的初始参数,并且在该参数的基础上,新任务只需经过少量的迭代就可以快速的适应。不同于文献[9,13,22,23,26]是基于大量的样本来训练模型,本文是基于少量样本多任务的基础上去训练模型,可以避免数据不平衡问题。同时结合困难样本挖掘方法来再训练模型,所以浅层网络就可得到很高的准确度。

表3 不同分类方法的比较Table 3 Comparison of different classification methods

4 结语

为有效减小恶意软件及其变种对已有网络应用的破坏并解决因小样本的存在导致分类准确性低的问题,本文提出了一个基于参数优化元学习和困难样本挖掘的恶意软件分类方法。首先,使用了浅层神经网络模型,其结构简单,计算成本少,而且不需要任何的特征工程知识;其次,训练网络模型,采用的是基于元学习的方式,通过多个任务训练模型;同时,对于分类准确率低的类,提出使用困难样本挖掘的方法重新采样再训练网络模型;最后,在两个恶意软件数据集上进行大量的实验。结果显示本文提出的恶意软件家族分类方法,优于已有算法。后续工作中,将在改进元学习方法的同时改进神经网络的结构,提高模型的分类性能。

猜你喜欢
集上准确率样本
关于短文本匹配的泛化性和迁移性的研究分析
乳腺超声检查诊断乳腺肿瘤的特异度及准确率分析
多层螺旋CT技术诊断急性阑尾炎的效果及准确率分析
不同序列磁共振成像诊断脊柱损伤的临床准确率比较探讨
颈椎病患者使用X线平片和CT影像诊断的临床准确率比照观察
规划·样本
人大专题询问之“方城样本”
随机微分方程的样本Lyapunov二次型估计
师如明灯,清凉温润
几道导数题引发的解题思考