2. 北京邮电大学 网络空间安全学院, 北京 100876
2. School of Cyberspace Security, Beijing University of Posts and Telecommunications, Beijing 100876, China
随着互联网技术的持续发展,互联网经济伴随着新兴互联网产业蓬勃发展,但与此同时其中的信息安全问题也愈加严重。当今互联网产业与用户的数据、隐私、财产紧密相关,因此其中的安全威胁问题亟待解决。互联网中的安全问题绝大多数由恶意代码引起,近年来勒索、窃密、挖矿病毒更是十分猖獗,在这种背景下对恶意代码进行精确检测与细致分类显得尤为重要。
自20世纪90年代起,便有针对恶意代码的研究,从早期的规则匹配、特征码提取,到中期的动静态检测、启发式检测,再到目前的机器学习、深度学习[1-2]、多引擎联合学习,恶意代码检测技术一直在不断发展。然而恶意代码对抗技术也在不断升级,恶意代码通过加壳、混淆、虚拟机保护等技术来对抗各种查杀技术,近年来更是开始引入前沿算法进行恶意对抗,使用强化学习、对抗学习[3]的方式对静态特征进行混淆,以此绕过基于算法引擎的检测技术。针对此现状,本文提出了一种基于代码图像化的恶意代码检测方法,对传统恶意代码图像化方法进行了三维增强的改进,并利用带有空间金字塔池化结构的VGG16算法[4]进行训练和检测,同时使用多引擎标注进行归一化样本标签表示,这种方法节约了大量特征提取与选择的时间,同时对加壳、混淆等对抗技术有着很好的效果,可以对新型恶意代码进行有效的分类和标注。
1 相关工作 1.1 恶意代码图像化恶意代码图像化是2011年Nataraj等[5]提出的一种恶意代码可视化表征方法。这种方法在处理恶意代码时无需解析PE文件格式、无需动态执行恶意代码、同时具有较好的对抗能力,在学术领域被广为研究。由于其检测机制的不同,在多个测试中都表现出了良好的独立检测率,也逐渐被工业界作为一种新型检测引擎集成在杀毒引擎集群中。恶意代码图像化的基本思路是将恶意代码每2个十六进制数据转换为一个0~255的像素值,转换后根据样本大小对图像的宽度进行限制,形成一幅灰度图像。接下来研究者采用通用搜索树(generalized search trees, GIST)算法对代码图像进行特征提取,并使用支持向量机(support vector machine, SVM)等算法进行分类。
恶意代码图像化一经提出便引起了学术界的轰动,后续的研究在此基础上做出了很多改进。2014年韩晓光等[6]在恶意代码图像纹理聚类领域做出了国内的开创性研究。2016年任卓君等[7]提出了一种改进的恶意代码可视化方法,将代码段局部熵转换成熵像素图,从视觉角度直观呈现恶意代码内部特征,并通过降维方法提高相似度比对和分类的效率。张晨斌等[8]针对安卓恶意代码改进了灰度化方案,使用包含GIST和Tamura等在内的4种特征提取方法,并使用Caffe编写了5种分类算法进行实验。这些研究初步缓解了以往研究中静态分析方法难以解决样本加壳、混淆问题的弊端。随着深度学习的发展,有研究者使用该方法对恶意代码图像进行分类,2018年Cui等[9]使用卷积神经网络,对恶意代码灰度化图像进行了大小裁剪,使用bat算法来平衡不同家族的数量,并使用卷积神经网络进行分类。2017年Rezende等[10]继续在Malimg数据上进行了深入研究,使用迁移学习技术,将在ImageNet数据集上训练好的Resnet神经网络迁移到恶意代码图像中,将原数据集准确率大大提升。
基于恶意代码图像的检测方法是一种端到端的学习方法,它极大地减轻了恶意代码检测过程中特征工程的开销。从输入端输入恶意代码到输出端得到一个预测结果,中间无需人工选取特征及筛选特征的过程,可以直接将结果误差放入神经网络模型中的每一层传递(反向传播),直到模型收敛或达到预期的效果结束。恶意代码图像化的方案经过了近10年的研究已经被证明是一种十分有效的方案,在学术界和工业界都得到了推广和应用。
1.2 恶意代码标注体系恶意代码功能复杂、种类多样,对恶意代码进行有效的准确标注一直是恶意代码领域内的难题。但同时有效地标注会准确区分不同家族、变种间的细微区别,显著地提升杀毒引擎的检测准确率。将恶意代码标记为一个已知的家族对多个安全场景都十分重要,例如发现新的威胁、选择免杀机制、判定样本来源与样本谱系。早在1991年的一次计算机反病毒研究组织会议上,研究人员们就制订了一套计算机病毒的命名规范,然而随着安全厂商的各自发展以及不断出现的新功能、新概念的病毒,导致了多种病毒命名规则的出现。
在学术领域中,以往的研究多数使用单一检测引擎对恶意代码进行标注,但由于近年来恶意代码对抗性的增强,单个检测引擎难以对所有恶意代码均表现出良好的检测率,这就需要借鉴多个引擎的查杀结果进行综合考虑。尽管如前文所述各个厂商对于恶意代码的描述和命名规则都不尽相同,多个杀毒引擎的结果难以统一,但恶意代码家族广义上的定义大致相同,具有相似行为和特定代码的恶意代码实际上具有相似的命名。
针对多个杀毒引擎命名结果进行进一步分析的研究并不多,2012年Perdisci等[11]曾提出一个自动化聚类的工具VAMO,将4种杀毒引擎的检测结果综合分析建立图关联,并选取最终的标签,但对于通用标识识别和别名检测没有进行处理。2016年Marcos等[12]设计了AVCLASS模型,并使用了更大量的样本解决了3个关键的难题:标签规范化、删除通用标记和别名检测。这些使用了复杂算法的研究在大规模样本上获得了良好的效果,本文则采用一种轻量级处理方式,对多种成熟的、商用的杀毒引擎进行分别标注,然后对检测结果的字段进行拆分加权处理,利用CARO规范对其中固定关键字进行提取,最后综合所有的引擎结果给出一个最能代表这个样本的命名结果。
2 方案设计本文以恶意代码检测与分类为研究内容,使用恶意代码图像化的方式,并使用深度神经网络算法对恶意代码进行检测,整体流程如图 1所示。
2.1 图像化增强方案
传统恶意代码图像化方案采用的数据本质上只有二进制原始数据,并没有利用PE文件的结构信息,然而简单地将PE文件结构信息追加到灰度图像末尾不能充分体现恶意代码的结构特征,由于二进制数据和PE结构存在一一映射的关系,本文考虑将灰度图像扩充为三维的彩色图像,在二进制数据同一位置利用PE文件结构信息和可见字符信息对恶意代码图像进行增强,具体描述如下。
本文将恶意代码图像从灰度图像增强为三维RGB彩色图像,在样本图像化过程中,首先将原始二进制数据按照灰度化图像方法填充到R维;其次将二进制数据中的可见ASCII、不可见ASCII、非ASCII、00字符和FF字符分别用不同固定数值填充到G维数据中;最后将按照PE文件格式结构将代码的文件头、节表、代码段、资源段、入口点、调试信息,分别使用不同固定数值填充到B维(如表 1所示)。整个方案实施效果如图 2所示。
PE结构 | 填充数值 |
MSDOS_COLOR | 20 |
COFF_HEADER_COLOR | 30 |
OPTIONAL_HEADER_COLOR | 40 |
SECTION_TABLE_COLOR | 50 |
IMPORT_COLOR | 80 |
EXPORT_COLOR | 90 |
RSRC_COLOR | 100 |
DEBUG_COLOR | 110 |
RELOC_COLOR | 120 |
DELAY_IMPORT_COLOR | 130 |
ENTRY_POINT_COLOR | 180 |
SECTION_START_COLOR | 190 |
OVERLAY_COLOR | 200 |
ANOMALY_COLOR | 255 |
2.2 图像分类算法
传统恶意代码图像化研究中,研究者通过提取GIST等图像纹理特征,并使用SVM、随机森林等算法进行训练和预测。随着深度学习算法的不断发展,有大量面向图像分类的深度神经网络算法被提出,本文借鉴了图像领域中空间金字塔池化模型(SPP-Net)的网络结构[13],设计了针对经过增强后的恶意代码三维RGB图像进行分类训练的算法。
在图像处理领域,主流的神经网络算法均统一处理固定尺寸的图像,如LeNet数据集中的图像由32×32个像素点构成,ImageNet数据集中的图像由224×224个像素点构成。然而恶意代码实际大小分布不均,难以固定一个恶意代码图像的大小,将不同尺寸的图像直接输入到传统神经网络模型中将会出现无法训练的问题。有研究人员借鉴图像领域中对不同尺寸图像的处理方式,使用切割或缩放等形变处理将恶意代码图像转变为固定大小,但这些方式均会造成恶意代码数据缺失和代码结构的破坏。在经过了大量的调研和测试后,本文将SPP-Net引入恶意代码图像领域,SPP-Net是一种可以接收任意图像尺寸、输出长度固定的网络结构,可以在图像变形等情况下有较好的稳定性。使用SPP-Net在训练和测试的时候均可输入不同大小的恶意代码图像,同时不同尺寸的恶意代码图像也可以更好地防止过拟合现象的出现。
在神经网络模型中,卷积操作实际上对于图像大小没有要求,当输入图像大小为w×h、卷积核大小为a×b、步长为S、填充为p时,经过卷积核后都可以得到一个如式(1)所示的卷积后特征图。
$ F\left(\frac{w-a+2 \times p}{S}+1, \frac{h-b+2 \times p}{S}+1\right) $ | (1) |
但卷积后的全连接层则对神经元的数量进行了限制,训练出的参数必须要符合神经元的数量,不同尺寸的特征图是无法进行全连接层的反向传播训练的。而在图像进入卷积层之前就对图像进行缩放处理,也是为了卷积后的特征图数量和全连接的神经元数量相同。在SPP-Net中,将卷积层输出的特征数据进一步处理,通过多层次的特征提取,将最后一层拼凑成和神经元个数相符合的特征数,这样就可以不用缩放图像而获得相同数量的特征,这就是SPP-Net的初衷。如图 3所示,本文设计的恶意代码图像化算法流程以VGG16结构的前13层为上层模型提取图片特征,用SPP-Net归一化特征维度,最后输入全连接层计算概率。
本文前置神经网络使用了VGG16结构的前13层用于提取卷积特征,VGG16作为经典神经网络模型可以有效提取图像浅层特征。然后借鉴了SPP-Net的思想,即按照层次对卷积层输出的特征图分别进行处理,设置了4层池化特征提取的结构,大小分别是(1,2,3,6),整体结果如图 4所示。
在第1层中,对整个特征图进行最大池化,输出1维特征;在第2层中,先将特征图切分为4个小的特征图,再进行相应的最大池化,输出4维特征;第3和4层相应得到9维和36维特征,最终共得到50维特征,输入到全连接层中。在SPP-Net结构中,当其中一层金字塔参数为n时,卷积结果为a×a,则这层中的池化参数依据如下公式计算:
$ {\rm{ window size }} = {\mathop{\rm ceil}\nolimits} \left[ {\frac{a}{n}} \right], 向上取整, $ | (2) |
$ {\rm{stride}}\;{\rm{size = floor}}\left[ {\frac{a}{n}} \right], 向下取整, $ | (3) |
本文为了使切分的特征图对齐,经卷积输出的特征图设置为24×24,但其他大小的特征图同样可以使用式(2)和(3)计算,pyramid level为(1,2,3,6),4层SPP-Net之后输出的特征图大小为6×6+3×3+2×2+1×1=50,各个层中池化的参数如表 2所示。
3 实验 3.1 数据集
为了验证本文提出的恶意代码图像化检测方案的有效性,选取了10 000个近年来流行的Windows平台恶意代码,样本来源于北京邮电大学网络空间安全学院软件安全组恶意软件收集项目,选取种类包括GandCrab、Ramnit、Coinhive、XMRig、暗云、贪狼等100余类近年来流行的国内外新型恶意代码样本。
3.2 标注方法本文采用的标注方法建立在VirusTotal网站的检测结果之上,VirusTotal是一个提供对可疑文件进行安全检测的网站,它使用多种反病毒引擎令用户可以通过各杀毒引擎的检测,判断可疑文件是否为恶意代码。本文采用了VirusTotal提供的73个杀毒引擎检测结果,例如MD5为“8eba64aa0654b9cadae5e49851d9887a”的样本为目前肆虐的GandCrab5.2版本勒索病毒,其中55个引擎对该样本报毒,部分Virustotal引擎检测结果如表 3所示,仔细观察可以发现并非所有的引擎都能识别出Ransom、GandCrab 2个关键的分类信息,部分引擎只作出了可疑告警,采用单一引擎标注的方式将会对分类结果造成重大影响。本文将全部杀毒引擎返回的标注结果按各自分节符解析,对不同引擎的平台符号(如Win32、X86)、启发式检测符号(如Generic、ML、Malicious)、病毒大类(如Trojan、Backdoor)、病毒小类(如Ransom、Miner)、家族名(如GandCrab、XMRig)等进行加权统计排序,去掉不同厂商不一致的命名,最终得到归一化的标注结果。本例中经统计得到标注排序Trojan 26次、Win32 13次、Ransom 11次、Generic 10次、GandCrypt 10次、GandCrab 6次。按照平台名、病毒大类、病毒小类、家族名的顺序按统计顺序排序,示例样本最终保留为Win32.Trojan.Ransom.GandCrypt。
杀毒引擎 | 检测结果 |
Acronis | Suspicious |
AhnLab-V3 | Malware/Win32.Generic.C3261330 |
Alibaba | Ransom:Win32/GandCrypt.8f9f8426 |
ALYac | Trojan.Ransom.GandCrab |
Arcabit | Trojan.Generic.D1E83F84 |
Avast | Win32:Trojan-gen |
Avira | (no cloud) TR/AD.GandCrab.dggdh |
BitDefender | Trojan.GenericKD.31997828 |
Endgame | Malicious (high Confidence) |
eScan | Trojan.GenericKD.31997828 |
F-Secure | Trojan.TR/AD.GandCrab.dggdh |
FireEye | generic.mg.8eba64aa0654b9ca |
3.3 实验结果
由于本文中的恶意代码存在多个家族及标签,是一个典型的多分类任务,因此本文使用宏F1作为评价指标,具体计算公式如下:
$ {\mathop{\rm marco}\nolimits} P = \frac{1}{n}\sum\limits_{i = 1}^n {{P_i}} , $ | (4) |
$ {\mathop{\rm marco}\nolimits} R = \frac{1}{n}\sum\limits_{i = 1}^n {{R_i}} , $ | (5) |
$ {{\mathop{\rm marco}\nolimits} F_1} = \frac{{2 \times {\mathop{\rm macro}\nolimits} P \times {\mathop{\rm mar}\nolimits} {\rm{d}}R}}{{{\mathop{\rm marco}\nolimits} P + {\mathop{\rm macro}\nolimits} R}}. $ | (6) |
其中: Pi代表第i个家族的精确率,Ri代表第i个家族的召回率。
将本文采用的数据集使用节3.2中提出的标注方法进行家族标注。由于样本数量有限,为防止出现严重分布不均的训练偏差,故对少于10个样本的家族予以去除,共计得到39个家族。接下来将恶意代码进行灰度化图像处理,同时使用本文提出的图像增强方法对恶意代码数据集进行增强图像生成,使用Dahl等[14]提出的简单卷积神经网络进行训练,并使用10折交叉验证进行测试,宏F1曲线如图 5所示。
简单神经网络对RGB图像处理能力有限,本文尝试将图像截断固定至384×384个像素点大小的图像后使用VGG16网络进行分类,并与加入了SPP-Net的VGG16网络进行对比实验,此时原始图像可根据大小不同固定为384的倍数进行输入,结果如图 6所示,可见2种网络均比浅层神经网络有明显提高,使用了SPP-Net后可达到10折交叉验证下宏F1分数为0.886 7。实验结果显示,本文提出的增强方案与SPP-Net均可以有效提高恶意代码图像化方案的检测效果。
为了证明恶意样本图像化方案可以有效应对加壳和混淆等恶意软件对抗手段,将本文所述的图像化方法与传统静态分析方法进行了比较,在多数研究中使用静态分析方法均达到了93%以上的准确率,本文选择了本文作者2017年所提出的静态多特征提取方案[15]作为对比,使用其特征提取与选择算法并使用多算法融合的方式对本文的数据集进行了实验,并对实验结果进行了详细的统计,其中加壳信息使用了DIE和Exeinfo两款强大的查壳工具对本文采用的样本进行查壳,2种方案的检测结果如表 4所示。
病毒家族 | 数量 | 加壳样 本数量 |
文[15] 宏F1分数 |
本文方案 宏F1分数 |
XMRig | 994 | 55 | 0.913 2 | 0.922 4 |
Coinhive | 739 | 87 | 0.924 7 | 0.913 6 |
Emotet | 1 435 | 379 | 0.853 9 | 0.880 9 |
GandCrab | 1 798 | 1250 | 0.602 5 | 0.783 1 |
WannaCrypt | 751 | 499 | 0.701 2 | 0.854 2 |
Ramnit | 1 270 | 366 | 0.802 9 | 0.839 7 |
暗云 | 231 | 99 | 0.608 1 | 0.789 9 |
贪狼 | 168 | 52 | 0.759 0 | 0.893 1 |
其他31类 | 2 101 | 208 | 0.908 6 | 0.893 2 |
共计 | 9 487 | 2 895 | 0.832 8 | 0.886 7 |
分析基于特征提取方案和本文改进图像化方案的检测结果,发现本文方案在样本加壳率高的家族中表现出更好的检测效果。本文采用的新型数据集中,大量样本经过了加壳混淆,特征提取过程中出现偏差,而基于图像化的方案可以一定程度避免特征提取过程,从恶意代码压缩率、局部混淆相似性等角度对恶意代码变种进行全局建模识别,尽管混淆、加壳等手段同样会对可见字符的提取造成一定影响,但足以让本文提出的增强图像方案表现出比静态特征提取和原始图像化算法更加优异的效果,实验结果也证明了本文采用的方案可以有效地对抗恶意代码对抗技术。
最后还对本文所述实验方法的性能进行了测试,使用的服务器环境为一台英特尔至强服务器,CPU为8核E5-2637,内存12 GB,GPU为TITAN X (Pascal) 1块,GPU显存大小为12 G。本文使用方案与对比的几种方案的时间消耗和表现结果如表 5所示,可以看到本文使用的特征提取算法与新型网络结构在没有显著提高整体检测时间的同时显著提高了检测的效果,在多个对比中都有着比较优异的表现。
序号 | 检测方案 | 特征提取 时间/s |
算法训练 时间/s |
宏F1检 测结果 |
1 | 灰度图像+神经网络 | 1 600 | 657(50 epoch) | 0.806 3 |
2 | 增强图像+VGG16 | 3 700 | 878(50 epoch) | 0.876 9 |
3 | 增强图像+VGG16+Spp-Net | 3 700 | 931(50 epoch) | 0.886 7 |
4 | 静态特征+融合算法 | 7 300 | 598 | 0.832 8 |
4 结语
本文使用恶意代码图像化方法来对恶意代码进行检测与分类,针对传统方案中信息单一、可解释性差、没有利用PE结构等问题,设计了一种代码图像化增强方法,从PE结构维度和可见字符维度扩充了恶意代码图像中的信息量,为模型添加了更高的可解释性。接下来使用VGG16卷积神经网络对恶意代码图像进行分类,为解决算法模型对不同大小数据无法同时使用的问题,本文采用SPP-Net来完成对恶意代码图像特征图尺寸的固定,最终实现对所有维度的恶意代码图像均可训练预测。经实验验证,本文设计的方案可以有效应对恶意代码对抗技术,提高了恶意代码检测的准确性和鲁棒性。
[1] |
AHMADI M, ULYANOV D, SEMENOV S, et al. Novel feature extraction, selection and fusion for effective malware family classification[C]//Proceedings of the 6th ACM Conference on Data and Application Security and Privacy. Orleans, USA: ACM, 2016: 183-194.
|
[2] |
KOLOSNJAJI B, ZARRAS A, WEBSTER G, et al. Deep learning for classification of malware system call sequences[C]//Proceedings of the 29th Australasian Joint Conference on Artificial Intelligence. Hobart, Australia: Springer, 2016: 137-149.
|
[3] |
HU W W, TAN Y. Generating adversarial malware examples for black-box attacks based on GAN[J]. arXiv preprint arXiv: 1702.05983, 2017.
|
[4] |
SIMONYAN K, ZISSERMAN A. Very deep convolutional networks for large-scale image recognition[J]. arXiv: 1409.1556, 2014.
|
[5] |
NATARAJ L, KARTHIKEYAN S, JACOB G, et al. Malware images: Visualization and automatic classification[C]//Proceedings of the 8th International Symposium on Visualization for Cyber Security. Pittsburg, USA: ACM, 2011: 4.
|
[6] |
韩晓光, 曲武, 姚宣霞, 等. 基于纹理指纹的恶意代码变种检测方法研究[J]. 通信学报, 2014, 35(8): 125-136. HAN X G, QU W, YAO X X, et al. Research on malicious code variants detection based on texture fingerprint[J]. Journal on Communications, 2014, 35(8): 125-136. (in Chinese) |
[7] |
任卓君, 陈光. 熵可视化方法在恶意代码分类中的应用[J]. 计算机工程, 2017, 43(9): 167-171. REN Z J, CHEN G. Application of entropy visualization method in malware classification[J]. Computer Engineering, 2017, 43(9): 167-171. (in Chinese) |
[8] |
张晨斌, 张云春, 郑杨, 等. 基于灰度图纹理指纹的恶意软件分类[J]. 计算机科学, 2018, 45(S1): 383-386. ZHANG C B, ZHANG Y C, ZHENG Y, et al. Malware classification based on texture fingerprint of gray-scale images[J]. Computer Science, 2018, 45(S1): 383-386. (in Chinese) |
[9] |
CUI Z H, XUE F, CAI X J, et al. Detection of malicious code variants based on deep learning[J]. IEEE Transactions on Industrial Informatics, 2018, 14(7): 3187-3196. |
[10] |
REZENDE E, RUPPERT G, CARVALHO T, et al. Malicious software classification using transfer learning of resnet-50 deep neural network[C]//Proceedings of the 16th IEEE International Conference on Machine Learning and Applications (ICMLA). Cancun, Mexico: IEEE, 2017: 1011-1014.
|
[11] |
PERDISCI R, MANCHON U. VAMO: Towards a fully automated malware clustering validity analysis[C]//Proceedings of the 28th Annual Computer Security Applications Conference. New York, USA: ACM, 2012.
|
[12] |
SEBASTIÁN M, RIVERA R, KOTZIAS P, et al. AVCLASS: A tool for massive malware labeling[C]//Proceedings of the 19th International Symposium on Research in Attacks, Intrusions, and Defenses. Paris, France: Springer, 2016.
|
[13] |
HE K M, ZHANG X Y, REN S Q, et al. Spatial pyramid pooling in deep convolutional networks for visual recognition[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2015, 37(9): 1904-1916. |
[14] |
DAHL G E, STOKES J W, DENG L, et al. Large-scale malware classification using random projections and neural networks[C]//2013 IEEE International Conference on Acoustics, Speech and Signal Processing. Vancouver, Canada: IEEE, 2013: 3422-3426.
|
[15] |
SUN B W, GUO Y H, LI Q, et al. Malware family classification method based on static feature extraction[C]//2017 3rd IEEE International Conference on Computer and Communications (ICCC). Chengdu, China: IEEE, 2017: 507-513.
|