Press "Enter" to skip to content

使用深度学习和可视化技术识别恶意软件家族

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

 

恶意软件日益增长的威胁变得越来越难以忽视。在本文中,一种恶意软件特征图像生成方法被用于将恶意代码的静态分析与循环神经网络(RNN)和卷积神经网络(CNN)的方法相结合。通过使用RNN,本文方法不仅考虑了恶意软件的原始信息,还考虑了将原始代码与时序特征相关联的能力;此外,该过程减少了对恶意软件类别标签的依赖。然后使用 minhash 从原始代码和来自 RNN 的预测代码的融合中生成特征图像。最后,训练一个 CNN 来对特征图像进行分类。当训练很少的样本时(训练数据集的样本大小与验证数据集的比例为 1:30),获得了 92% 以上的准确率;当将比例调整为 3:1 时,准确率超过 99.5%。如混淆矩阵所示获得了良好的结果,其中所有恶意软件家族的最差误报率为 0.0147,平均误报率为 0.0058。

 

0x01 Introduction

 

MALWARE是恶意软件的缩写,这种软件专门设计用于在未经所有者许可的情况下访问或损坏计算机,并且增长速度非常快。赛门铁克的一份互联网安全威胁报告显示,2015 年发现了超过 4.3 亿个新的独特恶意软件,比前一年增加了 36%。随着计算机技术在日常生活中的影响越来越大,恶意软件(也称为恶意代码)对现代生活的威胁越来越大。例如,WannaCry,一种加密勒索软件蠕虫,于 2017 年 5 月 12 日星期五受到攻击,影响了 150 多个国家的 200,000 人。台式电脑、智能手机,甚至是家中或办公室周围的联网智能设备,都可能容易受到大量恶意软件的攻击。攻击者可以获得巨额利润并且难以追踪。

 

目前,根据程序是否被执行,恶意代码分析可分为静态分析和动态分析。传统的静态分析非常快速和强大,但是当恶意代码使用压缩或加密的二进制文件时,它不能很好地工作。此外,一些现代恶意软件是使用混淆技术编写的,以挫败此类分析。混淆背后的基本思想是,要幺将原始代码的某些指令替换为语义等效但更难分析的程序片段,要幺向程序中添加不改变其行为的额外指令。当使用动态分析时,恶意软件设计者会测试调试器并需要一些输入或使用其他规避技术来击败动态分析。

 

 

最近,深度学习技术在许多领域取得了颠覆性的成果。循环神经网络 (RNN) 是最强的神经网络,已应用于语言模型、在线手写识别和生成以及语音识别。卷积神经网络 (CNN) 在图像识别领域也占主导地位。在本文中提出了一种名为 RMVC 的静态分析方法,它是由 4 个词的首字母组合而成:RNN、minhash、visualization 和 CNN。使用RMVC来分析汇编语言操作代码,完成恶意代码的分类。 RNN 擅长处理顺序信息,用它来处理汇编语言操作代码。 Minhash可以生成相同维度的特征。 CNN擅长处理网格信息,恶意代码的可视化也取得了不错的效果。这些技术也可以结合使用。特别是由于 RNN,本文方法能够在没有类别标签的情况下获取有关恶意代码的知识。

 

0x02 RMVC Method

 

使用静态分析方法来分析恶意软件。 RMVC 由 4 个部分组成,如下图所示:提取操作码、训练 RNN、生成特征图像和训练 CNN。 RNN 模型在自然语言处理方面取得了巨大成功,并且代码语言也对上下文敏感。将反汇编代码发送到 RNN,这些反汇编代码取自未标记的数据。恶意软件反汇编的结果是代码块,这可以看作是恶意软件的局部特征。每个代码块的内部都序列化了时序特性。 RNN 可以掌握更具代表性的时序特征,自主研究每个恶意软件的特征,直到掌握大部分特征。

 

 

事实上,在 2010 年就已经通过将恶意代码转换为灰度图像,从而看到不同恶意代码家族之间的差异。这种方法的局限性在于恶意代码的长度不同,生成的特征图像的大小也不同,因此不能直接应用于CNNs。同时,使用统一尺寸会导致两个问题:

 

