吴 恋,赵晨洁,韦萍萍,于国龙,徐 勇
(1.贵州师范学院 数学与大数据学院,贵州 贵阳 550018;2.贵州大学 计算机科学与技术学院, 贵州 贵阳 550025;3.哈尔滨工业大学(深圳) 计算机科学与技术学院,广东 深圳 518055)
目前,盗取个人信息数据、获取网上交易密码、比特币勒索等事件频频出现。现有的通过特征码对比、签名或者基于启发式等病毒检测安全机制已无法很好处理大数据时代下大量未知,且使用了高新混淆反检测技术的病毒[1,2]。已有研究显示[3-7],基于深度学习的自主学习检测恶意程序是病毒检测技术的发展趋势,将改变未来反病毒行动的游戏规则。然而当前常规的深度学习网络模型几乎是运行在服务器或台式机上,其庞大的参数权重的网络模型结构决定了对运行环境有非常大容量存储空间及较高硬件计算性能的要求,这使得深度神经网络模型难以部署在嵌入式系统或硬件资源受限的系统上[8-11]。
本文提出一种轻量级的基于深度学习的计算机病毒检测方法,方法中基于轻量级深度网络SqueezeNet,解决深度网络模型难以部署在嵌入式设备上应用的问题,并对SqueezeNet进行卷积结构和特征增强的改进,使之运行速度更快、资源消耗更低且检测精度更高;此外,该病毒检测方法是将传统视觉算法和深度算法进行了融合,各取所长,性能相补,提高识别判定准确度,实现高效准确的病毒检测。本文为大数据时代下信息安全问题做出保障贡献、为深度学习技术在计算机安全行业应用上做出了探索性的贡献。
为解决已有的病毒检测机制无法很好地处理大数据时代下大量未知病毒及深度网络模型难以部署在嵌入式设备上应用的问题,本文提出了一种基于轻量级深度网络的计算机病毒检测方法。该方法的检测机制原理设计为:对病毒数据样本预处理,对使用了加壳技术为隐藏其真实意图躲避杀毒软件检测或为压缩体积便于传播渗透的病毒进行查克和脱壳处理;采用B2M算法将检测样本映射为可视化的二进制灰度图像并计算灰度共生矩阵,提取图像灰度共生矩的目的是有意使用图像的纹理信息作为样本识别的主要判别依据(纹理是图像的一个非常重要的信息,作为图像的识别依据具有显著效果[12,13],基于灰度共生矩阵可提取出较多的具体的纹理特征);将灰度共生矩阵送入轻量级深度网络模型中,由该轻量级深度网络自动提取特征,最后实现精准高效的病毒检测。该方法中,将样本映射为灰度图像并计算出灰度共生矩阵后再送入深度网络模型中进行处理,其目的起到引导深度网络模型提取纹理信息特征的作用而又避免了传统的由人工经验提取具体纹理特征的弊端。方法总体架构如图1所示。
图1 基于轻量级深度网络的计算机病毒检测方法
其检测流程如下:①对待测样本进行预处理;②将样本转灰度图像并计算灰度共生矩阵;③样本的灰度共生矩阵送入轻量级深度网络模型进行检测。
本文的病毒检测方案涉及到的技术问题有样本的预处理、样本如何转为可视化的灰度图像及怎么计算灰度图像的灰度共生矩、轻量级深度网络的设计。
大部分的病毒为了隐藏其真实意图躲避杀毒软件的检测,或者是为了压缩体积便于传播和渗透,都经过了加壳处理。为了很好分析病毒文件,还原病毒文件的真实结构状态,我们首先对样本文件进行查壳与脱壳的预处理。
本文采用的查壳工具为DIE。DIE(detect it easy)是一款功能强大、轻量级的查壳工具,其支持Windows、Mac、Linux系统,能够对PE文件、ELF文件、文本文件、二进制文件等进行查壳,检测文件是否加壳、壳类型、编程语言等信息。本文根据查壳信息对应采用相应的脱壳工具进行自动脱壳处理,VMUNPACKER是本文使用较频繁的一个脱壳工具。VMUNPACKER是超级巡警虚拟机自动脱壳机,是一款功能强大的脱壳工具,其完全基于虚拟机技术,能对很多已知及未知壳进行脱壳处理。
本文提出的病毒检测方法有别于以往的基于病毒特征码对比、行为检测或病毒代码反编译分析等方法,本文是将病毒映射为可视化的灰度图像来处理。我们采用B2M算法将样本映射为二进制灰度图像并计算灰度共生矩阵,以灰度共生矩阵作为轻量级深度神经网络的输入。提取图像灰度共生矩的目的是有意使用图像的纹理信息作为样本识别的主要判别依据。纹理是图像的一个非常重要的信息,作为图像的识别依据具有显著效果[12,13]。灰度共生矩阵是一种基于统计思想的纹理分析方法,基于它可提取出较多的具体的纹理特征。然而,本文计算出灰度共生矩阵后直接将其送入深度神经网络模型中进行处理,由深度神经网络自动提取特征,并未由人工去提取具体的纹理特征,其目的在于引导深度神经网络提取纹理信息特征的作用而又避免了传统人工直接提取具体特征的弊端。
(1)样本映射为灰度图像
利用B2M算法将可执行文件映射为灰度图像,存储的图像格式为PNG,其实现过程如图2所示。
图2 可执行文件转灰度图像的实现
对给定的可执行二进制文件将每8位转换为一个无符号的整数(取值范围为0-255),此外,设定固定的行宽为一个向量,最终整个文件将生成为一个二维数组;随后将此二维数组可视化为一个灰度图像,其中数组中的每个元素对应图像中的一个像素(因为数组中的每一个元素其取值范围为0-255,正对应灰度图像中每个像素的取值范围——0表示黑色、255表示白色)。图3为正常文件qq.exe和病毒文件Trojan-GameThief.Win32.WO W.aect映射为灰度图像的示例。
图3 样本转灰度图像示例
(2)提取灰度共生矩阵
纹理是图像的一个非常重要的信息,它体现了物体表面的具有缓慢变化或者周期性变化的结构排列属性[13]。本文采用灰度共生矩阵(grey-level co-occurrence matrix,GLCM)对图像纹理进行表示。灰度共生矩阵是一种基于统计思想的纹理分析方法,是通过对图像上保持某距离的两像素分别具有某灰度的状况进行统计得到的。本文提取灰度共生矩阵的算法步骤为:
步骤1 取图像 (N×N) 中任意一像素点i, 其位置为 (x,y)、 该点的灰度值记为gi, 另取偏离i点的另一像素点j, 其位置为 (x+Δx,y+Δy)、 该点灰度值记为gj, 则该像素对的灰度值为 (gi,gj)。 (注:这里取Δx=1, Δy=0, 即像素对是水平的,计算的是水平灰度共生矩阵。)
步骤2 令点i在整个画面上移动,点j保持与i之间的空间关系随之移动,则会得到各种 (gi,gj) 值;本文图像的灰度值级数为0-255,即gi、gj的取值范围为0-255。也即是,gi、gj有256种取值,则 (gi,gj) 的组合共有256*256种可能。
步骤3 对于一张图片,统计出每一种 (gi,gj) 组合值出现的次数,然后排列成一个256*256的方阵A。 也即是,方阵A的元素agigj对应的是这一种 (gi,gj) 灰度值对出现的总的次数。
步骤4 将方阵A里的每一元素除以 (gi,gj) 所有组合出现的总次数之和,将方阵里的每个元素归一化为出现的概率p(gi,gj), 得到灰度共生矩阵G。 该矩阵表示的是图像中满足 (i,j) 两点相对空间位置关系的两点灰度值出现的联合概率分布,可用如下公式来表示
式中:S表示一张图片中满足 (i,j) 两点空间位置关系的两点的集合, N{…} 表示集合中的点对的数目。
上述中 (Δx,Δy) 还可以设定为不同的取值,不同的组合可以得到不同的灰度共生矩。本文设计并计算了4种灰度共生矩阵:水平灰度共生矩阵 (Δx=1, Δy=0)、 垂直灰度共生矩阵 (Δx=0, Δy=1)、 45度灰度共生矩阵 (Δx=1, Δy=1) 和135度灰度共生矩阵 (Δx=-1, Δy=-1), 然后取这4个度灰共生矩阵的平均值作为最终的度灰共生矩阵。
灰度共生矩阵计算出来后,可以基于它提取出许多具体的不同纹理特征,例如:均匀性、相关性、方差、和平均、相关信息测度等[13]。但本文在此并不提取这些具体的纹理特征,本文设计的方法是将灰度共生矩阵送入到轻量级深度网络中去自动提取特征,起到了引导轻量级深度网络模型提取纹理信息特征的作用而又避免了传统人工直接提取具体特征的弊端。
深度学习本质上是由大量的单一神经元相互连接组成的深度神经网络,经过训练,神经元之间的连接强度(权值)将会被改变,连接强度的分布决定了网络的性能。目前应用比较广泛的深度学习模型体系根据学习单元的不同分为[14,15]:基于受限波尔兹曼机的深度学习架构、基于卷积神经网络的深度学习架构、基于自编码器的深度学习架构。本文的病毒检测机制中采用的是基于卷积神经网络CNN的深度学习架构。然而一般的深度神经网络模型训练出来是一个具有庞大参数权重的网络模型,其对运行环境有非常大容量存储空间及较高的硬件计算性能要求,这使得深度神经网络模型难以部署在嵌入式系统或硬件资源受限的系统上。针对此问题,本文设计了轻量级的深度神经网络模型,在保证病毒检测高精准的情况下大大减小了网络模型的大小,使整个病毒检测方法能轻松部署运行在嵌入式系统上。
本文的轻量级深度网络采用的是SqueezeNet轻量级网络,并对该网络结构进行了卷积结构和特征增强的改进,使之运行速度更快、资源消耗更低且检测精度更高。
SqueezeNet[11]是一个超轻量级的深度神经网络,由若干个fire模块结合卷积网络中卷积层、降采样层、全连接层组成。其网络结构如图4所示。
图4 SqueezeNet网络结构
SqueezeNet网络结构中的核心为fire模块,fire模块是SqueezeNet轻量级、参数较少的原因所在。一个fire模块由squeeze部分和expand部分组成,squeeze部分是一组连续的1×1卷积,expand部分则是由一组连续的1×1卷积和一组连续的3×3卷积concatenate组成。图5为SqueezeNet网络中的fire结构。其中,H和W分别为特征图的高和宽,C为特征图的通道数,S1,e1,e3分别代表卷积核的个数,同时也表示对应输出特征图的维数。
图5 SqueezeNet网络中的fire结构
SqueezeNet中通过将3×3卷积替换成1×1卷积、减少3×3卷积的通道数,显著减少参数数量;此外,SqueezeNet结构中将降采样操作延后,可以在参数数量受限的情况下提高准确率。SqueezeNet在ImageNet数据集上具有与AlexNet相同的识别精度,但SqueezeNet的参数比AlexNet少50倍[11]。
SqueezeNet虽然减少了网络的参数、网络模型较小,适合于部署在嵌入式系统或存储资源受限的系统上,但其网络结构较深,导致每次样本的测试时间会较长;此外,SqueezeNet通过设计较深的网络深度及延后降采样操作以确保网络模型的准确率,但因网络参数减少了,跟相同深度的卷积神经网络模型相比,其网络模型的准确率要低。对此。本文对SqueezeNet网络结构进行了卷积结构和特征增强的改进,使之运行速度更快、资源消耗更低且检测精度更高。
卷积结构的主要改进如下:众所周知,卷积次数的多少对计算复杂度有很大的影响。常见的卷积优化方案为通道数的选择,但是这样的优化效果有限。为了取得更好的计算优化效果,我们使用深度可分离卷积对卷积操作进行优化。其基本特点为将标准的卷积操作划分为如图6所示的Depthwise和Pointwise两个部分分别进行卷积操作。
图6 卷积结构优化
特征增强的改进如下:本文通过多分支膨胀卷积结构以增强特征的鲁棒性,将膨胀卷积与初始卷积得到的特征进行组合。基于多分支膨胀卷积结构的特征增强如图7所示。我们知道,较大的感受野能够提升模型的性能,究其原因是相对大的感受野可为模型提取较鲁棒的特征。膨胀卷积是在不改变特征层大小的条件下扩大感受野的有效办法。膨胀卷积与初始卷积得出的特征是一个有效的特征扩展方式,这样的特征组合可增强特征的鲁棒性。使用多个膨胀比率相当于使用多个分支网络。我们经过大量实验发现,基于1、3、5这3个膨胀比率的膨胀卷积可取得很鲁棒的特征提取结果(其中比率为1的膨胀卷积即初始卷积)。为了减少特征的维数,我们把这3种膨胀卷积进行通道融合。
图7 基于多分支膨胀卷积结构的特征增强
实验样本收集了23 000个病毒样本和12 000个正常样本,总的35 000个样本数据。其中,病毒样本一部分来源微软开源的malware classification数据集(https://www.kaggle.com/c/malware-classification/data),一部分来源于Venustech提供的病毒样本(http://onlineupdate.leadsec.com.cn),还有一部分来自SecRepo提供的病毒样本(http://www.secrepo.com),正常样本来源于搜集的Windows上的各种正常的PE格式文件。实验样本样例如图8所示。
图8 实验样本数据样例
病毒样本的大小从1.1 KB到35.7 MB,正常文件的大小范围从1 KB到55.5 MB。样本的大小范围见表1。
表1 病毒样本和正常样本的大小信息
对模型的训练,我们将样本数据按比例划分为训练集和测试集,其中训练集占总样本的四分之三,测试集占总样本的四分之一。详细分配见表2。
表2 训练集和测试集的划分情况
(1)本文病毒检测方案的检测效果验证
将上述所有样本进行本文所述的样本预处理、转灰度图像和提取灰度共生矩阵的操作,将灰度共生矩阵保存为一个文档。也即是,最终训练集和测试集中的样本数据用每一个样本的灰度共生矩阵文档来代替,如图9所示。随后,对训练集和测试集中的灰度共生矩阵文档编写标签文档(本文用标签0代表病毒样本,用标签1代表正常样本,如图10所示),利用该样本数据集对改进后的轻量级深度网络SqueezeNet进行训练。训练出来的模型准确率如表3所示,该实验结果验证了本文提取的病毒检测方案的可行性和有效性。
图9 样本转灰度图像并提取灰度共生矩阵
图10 训练集中的标签文档部分展示
此外,本文对样本进行预处理是否有利于病毒检测和样本转灰度图像后提取灰度共生矩阵作为深度网络的输入是否有利于病毒检测分别进行了实验测试,以验证提出的病毒检测方法中相应环节的有效性,其实验结果见表3。表3中,Method1为本文提出的病毒检测方法,Method2对本文提出的方法去除灰度图形提取灰度共生矩阵的步骤(直接将灰度图形作为深度神经网络的输入),Method3对本文提出的方法去除样本预处理的步骤。同时,我们将本文的方法与传统机器学习分类算法进行了对比测试,验证本文使用深度神经网络自动提取特征并进行分类的优越性,其实验结果见表3。表3中,Method4是基于传统机器学习分类的方法[16,17],是在本文方法的基础上将深度神经网络自动提取特征并分类改为人工提取具体纹理特征+SVM分类的模式。在Method4方法中,我们基于灰度共生矩阵人工提取了10个常用的纹理特征向量来代表该灰度图像(也即是每一个原样本文件被10个纹理特征向量代替)。提取的这10个纹理特征向量分别是:相关、对比度、角二阶矩、熵、逆差距、最大概率、和平均、相异性、和方差、差方差。基于灰度共生矩阵提取这10个纹理特征向量的具体过程在此不作介绍,这是比较成熟的技术、有现成的库方法可以调用。
表3 本文检测方法与其它方法对比
(2)SqueezeNet改进后模型大小及检测精度验证
SqueezeNet在提出之际,主要的比较对象为AlexNet。在ImageNet数据集上,SqueezeNet具有与AlexNet相同的识别精度,但SqueezeNet的参数比AlexNet少50倍[11]。所以本文也将改进后的SqueezeNet与AlexNet网络模型进行比较。
我们使用上述所述的样本集及本文提出的病毒检测方法,对样本集做相应处理后对改进后的SqueezeNet、原SqueezeNet及AlexNet进行训练,并检验其对病毒检测的识别精度,所得结果见表4。
表4 网络模型的病毒检测精度测试
从表3中可以看出:①Method1(本文方法)和Method3之间的区别在于有没有加入对样本预处理的环节,Method1的检测正确率为95.3%、Method3的检测正确率为90.2%,说明本文提出的查克脱壳的预处理环节对提高病毒检测识别能力有益。②Method1(本文方法)和Method2之间的区别在于是否将灰度图像进一步转为灰度共生矩阵作为深度神经网络的输入,通过实验数据可知,将灰度图像进一步转为灰度共生矩阵能帮助深度神经网络排除图像中的一些无用干扰,更利于深度神经网络对其特征的学习,有利于分类检测识别。③Method1(本文方法)和Method4之间的区别在于分类器和特征提取的方式不同,Method1是深度神经网络自动提取特征,Method4是人工提取。通过实验数据可知,传统的人工提取特征的分类方式没有深度学习自动提取特征进行分类识别的效果好。
从表4中可以看出:①本文改进的SqueezeNet网络模型大小在6 M左右,属于一个轻量级的深度神经网络模型,完全可嵌入到像手机这样的端设备中去应用,解决了深度网络模型长期因参数庞大需消耗大量硬件资源而难以部署在嵌入式设备上应用的问题。改进后的SqueezeNet网络模型大小比原始网络模型略大,是因为对SqueezeNet网络结构进行了卷积结构和特征增强的改进所导致的。②改进后的SqueezeNet网络模型,其在本文中的病毒检测应用中有明显优异的检测能力。
本文提出了一种计算机病毒检测方法,该方法将样本映射为灰度图像来处理,并提取灰度共生矩阵送入轻量级深度网络SqueezeNet中完成特征的自动提取及分类识别。该方法有意使用纹理特征对病毒进行识别,但并未直接提取具体的纹理特征,而是将样本的灰度共生矩阵传递给轻量级深度神经网络,由深度神经网络自行提取特征来进行分类识别。该方法将传统视觉特征与深度神经网络进行整合,最后实现了病毒的高准确率判别;此外,本文对SqueezeNet进行了改进,使其检测精度更高、计算性能更优化。本文为大数据时代下大量未知病毒的检测提供了一种良好的解决方案,并解决了深度网络模型长期因参数庞大需消耗大量硬件资源而难以部署在嵌入式设备上应用的问题。实验验证了所提出方法各个环节的有效性。本文提出的方法是在Windows下实践的,但该方法设计思想不局限在Windows下应用,可用于其它的操作系统上。