软件学报  2020, Vol. 31 Issue (5): 1454-1464   PDF    
一种基于深度森林的恶意代码分类方法
卢喜东1 , 段哲民1 , 钱叶魁2 , 周巍1     
1. 西北工业大学 电子信息学院, 陕西 西安 710072;
2. 陆军炮兵防空兵学院 郑州校区, 河南 郑州 450052
摘要: 针对当前恶意代码静态分析方法精度不足的问题,将恶意代码映射为无压缩的灰度图像,然后根据图像变换方法将图像变换为恒定大小的图像,使用方向梯度直方图提取图像的特征,最后提出一种基于深度森林的恶意代码分类方法.实验中选择不同家族的多个恶意代码样本进行分类,验证了该方法的有效性,并且实验结果优于近期提出的SPAM-GIST方法.
关键词: 恶意代码分类    方向梯度直方图    深度森林    
Malicious Code Classification Method Based on Deep Forest
LU Xi-Dong1 , DUAN Zhe-Min1 , QIAN Ye-Kui2 , ZHOU Wei1     
1. School of Electronics and Information, Northwestern Polytechnical University, Xi'an 710072, China;
2. Zhengzhou Campus, PLA Army Artillery Air Defense Academy, Zhengzhou 450052, China
Abstract: Aiming at the problem of insufficient accuracy of current static classification method of malicious code, this study maps the malicious code into uncompressed gray-scale image. Then the image is transformed into a constant-size image according to the image transformation method, and the direction gradient histogram is used to extract the features of the image. Finally, a kind of malicious code classification method based on deep forest is proposed. Experiments on malicious code samples from different families verify the effectiveness of the proposed method and the results are superior to the recently proposed SPAM-GIST method.
Key words: malicious code classification    histogram of oriented gradient    deep forest    

近年来, 恶意代码的数量不断增长, 严重威胁互联网环境的安全.据赛门铁克(Symantec)报告[1]指出, 2010年恶意代码语料库中总数为2.86亿, 到2014年, 恶意代码总数已经达到17亿; 另据金山火眼(FireEye)于2013年6月的一项调查显示, 2012年, 有47%的受访组织遭受了恶意软件的威胁[2].可见, 恶意代码数量迅速增长且威胁日益严重.

通过将恶意代码映射为图像后, 属于同一家族的恶意代码图像具有视觉相似性, 属于不同家族的恶意代码图像之间具有一定的差异性[3].根据恶意代码图像的这一特点, 在实验中, 可以提取恶意代码图像特征, 然后使用分类算法对提取的特征进行分类.例如, Nataraj等人[3-5]利用Gabor滤波器提取恶意代码图像的全局特征, 该滤波器多尺度、多方向的特点能够提取图像的全局特征, 最后使用最近邻算法对恶意代码进行分类.Kancherla等人[6]将利用Gabor滤波器提取的恶意代码图像的全局特征与恶意代码图像的小波特征和强度特征结合在一起, 然后使用结合在一起的特征对恶意代码进行分类.Han等人[7]将恶意代码转化为图像, 然后计算图像的熵值并映射到曲线上, 最后, 通过计算曲线的相似度来对恶意代码分类.Farrokhmanesh等人[8]使用3种不同的哈希算法提取恶意代码灰度图的指纹; 然后, 计算图像指纹之间的距离对恶意代码分类.但是, 这些方法不能解决恶意代码二进制文件重新分配的问题, 并且在分类精度还有上升的空间.

针对上述问题, 本文提出一种基于深度森林(deep forest, 简称DF)[9]的恶意代码分类方法(malicious code classification method based on deep forest, 简称MCDF), 利用特征分类技术与图像特征提取技术, 将恶意代码映射为灰度图像, 并利用缩放算法将所有图像变换为统一的尺寸, 使用Gamma校正法将图像标准化, 计算图像的梯度并构建方向梯度直方图(histogram of oriented gradient, 简称HOG)[10]; 然后将块内方向梯度直方图进行归一化处理, 收集所有块内的HOG特征结合成为最终HOG特征向量; 最后将HOG特征向量转化为二维HOG特征矩阵, 使用深度森林算法对二维HOG特征矩阵分类.