1)图像尺寸太小,导致恶意代码的某些特征图像丢失关键信息,或无法提供足够有价值的信息。

 

2)如果图像尺寸很大,CNN的训练时间会很长。此外,将图像设置得足够大是不现实的,因为恶意代码的长度理论上是无限的。

 

为了提高分类效果,越来越多的研究人员将神经网络应用于恶意代码分析。本文使用了局部敏感哈希,可以解决特征图像大小不相同的问题。它还可以从操作码中提取局部敏感信息,并使相同的局部信息看起来与特征图像中的可视化信息相同。与包含单一信息的方法相比,在处理信息中加入RNN可以提高分类效果。最后,将特征图像发送到 CNN 进行训练和分类。 CNN 可以发现代码块的局部特征。通过训练好的浅卷积核特征,可以分析不同恶意软件的局部特征,推断哪些恶意特征反映了代码的恶意。到目前为止,使用 CNN 提取图像局部特征是不同可视化方法生成的特征图像的不错选择。

 

B.提取操作码

 

使用反汇编程序可以获得反汇编代码。为简单起见,只考虑操作码。 opcode有很多,所以只考虑经常使用的255种,其余的归为第256种。实验数据来自 2015 年 Kaggle 微软件恶意软件分类挑战赛:根据文件内容和特征将恶意软件分类为家族。例如在收集到的数据中,有735种操作码,其中经常出现的255种占总数的99.98%,其余480种仅占0.02%。

 

C.训练RNN

 

恶意代码经过处理后,仅包含256种操作码。不能直接将操作码放入神经网络,使用 0-255 整数表示每个操作码,它可以有 256 (=2^8) 个可能值之一。将操作码转换为 1-hot 向量。对于 256 种操作码,编码长度为 256。1-hot 向量增加了 RNN 中操作码片段之间的差异。每个1-hot编码只包含一个1,向量中的其他位置都是0。操作码的整数决定了1在1-hot向量中的位置。例如操作码56的1-hot代码如公式(1):

 

 

构建了一个双向 RNN,具有一个输入层、三个隐藏层(每个有 386 个 GRU)和一个 softmax 输出层。考虑到 RNN 训练中的梯度消光和梯度爆炸问题,不使用 LSTM(下图a)而是使用 GRU(下图b)。与 LSTM 相比包含更少的训练参数,并且每次迭代需要更少的时间和空间资源。使用 LSTM 或 GRU 比使用传统的 tanh 单元要好。然而,很难确定哪个更好。在实验部分讨论了 RNN 的结构。在权衡计算速度和准确性后,采用了 GRU。

 

 

 

在训练如下图所示的 BRNN 时,设置了一个长度为 K 的滑动窗口。超参数 K 决定了 BRNN 的学习效果。 K既不能太小也不能太大。如果K太小,特征中包含的信息可能不足以做出正确的预测;另一方面,K 过大会增加 BRNN 中学习长期依赖的压力,这使得训练更加困难且准确率较低。与传统的 RNN 不同,BRNN 基于这样一种思想,即预测不仅取决于先前输入的信息,还取决于整个输入序列的信息。例如,要预测序列中丢失的单词,您应该同时查看左右上下文。 RNN 预测每个滑动窗口中的第 M 个操作码。换句话说,每次使用滑动窗口中的前(M-1)个操作码和窗口中的后(K-M)个操作码来预测窗口中的第 M 个操作码。参数M决定了预测影响前后信息的大小。如果预测依赖较少的先前信息,可以设置较小的 M,相反,如果预测需要较少的未来信息,可以设置较大的 M。总之,RNN 的输入和输出规范与公式(2)、(3)一样。

 

 

