恶意代码检测技术研究综述

2021-12-11 06:01
新一代信息技术 2021年20期
关键词:残差灰度卷积

杨 坤

(河北地质大学信息工程学院,河北 石家庄 050031)

0 引言

随着互联网技术的不断发展,网络安全攻势也愈发激烈,人们在享受便捷日常的同时还受到无止尽的网络攻击。如今,网络安全问题已成为人们正常生活和政府企业正常运营的重大威胁之一。在一些地下利益的驱动下,网络攻击技术在不断地升级更新,黑客团体使用各种技术升级包装恶意软件,意图躲避安全软件的查杀,恶意软件潜伏在计算机系统中窃取用户隐私信息,破坏系统数据,占用计算机资源,甚至威胁勒索用户,给互联网安全带来了巨大的威胁,同时给网络安全人员带来了巨大的挑战。

根据2021年瑞星发布的2020年中国网络安全报告,2020年瑞星安全系统共截获病毒样本1.48×108亿个,总体病毒数量相较2019年同期上升43.71%[1]。根据病毒感染的人数、病毒变种的数量以及所具有代表性进行综合性评估,得到2020年1月至 12月病毒 Top10:Adware.AdPop家族排名第一,这是流氓软件使用的弹窗模块;第二是 Trojan.ShadowBrokers家族,被病毒利用后进行蠕虫传播的一类病毒;第三是Trojan.Vools家族,它利用计算机漏洞进行传播,攻击区域网中的计算机,传播挖矿木马。由此看来,通过家族特征检测病毒对于病毒的正确分类和统计有着至关重要的作用。

近几年里恶意代码数量呈爆发式增长,原因之一是恶意代码编写者往往通过复制已有恶意代码的核心代码段来生成新的恶意代码,或者在原恶意代码的基础上进行部分改进,由此得到的恶意代码变种和原恶意代码归属于一个家族,它们在功能上会有些许不同,因此可能躲避基于特征码扫描的病毒查杀技术。恶意代码变种数量的激增,对恶意代码的检测造成了极大的阻碍,传统的检测方法已不堪重负,网络安全态势不容乐观。

传统的恶意代码检测方法主要有静态分析方法和动态分析方法。随着近几年来恶意代码数目的暴增,出现了结合图像处理技术的恶意代码检测方法:通过可视化恶意代码,根据图像相似度进行分类,进而对恶意代码家族进行分类。伴随着机器学习和深度学习的崛起,这种结合图像的新颖的恶意代码检测方法开始被越来越多的安全研究者所应用。

1 传统恶意代码检测技术

恶意代码最早出现于上世纪八十年代末期,大多以病毒的形式存在,这时候反恶意代码软件也应运而生,由于这个时期科学技术不够发达,恶意代码还处于比较简单的阶段,因此对应的恶意代码检测技术也比较简单,采用的通常是较为直接的特征匹配方法,通过提取恶意代码的特征串进行匹配即可完成检测。随着科学技术的发展,恶意代码的形态、数目发生很大的变化,简单的特征匹配方式不能满足查杀需求,因此出现了基于动态特征的恶意代码检测技术,并由此根据分类时使用特征的不同,将恶意代码的检测技术分为了静态分析技术和动态分析技术[2]。

静态分析方法[3],指的是使用恶意代码的静态特征进行分析。在不实际执行程序的情况下,通过使用反汇编技术对可疑软件进行反汇编操作,然后通过查看分析反汇编代码得到恶意代码的静态结构、流程图以及各个代码块,进而提取恶意代码的特征字符串作为其特征码,常见的恶意代码静态分析方法有基于特征码的检测、基于代码语义的检测和启发式扫描方法[4]。静态分析方法的优势在于执行速度快,方案简明高效,覆盖范围广,但是其不足之处在于难以应对日渐复杂的恶意代码对抗技术,一些经过加壳或混淆手段处理的恶意代码在形态上发生了变换,对其进行静态特征提取时会变得很困难。

动态分析方法[5],指的是在一个安全虚拟的环境或者沙盒中执行代码,通过监视程序运行、比较恶意程序的某些状态信息在执行前后发生的变化来识别分析恶意代码。这在一定程度上解决了加壳混淆等恶意代码对抗问题,但是该方法耗时、耗资源,且无法应对反沙箱、虚拟机保护技术等更加复杂的恶意代码对抗技术。

静态分析方法和动态分析方法都是基于恶意代码的静态特征或动态特征的恶意代码识别分析方法。这种基于特征的分析方法需要先人工提取恶意代码的文本分析特征或程序执行特征,然后分析比对提取的特征,以此将恶意代码正确分类。其缺点是在提取特征阶段仍然是由人工分析,并没有实现真正的智能化,人工分析可能会丢失恶意代码的深层特征,从而无法正确地分类恶意代码。