本文的主要工作包括以下3点.

(1) 本文提出了通过提取恶意代码图像HOG特征来对恶意代码进行分类的方法.从恶意代码二进制文件映射到HOG特征矩阵, 然后使用特征匹配算法对恶意代码分类, 该方法在一定程度上可以确定未知恶意代码的类别.

(2) 提出深度森林的恶意代码分类方法, 利用深度森林不同大小的窗口扫描HOG特征矩阵, 在一定程度上可以解决二进制文件重新分配的问题.

(3) 利用7组恶意代码数据集对本文方法进行实验, 验证分类的精确性和有效性.

1 相关工作

恶意代码特征提取及分类方法是本文的主要研究工作.首先需要对恶意代码进行分析, 分析恶意代码具有的特征; 然后研究恶意代码二进制文件的特征提取方法, 使提取的特征能够尽量表征恶意代码的本质, 最后基于提取的特征对恶意代码进行分类.因此, 本文的相关研究工作主要有恶意代码分析、恶意代码特征提取、恶意代码分类方法这3个方面.

动态分析和静态分析为恶意代码分析领域中普遍采用的两种方法.动态分析所分析的代码就是实际执行的代码, 在代码运行过程中进行分析, 每次运行只能得到1条路径的行为, 但是, 一些恶意代码存在多条执行路径.如Nataraj等人[4]采用法医对照比较的方法, 通过比较感染前和感染后系统的组合特征来分类恶意代码, 改善了动态分析方法的单一执行路径问题.毛蔚轩等人[11]提出了一种主动学习的方法, 利用很少的样本即可对未知样本进行检测.静态分析首先对可执行程序进行反汇编, 并在此基础上提取代码的特征信息.例如, Wang等人[12]提取操作码序列, 并将操作码序列映射为图像, 进而对恶意代码进行检测.该方法在检测速度和检测精度上取得了良好的效果, 但易受代码混淆技术的干扰.Farrokhmanesh等人[13]提出利用音频的方法分析恶意代码, 该方法将恶意代码二进制文件转化为音频, 然后从音频中提取恶意代码特征对恶意代码进行检测.该方法在检测速度和检测精度上取得了良好的效果, 但不能解决垃圾代码插入的问题.Nataraj等人[3, 14]提出利用信号处理的方法分析恶意代码, 该方法将不同家族恶意代码二进制文件转化为相等长度的向量, 通过随机投影降维来检测恶意代码.该方法解决了代码顺序变换的问题, 但易受恶意代码二进制文件重新分配的干扰.

特征的提取能力直接影响分类精度和分类效率, 如何降低混淆技术的干扰, 提取到恶意代码的本质特征, 对恶意代码变种进行准确分类, 是恶意代码研究的热点.将恶意代码映射为图像和信号并提取图像和信号的特征是一种新颖的特征提取方法, 如Nataraj等人[3, 14]将反汇编的恶意代码二进制文件映射为稀疏的信号, 并从信号中提取恶意代码特征, 解决了代码顺序变换的问题, 但易受恶意代码二进制文件重新分配的干扰.韩晓光等人[15]将恶意代码二进制文件映射为灰度图, 通过提取图像的纹理指纹来描述恶意代码的特征.该方法可以有效地避免反逆向逻辑、反追踪以及其他常见的代码混淆方法, 但对于加壳、混淆的恶意代码没有很好的效果.Han等人[7]将反汇编的可执行文件映射为灰度图, 然后计算图像每行像素的熵值并将熵值投影到曲线上, 进而对恶意代码进行分类.这类算法虽然有很高的准确率, 但是该方法不能解决反汇编文件重新分配或者添加大量冗余的问题.Zhang等人[16]通过提取汇编码序列, 并将汇编码序列转化为图像对恶意代码进行分类.该方法在精度上取得了良好的效果, 但易受代码混淆技术的干扰.Arefkhani等人[8]通过使用3种不同的哈希算法对恶意代码进行分类, 利用哈希算法提取图像特征, 其中, 使用感知哈希算法取得了很好的分类效果, 而另外两种方法在分类精度上不如感知哈希算法.