RNN 的优势在于其处理序列信息的能力。在训练中使用 BRNN 从一个相同大小的滑动窗口中提取信息,并预测滑动窗口中的第 M 个操作码,如上图所示。 处理一个滑动窗口后,恶意代码的窗口下降通过一个操作码距离并继续预测下一个滑动窗口中的第 M 个操作码。相邻的滑动窗口之间只有一个区别。 RNN 预测每个窗口。对于数以百万计的滑动窗口,如果要做出准确的预测,则需要更多的信息。 RNN 将更快地学习公共信息,更慢地学习特定于每段恶意代码的独特信息。过分关注唯一信息会导致过拟合,无助于找到恶意代码的共同特征。因此,现阶段没有必要追求过度的准确性。该想法首先基于这样一个事实,即每个恶意代码家族中的恶意代码都具有相似的特征,这是其他家族无法发现的。恶意软件反汇编的结果是代码块,可以将其视为局部特征。每个代码块的内部都序列化了时序特性。使用 RNN 有助于提供更具代表性的时序特征。

 

 

如上图所示,恶意代码族中的相似特征是通过使用 RNN 学习到的。 RNN 通过在滑动窗口中使用操作码(没有圆圈中的操作码)来预测圆圈中的操作码。神经网络具有很强的泛化能力。即使滑动窗口内的操作码序列略有不同,RNN 也会非常快速地学习相似的序列特征。在反向传播阶段,参数沿与损失函数梯度相反的方向更新。梯度方向是损失函数变化最大的方向。为了使损失函数尽快下降,滑动窗口的预测结果将是同类窗口最常见的操作码。因此,即使原始恶意代码序列的几个部分不同,RNN 也会通过生成预测序列使同一家族中的恶意代码更加相似。

 

将原始序列与 RNN 预测信息相结合,包含了信息融合的思想。原始序列反映了每个恶意代码的独特特征,RNN 预测序列反映了恶意软件家族内的共同特征。与单一信息来源相比,这种组合会产生更准确、更全面的判断。由于使用 RNN,它可以在不给定类别标签的情况下对恶意软件进行分类。使用 RNN 可以改善所有实验中的分类结果。

 

D.Minhash

 

Minhash是一种局部敏感哈希,可用于快速估计两个集合的相似度。最初,它用于检测搜索引擎中的重复页面。它也可以应用于大规模聚类问题。Minhash 使用 Jaccard 索引的思想来计算两个集合之间的相似度。对于集合 A 和集合 B,Jaccard 指数是它们的交集的基数与其并集的基数之间的比率。 A 和 B 之间的相似性如公式(4):

 

 

将 h(x)定义为将 x 映射到整数的哈希函数,而 hmin(S)是集合 S 中的所有元素被 h(x)映射到整数后的最小哈希值。如果 h(x)是一个很好的散列函数,它将把不同的元素映射成不同的整数。对于不同的集合 S1 和集合 S2,hmin(S1)=hmin(S2) 的条件是 S1∪S2 中的最小元素也在 S1∩S2 中。Minhash 可以使用多个哈希函数重复上述操作。例如,可以选择 k 个哈希函数:

 

 

然后使用哈希函数分别对集合 S1 和集合 S2 进行 hmin(S)运算:

 

 

然后,得到集合MINS1 和集合MINS2 。集合 S1 和集合 S2 之间的相似度为:

 

 

如算法 1 所示,每个恶意代码样本样本 i 可以形成一个集合 Si 。使用每个恶意代码样本中的 3 个连续操作码来组成一个元素并形成包含这些元素的集合。如果minhash只使用单一的操作码,结果过于简单,由于不同恶意软件家族之间的差异太小,minhash无法反映特定恶意软件代码的特征;如果使用很长的操作码序列,从不同恶意软件中提取的特征将在每个样本上过拟合,并且无法看到恶意软件家族的通用性。一个 3-gram 最多只有 256*256*256 个不同的序列,这个长度对于恶意代码是安全的。

 

 

将 Minhash(如算法 2 所示)应用于每个集合 Si 并获得结果 MINSi 。散列函数的格式如下:

 

 

其中 mod 是一个非常大的数字,例如4294967311。 coei,1 和 coei,2 是由随机数生成器生成的系数。由于使用随机数生成器来生成哈希函数的系数(coei;1 和 coei;2),所以必须确保每次的随机种子都是相同的。最后可以使用结果来评估样本之间的相似性,并将结果转换为特征图像。

 

 

