杨春雨,徐 洋,张思聪,李小剑
贵州师范大学贵州省信息与计算科学重点实验室,贵州 贵阳 550001
近年来,互联网的发展极大地推动了国家和社会发展,但也产生了许多网络安全问题,各种形式的网络犯罪频频发生,新型网络攻击方式和恶意软件呈指数级增长。根据国家互联网应急中心发布的《2020年中国互联网网络安全报告》[1]可知,2020年捕获的恶意程序总量超过4 200万个,涉及约34.8万个恶意程序家族,境内被攻击的IP数约占我国IP总数的14.2%,约有531万台主机被境外的5.2万个左右恶意程序服务器控制。恶意软件给国家和社会带来了极大的危害。
传统的恶意软件识别方法是通过签名来识别恶意软件的。但是该方法完全依赖于数据库的容量,无法应对新型恶意软件。新型恶意软件通过简单的冗余代码插入,就能逃避传统检测技术[2,3]。机器学习和深度学习的出现很好地解决了这类问题。这两种技术能够自动学习已有特征中存在的模式,利用模式对未知特征进行预测。因此,国内外许多研究专注于提高机器学习或者深度学习的模型性能和特征的有效性。
恶意软件分析方法主要可以分为静态方法、动态方法、动静混合方法。近年来,对恶意软件的静态分析取得了很多成果。研究者们通过数据挖掘技术发现了恶意软件的许多静态特征,如PE(porta⁃ble executable)特征,反编译文件中包含的段和Opcode特征,恶意软件的字节特征和灰度图像特征等。其中,恶意软件的灰度图像特征是一种静态特征,自2011年提出后被广泛应用到恶意软件的各种研究中。2018年,Fu等[4]将PE文件中的段信息结合原始字节流生成恶意软件的RGB图像,然后提取RGB图像的灰阶共生矩阵(gray-level co-occur⁃rence matrix)和颜色矩(color moments)作为恶意软件的全局纹理特征,再融合恶意软件的局部特征使用机器学习算法对恶意软件进行分类。2019年,任卓君等[5]提取恶意软件字节Bigram,并将字节Big⁃ram转化成灰度图像,使用字节Bigram图像对Kag⁃gle恶意软件数据集的分类准确率达到98.45%。孙博文等[6]提取恶意软件原始字节流、字符信息和样本的PE信息,分别填充图像的3个通道生成恶意软件的RGB图像。王博等[7]提取恶意软件原始字节流,将原始字节流生成恶意软件的RGB图像,对Malimg恶意软件数据集进行分类,准确率达到96.16%。
在以上研究中,Fu等[4]的方法存在不能直接对RGB图像进行分类、需要额外时间用于图像特征提取、PE文件中分段和合并复杂等问题。任卓君等[5]、孙博文等[6]、王博等[7]的分类方法存在模型参数量大、训练时间长、未考虑到调参开销等问题,且文献[5,7]使用的是单一类型特征构成的恶意软件三通道图像,易受到混淆技术的影响。
针对上述问题,本文将恶意软件反编译生成Lst反编译文件,收集恶意软件字节Bigram,并对传统恶意软件图像表示方法进行改进,将恶意软件、字节Bigram、Lst文件使用Bin2Pixel算法生成3种灰度图像,组合成三通道彩色图像进行分类,使彩色图像相比单通道图像包含更多的信息。在训练阶段,使用EfficientNet模型结合迁移学习中的微调技术对恶意软件图像进行训练,通过微调,大幅加快EfficientNet的收敛速度,提高EfficientNet对本文恶意软件数据集的泛化能力。
本文对传统的恶意软件图像化进行了改进。首先生成恶意软件、字节Bigram、Lst文件3种不同类型的恶意软件灰度图像,再将3种灰度图像合成恶意软件的三通道彩色图像,提高恶意软件图像包含的信息量。在训练阶段引入微调技术,再进行训练,达到缩短模型收敛时间,提高分类准确率的效果。
图1所示为三通道图像的生成过程。首先提取恶意软件的字节流,然后收集字节Bigram并使用下列公式
图1 三通道图像生成过程Fig.1 Three-channel image generation process
标准化到[0,255]范围。其中,X是原始字节Bigram,Xnew是标准化后的字节Bigram。虽然单纯的字节Bigram并不表达特殊的意思,但是根据同一恶意软件家族具有代码和数据相似性的特点可知,从同一家族提取的字节Bigram也应该存在一定的相似性。
然后,使用IDA_Pro反编译原始恶意软件后生成Lst文件。Lst文件包含了每一行汇编代码的段信息。Lst文件的内容如图2所示,每一行内容显示了段、地址、汇编代码、寄存器、数据以及关键字等信息。其中,.bss段包含的是初始化为0的变量或者未初始化的变量,.text和.code是代码段,.rsrc是资源数据段,.tls是线程本地存储段;push是数据操作汇编指令,inc是算数/逻辑汇编指令,eax是通用寄存器。
图2 Lst文件内容Fig.2 Content of Lst file
再将恶意软件、字节Bigram、Lst文件使用Bin2Pixel算法转化成灰度图像。Bin2Pixel算法是Nataraj等[8]在2011年提出来的一种将恶意软件图像化的算法。该算法能够根据恶意软件的大小将其转化成不同尺寸的灰度图像,其伪代码如Algorithm1所示,其过程是将目标文件以二进制形式打开,以8位二进制数为一个无符号整数作为一个像素点,像素点值的范围是[0,255]。样本参考width_Dict的key设定图像初始宽度,图像高度根据样本大小自适应,将样本转化成灰度图。最后,将3种类型的灰度图像统一缩放到224×224像素。
?
恶意软件、字节Bigram、Lst文件灰度图像如图3~5所示。图3(a)中virut家族灰度图像有比较清晰的层次结构,图3(b)中virlock家族灰度图像则是偏向于马赛克形状的结构。图4中字节Bigram灰度图像大多数区域呈现出黑色。图4(a)中virut家族的灰度图像纹理主要是分布比较散的白色和灰色点,图4(b)中virlock家族灰度图像的纹理是在右下角有十字交叉的两根白线。分析图4的灰度图像纹理较少原因,初步判断是由于不同字节Bigram特征相差较大,使得将字节Bigram标准化到[0,255]范围时大多数值很小,导致字节Bigram灰度图像的大多数区域呈现黑色。图5(a)中virut家族灰度图像有明显的竖状黑白相间纹理,图5(b)中virlock家族灰度图像有波浪线形状的黑白相间纹理。图3恶意软件的灰度图像具有更好的结构特征,是因为恶意软件的二进制流更能够体现样本的原始结构,而图5中Lst文件灰度图像包含大量格式化的数据,导致灰度图像由一些重复的纹理构成。
图3 恶意软件灰度图像Fig.3 Grayscale image of malware
图4 恶意软件字节Bigram灰度图像Fig.4 Grayscale image of malware bytes bigram
图5 恶意软件Lst文件灰度图像Fig.5 Grayscale image of malware Lst file
本文属于静态分析,使用单一类型特征往往容易受到混淆和攻击,通常需要结合多特征进行分类。因此,将图3~5中3种灰度图像合并,使用恶意软件灰度图像填充红色通道,字节Bigram灰度图像填充绿色通道,Lst文件灰度图像填充蓝色通道,组成三通道图像,效果如图6所示。其中,红色通道包含恶意软件灰度图像的纹理,绿色通道包含字节Bigram灰度图像的纹理,蓝色通道包含Lst文件灰度图像的纹理。
图6 恶意软件三通道图像Fig.6 Malware three-channel image
图7所示为本文模型的训练过程,首先从恶意软件、Lst文件、字节Bigram灰度图像和彩色图像中选择一个作为恶意软件数据集,对EfficientNet模型进行预训练或者微调训练,得到恶意软件图像分类模型。微调时,EfficientNet模型加载其在ImageNet数据集已经训练好的权重,再进行训练。微调是迁移学习实现的一种方式,该方式使模型首先加载在其他数据集上训练好的权重,再进行训练,能够帮助模型在较短周期内适应新的数据[9,10],使模型能够输出理想的结果。获得权重的方式通常有两种,一种是模型在ImageNet数据集上采用Noisy Student训练[11]得到,另一种方式是在该数据上通过预训练得到。微调比预训练具有在最少的Epoch内收敛、对小型数据集非常友好的优点。
图7 模型的训练过程Fig.7 Training process of the model
EfficientNet[12]是2019年由Google提出来的新型神经网络模型,依据网络规模可以分为B0~B7版本(以下用B0~B7代表EfficientNet的7个版本)。该模型在遥感、生物、医学方面都得到了很好的应用[13~15]。
本文运用迁移学习中的微调技术对Efficient⁃Net模型进行改造,将其全连接层的输出改为20,表示恶意软件数据集家族种类数,输入图像分辨率固定为224×224×3像素。改造后分类效果最好的EfficientNetB0模型结构如图8所示。其结构主要由MBConv[16](mobile inverted bottleneck conv)组成,MBConv后面的数字代表每个模块一开始对输入卷积时的图像通道扩张倍数以及Depthwise的卷积核大小。图像经过一系列的MBConv、卷积、池化操作,最后输出图像属于每一类的概率。
图8 改造后的EfficientNetB0模型的结构Fig.8 Structure of the modified EfficientNetB0 model
本文实验数据集下载自Virustotal,主要包含2019年收集的32位Windows平台下扩展名为EXE的恶意软件样本和Virustotal对样本的Json报告。恶意软件的名字是其Sha256值,共计35 552个。采用AVClass工具结合Json报告为恶意软件标记。筛选出20个恶意软件家族的16 439个样本和Json报告作为本文的数据集。恶意软件的分布如图9所示。
图9 恶意软件家族分布Fig.9 Malware family distribution
由于B4以上模型规模,更大分类性能并未变得更好,且随着这些模型的深度和宽度递增,训练的计算、内存、时间开销递增,因此选取B0、B1、B2、B3四种深度学习模型。训练集和测试集的比例为7∶3,设置stratify参数为true,使测试集和训练集的各类数据之间的比例保持不变,设Epoch为20。实验电脑的配置:CPU为i710700K,GPU为2080Ti。
恶意软件、字节Bigram、Lst文件灰度图像和彩色图像在实验结果讨论中分别用Ori、Bigram、Lst、Fusion表示。EfficientNet的B0版本在Lst上运行的模型命名为B0-lst,如使用ImageNet数据集预训练的权重,简称ImageNet微调,模型命名为B0-ima⁃genetlst,其他命名类似。
如表1所示,在预训练下,模型使用随机初始化的权重进行训练,B0模型使用Lst数据,准确率、F1值、召回率、精确率均达到最高值。出现这种单通道图像分类效果优于三通道图像的情况,推断是由于在预训练下,模型在较短Epoch内不能较好地学习字节Bigram图像特征和三通道所包含的三倍特征所造成的。
表1 3种训练方式、4种数据、4种模型的结果Table 1 Results of 3 types of tr aining methods,4 types of data,4 types of model%
在ImageNet微调方式下,B0模型使用Fusion数据,准确率、F1值、精确率均达到最高值;B1模型使用Ori数据达到最高召回率96.81%。B0模型最高准确率97.22%相较预训练的94.36%提升了2.86%。这说明从ImageNet数据集学习的知识能够很好地迁移并应用到本文的数据集,且通过微调模型能够使训练过程快速收敛。
在Noisy Student微调方式下,B3模型使用Fusion数据,准确率、F1值、召回率、精确率均达到最高值。虽然Noisy Student微调的最高准确率97.20%相比ImageNet微调97.22%略低,模型B3相比ImageNet微调模型B0规模大,计算、内存、时间开销也大,但是前者召回率和F1值比ImageNet微调略高,且在Noisy Student微调方式下使用Lst数据和Bigram数据的4种指标均高于ImageNet微调。这从另一个角度说明,虽然Noisy Student微调没有ImageNet微调准确率好,但是Noisy Student微调在ImageNet微调效果不好的数据集上鲁棒性更好。因此,Noisy Student微调使模型具有更强的鲁棒性以及对部分数据具有更强的泛化能力。
综上所述,3种训练方式下最好的3种模型是B0-lst、B0-imagenetfusion、B3-studentfusion。
将B0-lst、B0-imagenetfusion、B3-studentfusion模型分别用于20种恶意家族软件的分类,精确率、召回率、F1值指标结果如图10所示。图10中的横坐标对应20种恶意软件,从0开始到19。可以看出,对于每一种指标,整体来看B0-imagenetfusion和B3-studentfusion两种微调曲线位于预训练曲线B0-lst的上方。B0-imagenetfusion模型分类的精确率和召回率达到100%的家族数均为7个,F1值达到100%的家族数为5个,而B3-studentfusion模型分类的精确率、召回率、F1值达到100%的分别为5个、7个、3个;B0-imagenetfusion和B3-studentfusion模型的训练时间分别是1 628 s和3 248 s,B0-ima⁃genetfusion节省了近一半的时间;且B3-studentfu⁃sion模型的参数量大于B0-imagenetfusion模型。所以,对20种恶意家族软件分类取得最好效果的是B0-imagenetfusion模型。上述结果还说明,微调能够很好地利用已有的图像分类“知识”,使模型快速适应新的图像数据集,达到最好的效果。
图10 3种模型的精确率、召回率、F1值Fig.10 Precision,recall,F1 value of the three models
图11是3个模型在20个Epoch内的训练准确率。可以看出,在第0 Epoch的时候B0-imagenetfu⁃sion和B3-studentfusion两种微调模型的训练准确率分别达到了87.54%和84.22%,大幅高于预训练模型B0-lst准确率53.90%。图12则是训练的损失曲线,在第0 Epoch的时候B0-imagenetfusion和B3-studentfusion两种微调模型的训练损失分别为0.432 3和0.567 6,低于预训练的2.105 1。可以看出,20个Epoch中微调的准确率曲线一直位于预训练之上,而微调的损失曲线一直位于预训练之下。从图11和图12还可以看出微调曲线在3个Epoch后都趋于平滑,而预训练则至少在5个Epoch后曲线才趋于平滑。因此,3种模型中训练效果最好的是B0-imagenetfusion模型。
图11 3种模型的训练准确率Fig.11 T raining accuracy of the three models
图12 3种模型的训练损失Fig.12 Training loss of the three models
由上述实验结果可知准确率最高的是使用ImageNet微调的B0-imagenetfusion达到的97.22%,因此在对比微调效果的时候选取其他模型使用ImageNet微调进行对比。表2是B0-imagenetfusion和B0-fusion与其他常用6种模型在ImageNet微调和预训练的对比。在预训练方式下,分类效果最好是Xception而非B0-fusion,Xception的准确率、F1值、召回率、精确率均达到最高。在ImageNet微调方式下,B0-imagenetfusion、ResNet50[17]、ResNet152[17]、Xception[18]、InceptionV 3[19]、MobileNet[20]准确率较预训练分别提高了3.83%、2.15%、3.89%、0.22%、1.63%、0.59%,增幅最大的是ResNet152(3.89%)。在预训练中准确率最低的B0-fusion通过ImageNet微调取得了最高的准确率。但在VGG16模型[21]上出现了反常的情况,微调后它的准确率仅为14.96%,说明该模型不适合在恶意软件数据上进行微调。精确率最高的模型是B0-imagenetfusion,达到96.46%,召回率和F1值最高的模型是ResNet152,分别达到97.10%和96.59%;除VGG16以外的所有模型的准确率均大于等于96.80%,最高的是B0-imagenetfusion的97.22%。
表2 在Fusion上不同模型对比Table 2 Comparison of different models on fusion%
综上所述,在ImageNet微调方式下,B0-image⁃netfusion达到了最好的分类效果。
表3是B0-imagenetfusion和6种模型的训练时间、参数量、浮点运算数(floating point operations,FLOPs)的对比。
表3 不同模型的性能对比Table 3 Perfor mance comparison of differ ent models
参数量是模型尺寸的一种体现,可以看出B0-imagenetfusion的参数量是4.06 M个,在7种模型中数量较少,而参数量最多的是VGG16,达到了134.34 M个。在FLOPs上,B0-imagenetfusion在7种模型中最低,为702.64 M次,最高值出现在VGG16模型,为30 938.62 M次。在训练时间上,B0-imagenetfusion的训练时间高于MobileNet在预训练方式下最低的976 s,但是B0-imagenetfusion的最高准确率比MobileNet高出0.34%(表2)。
表4是本文提取的RGB图像与文献[4]、[7]中的RGB图像分类效果的对比。实验显示,在预训练方式下Fusion和Bytes的准确率均达到93.39%,Fusion的F1值、召回率、精确率均达到最高值;在ImageNet微调方式下,3种图像的分类准确率分别得到了3.83%、5.10%,3.75%的提升,且Fusion的准确率和精确率达到了最高的97.22%和96.46%。Bytes在ImageNet微调方式下的F1值和召回率分别达到最高的96.58%、97.00%。结果表明,本文提取图像的方法是有效的,ImageNet微调对恶意软件图像分类有提升作用。
表4 不同RGB图像对比Table 4 Compar ison of different RGB images%
本文针对传统恶意软件采用图像分类方法准确率不高、抗混淆能力弱、模型训练收敛慢的缺点,提出对恶意软件图像的改进方法。首先生成恶意软件、字节Bigram、Lst文件3种不同类型的灰度图像,再使用3种不同类型的单通道灰度图像分别填充图像的红、绿、蓝通道生成新的恶意软件彩色图像。然后,使用迁移学习中的微调技术通过已有的ImageNet数据集分类权重加快EfficientNet在恶意软件图像上训练的收敛速度,加强其恶意软件分类的泛化能力。实验结果显示,微调后的EfficientNet对20种恶意软件的三通道图像分类准确率达到97.22%,同时收敛速度加快,体现了微调和恶意软件彩色图像的有效性。
本文在实验中发现,效果最好的B0-imagenet⁃fusion模型对hematite家族恶意软件的精确率只有74.19%,召回率只有89.15%,F1值只有80.99%。我们分析造成这种结果的原因可能为该家族的变种数太多,而本文对该家族数据样本的采集数量不足,导致模型不能学习到该家族全部变种的特征。未来会收集更多该家族样本验证我们的推断。虽然用静态特征进行分析本文已取得了很好的分类效果,但静态特征并不能完全体现出恶意软件的真实意图和全部行为,未来将采用动静结合的分类方法,发挥静态方法和动态方法的优点,把恶意软件彩色图像与动态特征融合,进一步提升整体分类效果。