恶意代码分类是指将新出现的恶意代码划归到已知的恶意代码类型中, 分类的主要工作就是分类算法的构建.传统的恶意代码分类方法大多使用机器学习算法, 例如, Nataraj等人[3-5]使用K近邻(K-nearest neighborhood, 简称KNN)算法对恶意代码进行分类, 该算法是一种消极学习法, 所以可以为不同的待分类实例构建不同的逼近函数.Wang等人[12]将操作码序列映射为图像, 然后使用支持向量机(support vector machine, 简称SVM)算法对恶意代码进行分类, 该算法可以选择不同的核函数, 生成不同的支持向量机.Yang等人[17]利用随机森林(random forest, 简称RF)算法分类恶意代码, 该算法是由一组决策树分类器(decision tree, 简称DT)组成的集成分类器, 通过决策树的投票决定分类结果.近年来, 研究者开始使用深度学习对恶意代码进行分类.如Zhang等人[16]利用卷积神经网络(convolutional neural network, 简称CNN)对经过处理得到的操作码序列图像分类, 该方法用来处理具有网格结构的数据, 例如时间序列数据和图像等.Davis等人[18]使用循环神经网络(recurrent neural network, 简称RNN)分析恶意代码, 该算法用来处理具有序列结构的数据.David等人[19]将恶意代码动态行为转化维二值向量, 使用深度置信网络(deep belief network, 简称DBN)对恶意代码进行分类, 该算法是建立一个观察数据与标签之间联合分布的概率生成模型.

本文提出的基于深度森林的恶意代码分类方法采用不同恶意代码家族反汇编后的二进制文件作为分类样本集, 该方法结合了方向梯度直方图的特征提取能力和深度森林算法的分类能力, 充分利用了恶意代码图像的空间相似性.此外, 通过实验证实了本文提出的方法优于近期提出的SPAM-GIST方法[3].

2 MCDF方法

本文提出的基于深度森林的恶意代码分类方法主要分为3个阶段:第1阶段为数据预处理阶段, 包含第2.1节和第2.2节; 第2阶段为HOG特征提取阶段; 第3阶段为恶意代码分类阶段.首先需要将恶意代码二进制文件映射为无压缩的灰度图像, 然后根据图像变换方法将图像变换为恒定大小的图像, 使用方向梯度直方图提取图像的特征, 最后利用深度森林算法对恶意代码进行分类.

2.1 恶意代码映射方法描述

为了提取基于图像的恶意代码特征, 我们需要将恶意代码二进制文件映射为图片.对于给定的恶意代码二进制文件, 读取8位二进制数转化为十进制整型(范围为0~255), 并将这些整型重塑为固定行宽的向量, 最后生成一个二维数组, 此二维数组的宽度和高度根据文件大小的不同而不同.最后将此数组可视化为一个灰度图像.映射后的图像被保存为无压缩的PNG图片.恶意代码映射为图像的流程如图 1所示.不同恶意代码家族的恶意代码图片如图 2所示.

Fig. 1 Malicious code mapping flow chart 图 1 恶意代码映射流程图

Fig. 2 Malicious code images of different families 图 2 不同恶意代码家族的恶意代码图片

2.2 基于插值的图像缩放

为了提取维数相等的HOG特征向量, 并且能够得到图像的全局特征, 使用图像插值方法将所有恶意代码图像变换为固定大小的尺寸.为了能够尽量保留恶意代码图像的特征, 使缩放后的图像具有较高的图像质量, 在本文中采用双三次插值算法对恶意代码图像进行缩放.该算法选取恶意代码图像待插值点周围直接相邻的4个点和邻近的12个点, 并使用基函数对此16个点的灰度值做三次插值运算.该算法需要选取插值基函数来拟合数据, 通过如下公式构造基函数.