E.生成特征图像

 

恶意代码可视化方法在静态分析领域取得了很好的效果。在这个阶段,第一个问题是如何在不丢失有效信息的情况下生成一致的特征图像。对于来自同一家族的恶意代码,代码中的有效信息非常相似。因此使用 minhash 来处理每一段恶意代码。如上所述,minhash 是一种局部敏感的哈希,它对输入项进行哈希处理,以便相似的项以高概率映射到相同的结果。而且,同一个minhash得到的信息长度是一致的。

 

 

 

当使用 minhash 时,可以从每段恶意代码中获取 n 个哈希值。设置一个非常大的质数作为minhash的初始值,以最好的保证n个hash值都大于256^2。然后,每个hash值除以256的模3次,每个余数分别赋值给x,y和 z 。将特征图像的大小设置为 128*128。虽然 x 和 y 的范围是[0; 255],没有将图片的大小设置为 256*256 。如果大小过大,图像中的有效信息会过于稀疏,并在 CNN 训练过程中造成一些困难。因此,将图片的长度和宽度缩小到原始尺寸的一半。特征图像中该哈希值的含义是,图像中点(x=2;y=2)处的像素灰度值为z。如上图所示,可以将 n 个哈希值映射到特征图像中。即使不使用 BRNN 预测信息,来自同一家族的特征图像也非常相似。除了原始代码,BRNN 还会根据恶意代码生成新的预测序列。然后将 minhash 应用于预测序列。每个预测序列还能够生成 n 个哈希值。最后,使用所提出的方法将哈希值映射到特征图像。

 

 

如上图所示,融合了原始序列和预测序列的信息,以做出更准确的预测。 RNN 的预测信息会消除原始数据中的一些噪声,并添加有助于分类的信息。同时,它会丢失一些有用的信息。这个问题在之前使用 RNN 的研究中也存在。正是出于这个原因,将原始代码序列和预测序列都映射到同一特征图像中。所以即使RNN预测序列中丢失了一些有用的信息,某些位置的像素丢失,原始序列仍然可以在像素处生成有用的特征信息。那些有缺陷的特征点映射到大多数其他恶意代码家族的概率也极低,不会造成误分类。

 

 

上图是一个使用 BRNN 的例子。一张 BRNN 预测的特征图像最多包含 2n 个像素,不仅包括原始恶意代码的视觉信息,还包括 BRNN 提取的预测序列。将BRNN提取的信息加入特征图像后,提高了预测的泛化能力。 BRNN 由没有类别标签的恶意代码训练,并学习了很多类似的信息。当使用 BRNN 生成预测序列时,它可以将从训练信息中学到的最接近的信息与当前的恶意代码相关联。因此,即使攻击者修改了一些代码,RNN 预测序列也会带来类似的信息,为恶意代码的分类提供新的特征。每个特征图像最多有 2n 个像素,其中包含原始操作码生成的 n 个像素和使用 BRNN 的预测序列生成的 n 个像素。

 

F.训练CNN

 

每个恶意软件都可以生成特征图像。来自同一个恶意家族的特征图像非常相似,不同的恶意家族只包含几个共同的特征。在CNN结构的设计中,还使用了VGGnet等更复杂的结构。但是在实验过程中,发现网络很少收敛(没有收敛到特征图像上)。由于特征图像是散点图,已经能够在两个池化操作之间仅使用一个卷积层来提取足够的信息。这样就可以降低训练难度,快速缩小规模。两个或多个连续的卷积层也会增加特征图的收敛难度。

 

 

设计了一个具有 5 个卷积层的 CNN,如上图所示。 CNN 结构包含一个输入层、四个卷积池化层、一个全连接层和一个 softmax 输出层。 Tanh 是激活函数。每次池化操作接收前一个卷积层的最后输出,pooling_size设置为2*2。另外,当恶意特征数量过多时,CNN可以显着减少参数数量,降低训练难度通过网络稀疏连接和权重共享。由于特征点的映射,收敛速度非常快。一旦不同特征图像中的特征相同,则映射位置必须相同。不会像图像分类问题中的特征那样有位移信息,图像中特征点的数量是有限的。因此分类比较容易,收敛速度也很快。

 