2 基于图像的恶意代码检测技术

随着图像处理领域的发展,有研究者提出基于图像化的恶意代码检测技术,并在近几年里迅速发展起来。2008年 Conti等人[6]首次提出将二进制和数据文件可视化的想法,在他们的研究中,他们分别将音频数据、固定或可变长度的记录数据以及文本数据进行可视化。2011年,Nataraj等人[7]提出了将恶意代码可视化为灰度图像并进行分类的一套完整方案,构建了恶意代码图像数据集Malimg,其中包含25个家族共计9 458个恶意软件样本。在该文介绍了将恶意代码文件转换为灰度图像的方法:将恶意代码文件以二进制串形式表示,每8位二进制数即一个字节,转换为十进制的范围是[0, 255],正好对应灰度图像的一个灰度值,0表示黑色像素,255表示白色像素,具体转换过程如图1所示。

图1 恶意代码可视化为图像过程Fig.1 the process of malicious code visualization as an image

图像宽度由经验值确定,如表 1所示,图像高度则取决于文件的大小。

表1 图像宽度确定Tab.1 determine image width

图 2展示了不同家族的多个恶意代码可视化后的图像,从可视化结果中可以明显看到,属于相同家族的恶意代码图像呈现出非常相似的布局和纹理,属于不同家族的恶意代码图像相似性较差。基于这一结论,该文使用 GIST算法提取图像的特征并使用KNN分类算法对图像进行分类,最终在Malimg数据集上达到了97.18%的分类准确率。

图2 属于不同家族的恶意代码图像Fig.2 images of malicious code belonging to different families

2013年Kancherla等人[8]在Nataraj等人的基础上提出使用灰度图像的密度特征、Gabor特征和小波特征来计算图像相似性。密度特征直接从字节图中提取,基于小波的特征可以有效地捕获纹理信息。最后使用SVM算法在一个包含25 000个恶意软件样本和12 000个良性软件样本集上获得了95%的分类准确率。

2014年韩晓光等人[9]提出一种基于纹理指纹的恶意代码特征提取和检测方法,在将恶意代码按照文献[7]的方式转换为灰度图像后,首先使用基于纹理分割的方法对图像进行分块,使用灰度共生矩阵(GLCM)提取图像中每一个分块的纹理特征,这些图像纹理特征即作为恶意代码的指纹特征;根据这种指纹特征,创建方便对纹理指纹进行索引的结构;最后在检测阶段,采用加权的方式综合多分段纹理指纹的相似性匹配方法检测恶意代码变种和未知的恶意代码[9]。该论文的提出使得恶意代码图像化检测在国内有了创新性研究进展。2016年任卓君等人[10]在恶意代码可视化的基础上提出将二进制文件像素归一化,通过RGB通道呈现恶意代码的特征,这种方法将比较文件之间的相似性转换为比较像素点集合之间的相似性,并且使用Jaccard距离度量来计算特征的相似度,最后采用 KNN算法来实现恶意代码的样本分类。

2018年Yan等人[11]提出一种基于改进的局部二值模式(LBP)算法——对称旋转不变的共生局部二值模式算法(PRICoLBP)的恶意代码分类,发现该算法在不同恶意代码家族之间具有线性可分性,PRICoLBP-TFIDF算法对混淆代码具有较强的容错性,尤其是在加密强度较弱、代码段重定位、有冗余数据和指令的情况下也能有较好的分类精度。同年,刘亚姝等人[12]结合文献[8]和文献[11],提出一种恶意代码图像特征融合的方法:将图像全局特征(GIST)和局部特征(LBP)融合,以此构建鲁棒性更强的特征描述符,可以更好地抗混淆、抗干扰,这种方法一定程度上解决了Nataraj的方法[8]在一些相似度很高或差异性不大的恶意代码家族上模型的分类准确率不高的问题。实验证明这种特征融合的算法得到了更好的分类结果。

近几年随着深度学习技术发展,有研究者提出基于深度神经网络的恶意代码图像化方案,2018年,Cui等人[13]使用蝙蝠算法(Bat Algorithm)解决了因 Malimg数据集中恶意代码族群样本数量不均所导致的过拟合问题,并结合卷积神经网络对 Nataraj使用的分类方法做了改进,最后在Malimg数据集上既保证了检测速度又达到了94.5%的分类准确率。该文章仍然按照文献[8]的方法将恶意代码二进制转换为灰度图像,然后将恶意代码灰度图像放入搭建好的 CNN网络中自动进行识别和分类。由于 Malimg数据集的分布极其不均衡,如图3所示,严重影响了CNN分类的效果,因此,在文献[13]中使用了蝙蝠算法来降低因数据不均衡所导致的过拟合问题。