$W(x) = \left\{ {\begin{array}{*{20}{l}} {(a + 2)|x{|^3} - (a + 3)|x{|^2} + 1, }&{|x| \le 1}\\ {a|x{|^3} + 5a|x{|^2} + 8a|x| - 4a, }&{1 < |x| < 2}\\ {0, }&{{\rm{其他}}} \end{array}} \right. $ (1)

双三次插值公式如下.

$f(x, y) = \sum\nolimits_{i = 0}^3 {\sum\nolimits_{j = 0}^3 {f({x_i}, {y_j})W(x - {x_i})W(y - {y_j})} } $ (2)

其中, (x, y)为恶意代码图像中待插值的像素点, (xi, yi)(i, j=0, 1, 2, 3)为该像素点4×4邻域点.

2.3 HOG特征提取

方向梯度直方图特征是用于物体检测的特征描述子, 该方法从像素级别生成图像的梯度, 然后将图像分割为多个细胞单元并统计每个细胞单元的梯度直方图, 结合多个细胞单元形成块并计算每个块的HOG特征, 最后收集所有块的特征组成图像的HOG特征.在HOG的计算过程中, 采用由像素点到块、由块到HOG的特征提取方法可以很好地捕捉到图像的信息.此外, 在计算梯度直方图时, 只考虑各个像素点的梯度大小和方向而不考虑像素点间的位置关系, 这样可以在一定程度上解决二进制文件重新分配的问题.

(1) Gamma校正法标准化

为了提高恶意代码图像的对比度, 同时抑制噪音的干扰, 本文采用Gamma校正法对恶意代码图像进行颜色空间的标准化.Gamma校正公式如下.

$I\left( {x, y} \right) = I{\left( {x, y} \right)^{Gamma}} $ (3)

(2) 图像梯度的计算

计算图像横坐标和纵坐标方向的梯度, 并据此计算每个像素的梯度幅值和梯度方向.图像中像素点(x, y)的梯度为

${G_x}\left( {x, y} \right) = H\left( {x + 1, y} \right) - H(x - 1, y) $ (4)
${G_y}\left( {x, y} \right) = H(x, y + 1) - H(x, y - 1) $ (5)

其中, H(x, y), Gy(x, y), Gx(x, y)分别表示输入恶意代码图像中像素点(x, y)处的像素点坐标、垂直方法梯度和水平方向梯度.在本文中, 使用[-1, 0, 1]梯度算子在恶意代码图像x方向进行卷积计算, 使用[1, 0, -1]T梯度算子在y方向做卷积运算, 分别得到恶意代码图像x方向梯度分量Gx(x, y)和y方向的梯度分量Gy(x, y).然后, 使用如下公式计算恶意代码图像的梯度幅值G(x, y)和梯度方向α(x, y).

$G(x, y) = \sqrt {{G_x}{{(x, y)}^2} + {G_y}{{(x, y)}^2}} $ (6)
$\alpha (x, y) = {\tan ^{ - 1}}\left( {\frac{{{G_y}(x, y)}}{{{G_x}(x, y)}}} \right) $ (7)

(3) 梯度方向直方图的构建

为了构建恶意代码图像梯度方向直方图, 我们将图像分割成n×n个像素组成的细胞单元, 采用bin个方向的直方图统计每个细胞单元的梯度信息, 然后将细胞单元内每个像素的梯度幅值用梯度方向映射到直方图中固定的角度范围, 即可形成每个细胞单元的恶意代码特征描述符.

(4) 块内归一化梯度直方图

结合空间上连通的几个细胞单元组合成块, 将一个块内所有细胞单元的特征向量按一定方式串联起来, 就得到该块的HOG特征, 然后将每个块的HOG特征向量进行归一化.归一化公式如下.

$V' = \frac{V}{{||V|{|_2}}} $ (8)

其中, VV'为归一化前和归一化后HOG特征向量, ||V||2为特征向量Vl2-范数.由于这些块是互有重叠的, 这就意味着每一个细胞单元的特征会以不同的结果多次出现在最后的特征向量中.我们将归一化后的块描述符称为恶意代码HOG描述符.

(5) HOG特征收集

最后, 收集恶意代码图像中所有块的HOG特征V', 结合成最终的特征向量f={V'1,V'2,…,V'n}.图 3所示为HOG特征提取流程.

Fig. 3 HOG feature extraction process 图 3 HOG特征提取流程

2.4 恶意代码分类