0x03 Experiments and Results

 

A.实验数据集

 

实验数据来自 2015 年 Kaggle 微软件恶意软件分类挑战赛,目标是根据文件内容和特征对恶意软件进行家族分类 。选择了 6 种恶意代码,共 3557 个样本,如下表所示。将样本随机分为 3 部分:Dataset1 1470 个样本,双向 RNN(BRNN)将仅在这个数据集。 Dataset2 有 2663 个样本,包括 Dataset1 中的所有样本,其中 BRNN 没有看到这个集合中的其余样本。 Dataset3 包含 894 个样本,这些样本既没有被 BRNN 研究过,也没有包含在Dataset2 中。每个数据集中每个恶意家族的比例都不相同。如果比例相同,样本越多的家庭被正确分类的概率就越大。也就是说,正确的分类结果可能不是由方法的质量造成的。此外,从Dataset1 中提取了 49 个样本来组成Dataset(49)。这些样本仅占总样本的一小部分,以便在极少数样本中评估所提出方法的泛化能力。这些样本在测试中包含了各种恶意家族,有的家族有更多的样本(10个样本),有的家族只有3个样本。拆分会增加分类的难度。每个恶意软件家族的详细分布如下表所示。

 

 

总的来说,Dataset1的用途如下:

 

1) Dataset1 中的样本将通过 BRNN 进行无标签学习。

 

2)在极少的训练样本测试中,作为测试数据来衡量BRNN学习到的样本对分类的影响。

 

3) 将其作为训练数据,然后将训练好的模型用于测试Dataset3。

 

Dataset2只有一个函数作为训练集,然后用训练好的模型来测试Dataset3。

 

Dataset3 有两个功能:

 

1)在极少数样本训练测试中,作为测试数据来衡量对BRNN未学习到的样本的分类效果。

 

2)在训练Dateset1和Dataset2时用作测试数据。

 

使用 keras-2.0.8 在 python 中实现了模型,并选择 tensorflow-1.0.1 作为后端。实验平台硬件配置为:Intel(R) Xeon(R) CPU E5-2640 [email protected] GHz *2, Tesla P100 16 GB*2, 128 GB RAM。

 

C.训练RNN

 

在尝试了不同的网络结构之后,发现 LSTM 和 GRU 在不同的层上有不同的效果。如下表所示,最好使用两层 LSTM 结构和三层 GRU 结构。 GRU 结构计算速度更快,因此设计了 3 层 GRU 结构 RNN。

 

 

本文还比较了 1-hot 和词嵌入。词嵌入确实是一个非常有效和有趣的想法,它似乎比 1-hot 提供了更多的信息。还补充了词嵌入和 1-hot 之间的对比测试。然而,实验结果表明,特别是对于恶意代码,词嵌入并不优于 1-hot。收敛速度稍慢,准确率和1-hot embedding差不多。与自然语言相比,恶意代码中操作码的数量要少得多,使用操作码和使用自然语言在方法上也有明显的区别。关于 1-hot 输入层和第一个隐藏层的参数也可以看作是词嵌入的一种形式,同一窗口中的操作码将有类似的更新。这些更新会累积,具有相似模式的操作码会在相当程度上累积这些类似的更新。

 

 

使用RNN滑动窗口,需要考虑K值和M值。 如上图所示,当滑动窗口大小固定(K为固定)时,RNN能够学习恶意家族的特征当 M 接近 K=2 时更好。因此,要预测的操作码应该设置在滑动窗口的中心附近。对于滑动窗口(K)的大小,K越小,训练速度越快;但是,适当增加窗口大小可以更好地拟合数据。

 

