基于Asm2Vec的恶意代码同源判定方法*

2019-12-11 02:23陈涵泊邹福泰
通信技术 2019年12期
关键词:矢量化同源家族

陈涵泊,吴 越,邹福泰

(上海交通大学 网络空间安全学院,上海 200240)

0 引 言

近年来,随着互联网场景的不断扩展,全球恶意代码数量持续快速增长,德国权威机构AV-TEST安全报告显示[1],2014年至2018年全球每年新增恶意代码数量保持超过1亿个的高位,2018年,全球新增恶意代码数量达到1 375亿个,基于windows的恶意代码仍为主流,2019年一季度占比达到74.49%。

恶意代码的长期高速增长及网络安全形势的愈加严峻对恶意代码分类及溯源技术的快速与高效性提出了更高的要求与挑战,对数据可扩展性的支持开始成为恶意代码分析方法优越性的重要参考。深度学习凭借其对大规模数据样本分析及处理的高效性,已在多行业场景应用中被广泛使用,在恶意代码分析领域也逐渐成为主流研究方法。

本文采用文本分析思想,提出了针对恶意代码反汇编文件的新型矢量化方法Asm2Vec,构建了基于深度学习的恶意代码家族谱分类模型,分析恶意代码的所属家族谱情况。本文第一章介绍恶意代码家族谱分类的相关研究,第二章介绍此次新提出的矢量化方法Asm2Vec,第三章介绍基于TextCNN的家族谱分类模型,第四章分析实验相关结果,第五章总结未来的研究思路与方向。

1 相关研究

恶意代码同源判定是恶意代码分析领域中一块具有重要现实意义的内容,家族溯源则是恶意代码同源判定的其中一条重要思路,同家族恶意代码在内容和结构上相似的编码特性为恶意代码的家族溯源提供了可行性。同家族恶意代码的编码相似性主要体现在执行敏感操作的代码元素中,例如系统调用、关键字符串和代码结构等。通过分析上述元素,可追踪到恶意代码的家族信息[2]。

基于图像的方法是目前国内外研究中从恶意代码可执行文件进行家族同源判定的主要方法。基于图像的方法由Nataraj等人于2011年提出,Nataraj等人发现将恶意代码二进制文件(PE文件)读取为8位无符号整数向量,恰好满足256的灰度级,因此,该8位无符号整数向量可转化为灰度图表示[3]。经上述步骤,对PE文件的分析问题转化为了对灰度图的分析问题。Nataraj等人基于灰度图进行特征挖掘,使用传统机器学习算法KNN进行恶意代码家族分类。此后,基于Nataraj图形化思想,越来越多的机器学习方法被使用。Ahmadi等人于2015年对恶意代码提取了多重特征,通过加权进行特征融合,并采用随机森林算法大幅提升了恶意代码家族分类准确性[4]。与此同时,基于可执行文件转图像的深度学习分类方法亦开始出现,Kim于2017年将卷积神经网络算法应用于对微软恶意代码分类挑战赛数据集(BIG 2015)的分类,图像思想结合深度学习的方法逐步被用于恶意代码同源判定[5]。

在恶意代码家族谱同源判定领域,通过对恶意代码语法相关特征进行分析,亦是学者研究的重要方向。对恶意代码可执行文件进行反汇编后,反汇编代码具有较为鲜明的语法可读性特征。Ahmadi等人除运用了灰度图特征外,亦选取了如元数据、符号、操作码等反汇编后文件的多项语法相关特征,通过机器学习方法进行恶意代码家族分析[4]。然而,目前基于文本处理思想,运用深度学习方法对恶意代码可执行文件进行家族同源判定的研究仍然较少。针对上述问题,本文基于文本分析思想,结合深度学习算法,对恶意代码可执行文件构造了一种新型的矢量化方法,以寻求更高效、更具扩展性的恶意代码家族同源判定效果。

2 Asm2Vec矢量化