前面我们已经提取恶意代码图像的HOG特征, 现在需要通过算法对恶意代码进行分类, 接下来我们分两部分描述深度森林算法对恶意代码的分类过程.

●  第1部分从决策树的角度描述随机森林生成的过程, 随机森林为组成深度森林的基本结构.

●  第2部分描述深度森林算法对恶意代码分类的具体过程.

(1) 随机森林生成

随机森林是由一组决策树分类器{h(X, θk), k=1, …, K}组成的集成分类器, 其中, K表示随机森林中决策树的个数, {θk}是服从独立同分布的随机向量.

生成随机森林的步骤如下.

1)   应用bootstrap方法有放回的从训练样本集中随机抽取K个新的自助样本集, 并将未被抽到的样本组成K个袋外数据, 然后使用抽到的样本构建K棵决策树.

2)   设有n个特征, 则在每棵树的每个节点处随机抽取m(mn)个候选特征, 并计算每个候选特征的基尼指数(Gini_index), 然后, 选择具有最小基尼指数值的特征进行节点分裂.

3)   当每棵树中的节点中只有一个类别或节点中的样本数小于最小分裂级数时, 停止生长.

4)   将生成的K棵树组成随机森林, 新的数据使用该随机森林进行分类, 并将决策树的投票结果作为分类结果.

其中, 基尼指数(Gini_index)的计算方法如下.

$Gini(D) = 1 - \sum\nolimits_{k = 1}^{|y|} {p_k^2} $ (9)
$Gini\_index(D, a) = \sum\nolimits_{V = 1}^V {\frac{{|{D^V}|}}{{|D|}}Gini({D^V})} $ (10)

其中,

●  公式(9)为基尼值的计算方法, 其中, |y|和pk为数据集D的类别数量和每个类别占总数据集的比例.

●  公式(10)中, Gini(DV), |D|, |DV|, a分别为类别V的基尼值、样本总数、类别V的样本总数以及需要划分的特征.

完全随机森林生成过程与随机森林生成过程的第2步稍有差别, 完全随机森林生成过程中每棵树随机选取一个特征作为分裂树的分裂节点, 其他步骤和随机森林生成过程一样.

(2) 分类方法

深度森林是由多粒度扫描和级联森林两部分组成的多层结构, 每层由相等数量的随机森林和完全随机森林组成.本文中随机森林在进行节点分裂时每次随机选取$\sqrt d $(d为特征维数)个特征作为候选特征.

接下来, 将恶意代码HOG特征向量转化为矩阵, 并且分为训练集和测试集:训练集用于训练深度森林, 测试集用来评估深度森林.

图 4所示, 多粒度扫描阶段, 使用滑动窗口W×W和扫描步长S扫描恶意代码训练集样本, 将每个窗口中的特征作为多粒度扫描森林的输入, 输出每个窗口中特征的概率向量; 然后, 将所有输出的概率向量按一定方式串联作为级联森林的输入.

Fig. 4 Multi-grained scanning 图 4 多粒度扫描

图 5所示, 级联森林的第1级将多粒度扫描的输出结果作为输入, 在此后的每一级都将多粒度扫描后的概率向量和前一级级联森林的输出作为下一级的输入.在此过程中, 级联森林每增加一级, 就使用测试集样本对已经生成的整个深度森林进行测试, 如果测试集的准确率小于前一层的准确率, 深度森林停止生长, 级联层不在增加; 否则, 继续增加级联层, 直到测试集的准确率小于前一层的准确率为止.最后一级, 对所有输出的概率向量取均值, 输出具有最大概率那一类的标签, 作为最终恶意代码预测结果.

Fig. 5 Cascade forest structure 图 5 级联森林结构

3 实验评价 3.1 实验环境和实验数据集

基于深度森林的恶意代码分类系统, 运行的CPU为Intel(R) Core(TM) i7-6800K双核处理器, 配置两块4GB DDR3L内存; 操作系统使用64位Windows10.恶意代码映射、HOG特征提取以及分类使用Python语言, 相关包为Anaconda3-4.3.1-Windows-x86_64, 包含实验过程中所有用到的包.