最后,在训练 BRNN 时, dataset1 来学习没有类别标签的恶意代码。 BRNN 包含 3 个隐藏层,每个隐藏层有 384 个 GRU。将滑动窗口的大小设置为 K = 14 和 M = 9。将 dataset1 中的所有样本都处理到 BRNN 中后,总共可以获得 4,276,033 个滑动窗口。与传统的 RNN 不同,BRNN 基于这样一种思想,即预测不仅取决于先前的输入,还取决于整个输入序列。直觉上,序列中先前的信息比未来的信息更重要。尽可能保持前一个和后一个信息的平衡,前一个信息的权重略高于未来信息。因此,每次使用前 8 个操作码和后 5 个操作码来预测窗口中的第 9 个操作码。在训练过程中,增加了批量大小来使 BRNN 收敛到更好的结果。在训练阶段的开始,使用小批量(768)跳出局部最优。当精度相对于当前批次收敛到更好的结果时,逐渐增加批次大小(1024、2048、3072、4096)以加速收敛。过程如下图所示。最后,保存训练好的模型。最初,尝试使用 4 层单向 RNN 进行训练,但最终准确率仅为 0.6549。使用双向 RNN 后,最终精度提高到 0.8697,如下图所示。

 

 

还尝试使用不同大小的训练集来训练 RNN,如下图所示。随着 RNN 训练数据集大小的增加,分类精度也随之增加。实验证明了本研究观点,即与不使用 RNN 预测信息相比,使用 RNN 预测信息确实可以提高预测的准确性。这种用于无监督学习的技术有效。同一恶意软件家族中的恶意代码具有在其他家族中找不到的相似特征。更大的训练数据集意味着更容易找到同一恶意家族的特征。 RNN一旦发现一个家族的共同特征,就会通过生成预测序列,使同一家族中的恶意代码更加相似。 RNN 预测信息可以在一定程度上减少对类别标签的依赖。

 

 

D.特征图像

 

 

在训练 CNN 之前,观察由 BRNN 预测组成的特征图像,如上图所示。每个特征图像由离散像素组成。为了比较不同种类的特征图像,用绿色像素来描述相同的像素信息,用红色像素来描述不同的信息,如下图所示。这意味着图像中绿色像素越多,相似度越高.可视化后,不仅绿色像素很重要,红色点也可以帮助消除矛盾信息,最终给出清晰的结果。比较结果也验证了假设,即同类恶意软件可以找到很多共同点。这些共同点让研究者更有信心通过训练 CNN 来学习特征图像的特征,可以有效地将它们在不同的恶意软件家族中进行区分。

 

 

E.验证方法

 

在实验过程中,选择没有 RNN 预测的特征图像以及具有 RNN 预测的特征图像。特征图像的大小为 128*128。设计了 3 种方法来评估:

 

1)方法1(MVC):对每个恶意软件应用minhash,生成1024个hash值,然后生成没有RNN预测信息的特征图。然后将哈希值映射到特征图像。

 

2)方法2(MVC):对每个恶意软件应用minhash,生成2048个hash值,然后生成没有RNN预测信息的特征图。然后将哈希值映射到特征图像。

 

3)方法3(RMVC):对每个恶意软件应用minhash,生成1024个hash值,同时对RNN预测信息应用minhash,生成1024个hash值。这两种类型的信息被映射到特征图像。

 

此外,将这些结果与之前使用不同方法 Method NJ 的研究结果进行比较,其中恶意软件二进制文件被可视化为灰度图像,并使用 GIST 来计算纹理特征。使用 k 最近邻进行分类。

 

F.小型训练数据集测试

 

首先,从数据集中选择很少的样本(49 个样本),并预测整个Dataset1(1470 个样本)。在训练CNN时,如果使用方法1,训练和验证的收敛速度都非常快。对于方法2方法3,由于包含的信息较多,收敛速度较慢。但是,就准确率而言,方法1的准确率仅为85.92%,方法2为86.02%,方法3为92.18%(下图a,(下图b))。至于方法NJ 只有 77.95%。

 

 