图3 Malimg数据集分布Fig.3 the dirtribution of Malimg dataset

自此,深度学习开始逐渐应用于恶意代码分类任务中。Edmar等人[14]于2018年提出使用迁移学习方法,将深度学习框架Resnet-50应用到恶意代码样本上,整体准确率达到98%以上,取得了比Nataraj[8]更好的结果。2019年,KHAN R U等[15]使用GooleNet和ResNet对两个不同数据集进行分类识别,验证了深度学习框架对恶意代码识别分类的有效性。

随着深度学习技术的不断发展,其弊端也逐渐显现出来:由于深度学习框架的网络层数越来越深,网络结构越来越复杂,使得计算量和参数量不断增加,造成计算机巨大的资源消耗和运行的时间消耗。由此,曾娅琴等人[16]使用了当时工业界流行的轻量级神经网络——MobileNet v2模型[17],该模型主要运用了分组卷积的思想来降低深度卷积网络模型中的计算量和参数量,在文献[16]中实现了基于该模型的恶意代码变种分类模型,在该论文的实验结果说明中,提到该模型对恶意代码家族的分类平均准确率可高达99.32%[16]。

图4 标准卷积Fig.4 standard convolution

图5 深度可分离卷积Fig.5 depthwise separable convolution

2018年Goole对MobileNet v1结构进行改进,提出了MobileNet v2轻量级网络,改进的v2模型主要是在v1模型的架构上加入了线性瓶颈(Linear Bottleneck)和倒残差结构(Inverted Residual)。

图6是MobileNet v2模型中的可分离线性瓶颈结构(Separable with Linear Bottleneck),在这个结构中替换标准卷积为深度卷积和逐点卷积,在逐点卷积层后面加入了使用线性激活函数的1×1卷积(网格标志的层),这一模块称之为 Linear Bottleneck。

图6 可分离的线性瓶颈Fig.6 separable with linear bottleneck

经典的残差块(Residual Block)结构如图7所示,图中每个块的厚度代表对应通道的数量,在图8中将高维特征图先使用1×1卷积降维,然后再使用3×3卷积进行滤波,最后利用1×1卷积进行升维,以此得到输出特征,也就是下一层的输入,这里每一层卷积都使用了ReLU函数进行激活。

图7 经典残差块结构Fig.7 residual block

MobileNet v2借鉴了残差结构的思想,并做了相应的改进:将经典的残差结构改进为倒残差结构,其结构如图8所示,图中块的厚度表示通道的数量。

图8 倒残差块结构Fig.8 inverted residual block

由于深度卷积层提取特征受限于输入特征的维度,若采用经典残差块,经过1×1的逐点卷积后再使用深度卷积层进行滤波,这两部分会把输入特征图进行压缩,容易导致重要信息的丢失,最终有可能影响模型的检测精度。因此,MobileNet v2使用的倒残差结构可以解释为:首先通过1×1的逐点卷积将输入特征图的通道进行扩张,丰富特征数量,再通过3×3的卷积提取特征,最后使用1×1卷积进行压缩,从而达到提高模型精度的目的。由于这一过程恰与经典残差块的顺序颠倒,所以称之为倒残差结构(Inverted Residual Block)。简单说,倒残差块就是将低维特征使用1×1卷积进行升维,而后使用3×3卷积进行滤波,最后使用1×1卷积进行降维,得到本层特征的输出,即下一层特征的输入。这样的结构增加了特征维度,可以一定程度上提高模型精度。

3 结论

本文介绍了恶意代码分类的基本方法,重点介绍了基于图像的恶意代码分类。从使用传统机器学习方法到使用深度学习技术来进行恶意代码图像的识别分类,可以看到在恶意代码分类任务中,深度学习技术虽然可以自动提取特征,但是会增加运行时间,伴随分类精度提升的是更多的计算资源,更长的运行时间。对于这种实时性较强的任务,提出快速且错误率较低的检测方案是未来的研究重点,恶意代码检测方法在未来仍然有很大的发展提升空间。

猜你喜欢
残差灰度卷积
采用改进导重法的拓扑结构灰度单元过滤技术
基于双向GRU与残差拟合的车辆跟驰建模
基于3D-Winograd的快速卷积算法设计及FPGA实现
Bp-MRI灰度直方图在鉴别移行带前列腺癌与良性前列腺增生中的应用价值
基于残差学习的自适应无人机目标跟踪算法
基于递归残差网络的图像超分辨率重建
从滤波器理解卷积
基于傅里叶域卷积表示的目标跟踪算法
基于最大加权投影求解的彩色图像灰度化对比度保留算法
基于灰度线性建模的亚像素图像抖动量计算