本文使用的恶意代码数据集来自于Microsoft在Kaggle上的项目——Microsoft Malware Classification Challenge[20].本文选取7个类别的9 929条恶意代码二进制文件进行实验, 基本信息见表 1.

Table 1 Malicious code dataset 表 1 恶意代码数据集

3.2 评价标准

本文采用准确率(accuracy)、宏F1(macro-F1)两种评价指标评价深度森林算法对恶意代码的分类效果, 计算公式如下.

$Accuracy = \frac{{TP + TN}}{{TP + TN + FP + FN}}$ (11)
$P = \frac{{TP}}{{TP + FP}}$ (12)
$R = \frac{{TP}}{{TP + FN}}$ (13)
$macro{\rm{ - }}P = \frac{1}{n}\sum\nolimits_{i = 1}^n {{P_i}} $ (14)
$macro{\rm{ - }}R = \frac{1}{n}\sum\nolimits_{i = 1}^n {{R_i}} $ (15)
$macro{\rm{ - }}F1 = \frac{{2 \times macro{\rm{ - }}P \times macro{\rm{ - }}R}}{{macro{\rm{ - }}P + macro{\rm{ - }}R}}$ (16)

其中, TP, FP, FN, TN分别表示被分类器识别为正的正样本、被分类器识别为正的负样本、被分类器识别为负的正样本、被分类器识别为负的负样本.macro-P, macro-R为宏查准率和宏查全率.

3.3 实验结果分析

在实验中, 我们选用数据集的80%作为训练集, 20%作为测试集.在本文中, 将恶意代码图像缩放为128×128个像素的图像, 每个细胞单元为16×16个像素, 采用8个方向的直方图来统计这16×16个像素的梯度信息, 然后将每4个单元格形成一个大的、连通的块, 形成1 568维的HOG特征向量, 最后将特征向量转化为49×32的二维矩阵.其中, 在数据处理阶段的Gamma值取0.5.

(1) 方法比较

我们使用我们的MCDF方法与SPAM-GIST[3]进行了比较.在MCDF中, 多粒度扫描和级联结构都包含两个森林、每个森林包含1 000棵树以及每棵树的最小分裂级数为10, 扫描阶段窗口大小为32×32、步长1.在SPAM- GIST实验中, K近邻(K-nearest neighbor, 简称KNN)分类算法的K=3, 采用10折交叉验证(tenfold cross validation)估计每个样本的类别.此外, 使用10折交叉验证的KNN分类算法对HOG特征进行分类(MCKNN), 并使用深度森林算法对文献[3]中320维的GIST特征进行分类(GIST-DF), 其中, 对GIST特征进行分类时, 将320维特征向量转化为20×16的二维矩阵, 深度森林扫描阶段窗口大小为16×16, 其他参数与MCDF实验相同.在本文中, 4组实验分别进行10次, 取最好的结果作为最终结果, 实验结果见表 2.

Table 2 Experimental results of MCDF and SPAM-GIST 表 2 MCDF与SPAM-GIST实验结果

(2) 分类器对比

为验证深度森林的分类性能, 本文使用深度学习方法人工神经网络(artificial neural network, 简称ANN)和传统的机器学习方法随机森林(random forest, 简称RF)对本文提取的HOG特征向量进行分类.其中, ANN包含3个隐藏层, 每个隐藏层包含的节点个数为1 000、500、100.随机森林由1 000棵决策树组成.实验结果见表 3.

Table 3 Experimental results of different classifiers 表 3 不同分类器的实验结果

表 3可知, 深度森林的分类性能优于ANN和RF.

(3) 参数敏感性分析

为了验证深度森林不同参数对实验结果的影响, 本文通过改变深度森林中多粒度扫描结构中窗口大小(windows)以及每个森林中树的数量(mgsRFTree)和最小分裂级数(msmgs)、级联结构中的森林数量(csdRF)和每个森林中树的数量(csdRFTree)和最小分裂级数(mscsd)对本文中的算法进行评价, 每个参数设定下做10组实验, 并对实验结果取平均值作为最终结果, 实验结果如图 6所示.