恶意代码可执行文件中代码与指令由于未进行分割,指令流难以识别,难以形成有实际意义的词向量作为深度学习模型的输入。因此,本文提出了一种名为Asm2Vec的矢量化方法,其具体步骤为,通过对恶意代码可执行文件进行反汇编获得具有可读性的16进制指令,对其进行分词后使用Word2Vec进行矢量化,形成词向量。

2.1 恶意代码反汇编及分词

恶意代码可执行文件的二进制机器码可读性非常弱,因此,分析的第一步,就是要从程序的二进制表示中恢复程序机器码指令的符号表示[6]。本文通过IDA Pro对恶意代码可执行文件进行反汇编[7],获得的反汇编文件片段如图1所示。

经过反汇编后,每条具有实际语义的汇编码均对应了一条十六进制码,根据此对应关系,对反汇编文件中的十六进制码进行分词,如8BFF、55、8BEC、83EC3C各代表一个词,这样一来,恶意代码反汇编文件则可看做由若干个十六进制码单词所组成的一个文本。

2.2 利用Word2Vec对十六进制码进行矢量化

经过反汇编及分词后,需要对十六进制码单词进行矢量化。单词矢量化的常见方法有独热编码(one-hot)和词嵌入(word embedding)等,独热编码通常单词的维数很大,易增加训练难度,造成维数灾难,词嵌入较独热编码捕获了单词之间的相似性,并降低了单词的维数[8]。因此本文使用词嵌入方式对单词进行矢量化,选择了目前广泛使用的词嵌入方法Word2Vec[9]。

图1 反汇编文件片段结构

Word2Vec具有CBOW和Skip-gram两种模型,其中,CBOW模型根据上下文预测中心词,Skipgram模型根据中心词预测上下文。为优化模型,Word2Vec采用了层次化softmax提升了softmax归一化效率,并采用负采样降低了Skip-gram模型的计算负担。CBOW模型和Skip-gram模型的结构如图2、图3所示[10]。

图2 Word2Vec CBOW模型结构

图3 Word2Vec Skip-gram模型结构

3 基于TextCNN的深度学习模型

3.1 TextCNN深度学习模型

TextCNN由Yoon Kim于2014年提出,将卷积神经网络用于文本分类任务,TextCNN采用一维卷积,通过设计不同大小的卷积核提取文本特征,其具体实现如下。

在TextCNN模型中,设xi∈Rk是文本中第i个单词所对应的k维词向量,则长度为n的文本可以表示为:

其中⊕为连接符。设计滤波器w∈Rhk,窗口大小为k个词,用于提取特征,则从词串xi:i+h-1中生成的特征ci为:

其中b为偏差项,f为非线性函数,进行一次卷积后,滤波器w最后生成的完整特征映射c为:

卷积后连接一层池化层,对特征图c进行最大池化,取c^=max{c}作为该滤波器w的特征。模型中通过设定多个滤波器以提取多个特征,经卷积与池化后,对提取的多个特征添加一层全连接层,并使用softmax函数进行分类[11]。

3.2 模型结构及参数

TextCNN模型结构简洁,被广泛应用于文本分类任务,本文采用TextCNN作为进行恶意代码同源判定的深度学习模型。

本文使用的数据集为微软恶意代码分类挑战赛数据集(BIG 2015),共含有9类合计10 868个有标签的样本[12]。

Windows应用程序中.text字段为可执行代码段,包含了运行过程中最关键的部分信息,因此本文取.text字段作为编码样本。由于样本的平均长度约为3 200个指令,取文本长度为3 200,词向量维度为128,对恶意代码样本进行矢量化和归一化处理后,模型的样本输入大小为(3 200 128)。设置三种滤波器,窗口大小分别为2、3、4个词,即(2,128)、(3,128)、(4,128),每种滤波器设定为128个,模型具体架构如图4所示。

图4 基于TextCNN的恶意代码同源判定模型架构

4 实验结果分析

4.1 评价指标

模型的准确率(accuracy)定义如下:

其中,N为样本数,f为指示函数,t为样本真实的标签,p为预测值。

模型损失函数采用了交叉熵加L2正则化损失,为防止过拟合,在交叉熵损失函数的基础上,加上了L2正则项,定义如下:

其中,x为样本,j为样本被预测的标签值,为样本被预测为第j个标签的概率,λ为正则化参数,w为权重参数。

深度学习模型通常亦采用精确率、召回率、F值作为衡量模型效果的指标,考虑到本次实验采用的数据集具有多分类不均衡的特点,本文对上述三项指标进行了加权计算,采用了加权精确率(weighted recall)、加权召回率(weighted recall)、加权F值(weighted f1score)作为评价指标。

记ni为第i类的样本数,n为样本类数,N为整体样本数量,TPi为实际为第i类也被预测为第i类的样本数,FPi为实际不是第i类但被预测为第i类的样本数,FNi为实际为第i类但被预测为其他类的样本数。

(1)加权精确率为:

(2)加权召回率为:

(3)加权F值为:

4.2 实验结果

本次实验中,我们采用微软恶意代码分类挑战赛数据集(BIG 2015)作为数据源,使用Asm2Vec矢量化方法,对各个样本进行了矢量化,经过预处理后剩余10 789个样本。实验设定词向量维数为128,经过网络模型训练后,词表中共计包含232 094个词。

将上述样本及词向量送入TextCNN神经网络中训练及检测,其中80%为训练集,10%为验证集,10%为测试集,经过10次交叉验证,模型实现了98.74%的准确率,损失为0.068,混淆矩阵如表1所示。模型平均加权精确率为98.79%、加权召回率为98.74%、加权F值为98.74%,每个样本的平均预测时间为6.16毫秒。具体测试结果如表2所示。

相比于其他方法,在检测准确率方面,本文采用的方法仅小幅落后于少数基于传统特征工程的方法,较其他基于深度学习的方法有较大程度的领先。在检测速度方面,本方法大幅领先于传统机器学习方法,预测时间由秒级缩短为毫秒级,相关研究实验结果对比情况如表3所示。因此,结合检测准确率及检测速度,本文提出的基于Asm2Vec的恶意代码同源判定方法在整体上具有较高的优越性。

表1 实验混淆矩阵

表2 10次交叉验证结果

表3 实验结果对比

5 结 语

本文主要研究了结合深度学习的恶意代码同源判定方法,探讨并借鉴了国内外相关研究中常见的恶意代码转图像矢量方法,考虑到恶意代码的文本性质,本文提出了对恶意代码通过反汇编及按十六进制码分词构建词向量的新型矢量化方法Asm2Vec。本文详细介绍了该矢量化方法的各项步骤,并搭建了基于TextCNN的深度学习模型,对微软恶意代码分类挑战赛数据集进行测试,获得了较高的准确率及较短的预测时间,在快速及高效性上具有明显的优越性。

然而,本文提出的Asm2Vec的矢量化方法,需要首先对恶意代码可执行文件进行反汇编,对反汇编的统一性与质量均提出了较高的要求。反汇编对逆向软件依赖性较强,自动化能力较弱,不同的逆向软件的反汇编处理会对样本质量形成较大的影响,并且很多恶意代码在演进过程中具备了反逆向的特点。因此,结合反混淆技术,寻找高性能的直接对恶意代码可执行文件进行矢量化的方法将是未来值得重点研究的方向。

猜你喜欢
矢量化同源家族
基于“乙癸同源”理论辨治股骨头缺血性坏死
以同源词看《诗经》的训释三则
HK家族崛起
“铤”有“直”义的词源学解释——兼说/直/义的同源词族
《小偷家族》
同源宾语的三大类型与七项注意
农村土地承包经营权确权登记调查底图制作方法的探究
DEM的建立及其在林业上的应用
家族中的十大至尊宝
交互式矢量化技术在水文站网分布图编绘中的应用