准确率的提高并不是方法3中哈希值的数量增加造成的。方法2中哈希值的个数也是2048个,但结果与方法1相比并没有提高。结果表明加入BRNN预测信息确实导致想要的结果。虽然训练数据集很小,但 BRNN 生成的预测序列可以根据当前的恶意代码关联从训练信息中学到的最接近的信息。因此,即使攻击者修改了一些操作码,也可以在RNN预测阶段挖掘出类似的信息,为恶意软件分类提供新的特征,提高学习模型的泛化能力。显然,Method NJ 无法匹配本文方法。

 

继续使用Dataset(49)来预测Dataset3(894 个样本)。请注意,BRNN 没有在 Dataset3 中训练任何样本。这里只比较方法一和方法三,方法一的准确率只有88.70%,方法三的准确率是92.06%。下表显示了训练Dataset(49)在有或没有 BRNN 的情况下预测Dataset3 的混淆矩阵。 即使对于 BRNN 没有研究过的样本,使用 BRNN 仍然更好。对于Method NJ,准确率为 81.88%,混淆矩阵如下表所示。

 

 

G.大型训练数据集测试

 

 

为了增加 CNN 训练集的大小,使用Dataset1(1470 个样本)来预测Dataset 3(894 个样本)。 方法1的验证准确率为97.65%,方法3提高到98.65%。详细结果如上表所示。Method NJ 为 95.41%。虽然方法 1 和方法 3 在没有分类标签的情况下都学习了 BRNN 掌握的所有信息,但方法 3 仍然比方法 1 好。 这意味着 BRNN 在测试Dataset 3中的预处理很重要。继续增加训练集的规模,使用Dataset 2(2663个样本)来预测Dataset 3。最终,方法1的准确率为99.11%,方法3的准确率提高到99.55%(下表) ;所有恶意软件家族的最差误报率为 0.0147,平均误报率为 0.0058。相比之下,Method NJ 的准确率为 97.20%,平均误报率为 0.0448。无论是否使用 RNN,这种可视化方法对于分类不同类型的恶意代码都非常有效。通过使用 RNN,可以提高分类器的泛化能力。

 

 

使用 RNN 预测和不使用 RNN 预测之间的差异随着训练集大小的增加而减小。选择了几个不同的训练集来做更多的实验。使用Dataset1(1470 个样本)来训练 RNN。如下图所示,当使用特征图像进行恶意家族分类时,如果选择Dataset(49)、Dataset(300)和Dataset(600)中样本的特征图像作为训练集(这些训练集是 RNN 训练数据集的子集),与这些训练集相比,RNN 可以提供更多的知识。另一方面,当选择像Dataset1(1470 个样本)和Dataset 2(2663 个样本)这样的大型训练集时,RNN 学到的知识已经存在于这些数据集中,因此 RNN 可以提供有限的信息并且差异要小得多。这组对比测试可以说明两个问题:1、当有大量未标记数据时,RNN的效果非常明显。 2. 即使所有未标记的数据都被标记了,从数据集中学到的知识仍然少于原始序列和RNNs预测序列融合提供的知识。

 

 

0x04 Conclusion

 

在本文中提出了 RMVC 方法,通过应用 RNN 和 CNN 两种深度学习技术,使用视觉图像静态分析恶意代码。应用RNN将当前数据与相似信息关联起来,提高分析过程中的抗干扰能力。 CNN 用于对特征图像进行分类。该方法提供了高精度和良好的泛化性。由于 RNN,RMVC 可以学习更多的恶意软件分类,而无需提供类别标签。使用 RNN 可以改善所有实验的结果。即使使用较小的训练数据集,该方法的准确率仍然可以超过 92%。 RMVC 将传统方法的准确率提高了 10% 以上。如果增加训练数据集的大小,准确率可以达到 99.5%。如混淆矩阵所示,RMVC 得到一个几乎对角矩阵。使用这种方法,所有恶意软件家族的最差误报率为 0.0147,平均误报率为 0.0058。

 

未来将继续收集样本并将该方法应用于更大的数据集;还将验证本文方法在动态分析中的有效性。 RNN是最强大的人工神经网络,将尝试将生成对抗网络背后的思想整合到方法中,以提高无监督学习的能力。Apple 在其第一篇人工智能论文中也使用了该模型。

Be First to Comment

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注