Fig. 6 Experimental results of different parameters 图 6 不同参数实验结果

图 6(a)图 6(b)可以看出, 当改变参数csdRFTreecsdRF时, 对实验结果几乎没有影响; 由图 6(c)图 6(f)可以看出, 当mgsRFTreewindow增加时, 算法的整体分类性能变得越来越好; 由图 6(d)图 6(e)可以看出, 随着msmgsmscsd的增加, 算法的整体分类性能变得越来越差.

3.4 讨论

实验中, 选择多个家族的恶意代码样本进行测试, 验证了本文提出的分类方法的有效性.本文通过提取恶意代码图像的HOG特征来对恶意代码进行分类.该特征的提取过程中, 首先从像素级别计算图像的梯度, 然后在细胞单元中统计梯度直方图, 在块中计算每个块的HOG特征, 最后收集所有块的特征组成图像的HOG特征.这种由点到局部、由局部到整体的方法可以很好地捕捉到图像的信息, 在统计细胞单元内的梯度直方图时, 只考虑各个像素点的梯度大小和方向而不考虑像素点间的位置关系, 这样可以在一定程度上解决二进制文件重新分配的问题.此外, HOG特征是由各个块中的局部特征组成, 因此, HOG特征向量中隐含了该块的空间位置关系, 当深度森林的扫描窗口对特征扫描时, 每个窗口中包含多个块内的特征, 每个HOG特征向量分割为多个片段, 这样可以提高表征学习能力和注意到更长的上下文信息, 提高分类准确率.

4 总结

本文提出了一种基于深度森林的恶意代码分类方法, 通过结合图像分析技术与恶意代码分类技术, 将恶意代码二进制文件映射为无压缩的灰度图片, 然后根据图像变换方法将图像变换为恒定大小的图像, 使用方向梯度直方图提取图像的特征, 并将这些特征作为恶意代码的本质特征, 最后使用深度森林算法对恶意代码进行分类.实验中, 对不同家族的恶意代码样本进行测试, 验证了本文提出方法的有效性, 并且优于近期提出的SPAM- GIST方法.在下一步工作中, 我们将利用深度学习对恶意代码进行分析, 进一步提高分类精度.

参考文献
[1]
Corporation S. Internet security threat report 2013. 2014. https://www.facebook.com/Symantec
[2]
InfoRiskToday. The need for speed: 2013 incident response survey, FireEye. 2016. http://www.inforisktoday.in/surveys/2013-incident-response-survey-s-18
[3]
Nataraj L, Manjunath BS. SPAM: Signal processing to analyze malware. IEEE Signal Processing Magazine, 2016, 33(2): 105-117. [doi:10.1109/MSP.2015.2507185]
[4]
Nataraj L, Yegneswaran V, Porras P, et al. A comparative assessment of malware classification using binary texture analysis and dynamic analysis. In: Proc. of the ACM Workshop on Security and Artificial Intelligence. ACM, 2011, 21-30. http://cn.bing.com/academic/profile?id=b3f2bdb53d2b3d4a2a8dfa7ba20dc782&encoded=0&v=paper_preview&mkt=zh-cn
[5]
Nataraj L, Karthikeyan S, Jacob G, et al. Malware images: Visualization and automatic classification. In: Proc. of the Int'l Symp. on Visualization for Cyber Security. ACM, 2011, 1-7. http://d.old.wanfangdata.com.cn/Periodical/zjdxxbc-e201709013
[6]
Kancherla K, Mukkamala S. Image visualization based malware detection. In: Proc. of the Computational Intelligence in Cyber Security. IEEE, 2013, 40-44. http://d.old.wanfangdata.com.cn/NSTLHY/NSTL_HYCC0213726142/
[7]
Han KS, Lim JH, Kang B, et al. Malware analysis using visualized images and entropy graphs. Int'l Journal of Information Security, 2015, 14(1): 1-14. [doi:10.1007/s10207-014-0242-0]
[8]
Arefkhani M, Soryani M. Malware clustering using image processing hashes. In: Proc. of the Machine Vision and Image Processing. IEEE, 2016, 214-218. http://cn.bing.com/academic/profile?id=b116e4a6d8334a4f71b2b5ceab58b1a1&encoded=0&v=paper_preview&mkt=zh-cn
[9]
Zhou ZH, Feng J. Deep forest: Towards an alternative to deep neural networks. 2017. http://xueshu.baidu.com/usercenter/paper/show?paperid=637f02600a538dc721ff4c3213ce2b7a&site=xueshu_se&hitarticle=1
[10]
Dalal N, Triggs B. Histograms of oriented gradients for human detection. In: Proc. of the IEEE Computer Society Conf. on Computer Vision and Pattern Recognition (CVPR 2005). IEEE, 2005, 886-893. http://cn.bing.com/academic/profile?id=0796294dc798795c12f84f5b2edabaef&encoded=0&v=paper_preview&mkt=zh-cn
[11]
Mao WX, Cai ZM, Tong L. Malware detection method based on active learning. Ruan Jian Xue Bao/Journal of Software, 2017, 28(2): 384-397(in Chinese with English abstract). http://www.jos.org.cn/1000-9825/5061.htm [doi: 10.13328/j.cnki.jos.005061]
[12]
Wang T, Xu N. Malware variants detection based on opcode image recognition in small training set. In: Proc. of the IEEE Int'l Conf. on Cloud Computing and Big Data Analysis. IEEE, 2017. http://cn.bing.com/academic/profile?id=0cdeeaf0b9084e126f90c178788be041&encoded=0&v=paper_preview&mkt=zh-cn
[13]
Farrokhmanesh M, Hamzeh A. A novel method for malware detection using audio signal processing techniques. In: Proc. of the Artificial Intelligence and Robotics. IEEE, 2016, 85-91. http://cn.bing.com/academic/profile?id=5c167894fe300677536310e463485639&encoded=0&v=paper_preview&mkt=zh-cn
[14]
Nataraj L, Karthikeyan S, Manjunath BS. SATTVA: SpArsiTy inspired classificaTion of malware VAriants. In: Proc. of the ACM Workshop on Information Hiding & Multimedia Security. ACM, 2015. http://d.old.wanfangdata.com.cn/Periodical/dhyj201406007
[15]
Han XG, Qu W, Yao XX, et al. Research on malicious code variants detection based on texture fingerprint. Journal on Communications, 2014, 35(8): 125-136(in Chinese with English abstract). [doi:10.3969/j.issn.1000-436x.2014.08.016]
[16]
Zhang J, Qin Z, Yin H, et al. IRMD: Malware variant detection using opcode image recognition. In: Proc. of the IEEE Int'l Conf. on Parallel and Distributed Systems. IEEE, 2017, 1175-1180. http://d.old.wanfangdata.com.cn/Conference/8155927
[17]
Yang M, Wen Q. Detecting Android malware by applying classification techniques on images patterns. In: Proc. of the IEEE Int'l Conf. on Cloud Computing and Big Data Analysis. IEEE, 2017, 344-347. http://cn.bing.com/academic/profile?id=6f52fe018185a1a66ada031286bdf85c&encoded=0&v=paper_preview&mkt=zh-cn
[18]
Davis A, Wolff M, Soeder DA, et al. Recurrent neural networks for malware analysis. U.S. Patent 9, 495, 633, 2016-11-15.
[19]
David OE, Netanyahu NS. DeepSign: Deep learning for automatic malware signature generation and classification. In: Proc. of the 2015 Int'l Joint Conf. on Neural Networks (IJCNN). IEEE, 2015, 1-8. http://d.old.wanfangdata.com.cn/NSTLHY/NSTL_HYCC0214989506/
[20]
[11]
毛蔚轩, 蔡忠闽, 童力.一种基于主动学习的恶意代码检测方法.软件学报, 2017, 28(2): 384-397. http://www.jos.org.cn/1000-9825/5061.htm [doi: 10.13328/j.cnki.jos.005061]
[15]
韩晓光, 曲武, 姚宣霞, 等. 基于纹理指纹的恶意代码变种检测方法研究. 通信学报, 2014, 35(8): 125-136. [doi:10.3969/j.issn.1000-436x.2014.08.016]