孙甜甜,王宝会,辛敏健
(1.北京航空航天大学软件学院,北京 100000;2.北京航空航天大学自动化学院,北京 100000)
随着互联网技术的迅速发展,不仅为人们提供便利,而且也带来了许多网络安全问题,网络安全形势已经十分严峻。各类安全威胁飞速增长,严重威胁着用户的个人信息安全,恶意代码就是其中之一。恶意代码[1]泛指所有恶意的程序代码,是一种可造成目标系统信息泄露和资源滥用、破坏系统完整性及可用性、违背目标系统安全策略的程序代码。恶意代码的种类包括特洛伊木马、计算机病毒、蠕虫和后门等。近年来,由于恶意代码的攻击,造成了数以万计的财产损失。
针对恶意代码爆发式地增长情况,安全研究人员针对恶意代码分析技术展开了深入研究。研究发现,大多数新型恶意代码都是已有恶意代码的变种。代码编写者利用加壳、变形、代码扰乱等技术处理原有代码,以躲避传统恶意代码检测技术。由于同一作者或同一团队的编码习惯是比较相似的,所以我们将具有高度相似的结构、雷同的函数调用顺序的恶意代码称其具有同源性。恶意代码同源性[2]则定义为是否源自同一套恶意代码或是否由同一个作者、团队编写,其是否具有内在关联性、相似性。
本文对目前研究的恶意代码同源性分析技术分为静态分析和动态分析,并且介绍了这两种分析判定技术的主要思路与特点,最后对恶意代码同源性分析提出了未来的展望。如表1所示为两种分析方法的比较。
表1 恶意代码两种分析技术比较
同源的恶意代码出自同一作者、团队,通过这些编写习惯往往导致它们存在相似的代码结构。静态分析技术关注的是代码的静态结构,根据结构相似性来判定是否同源。按照分析对象,静态分析又可分为基于序列的方法和基于图的方法。
在静态分析技术中,基于序列的方法关注的是最底层的恶意代码,通过对二进制代码的匹配与处理完成同源性判定,处理速度快并且容易实现;基于图的方法则是从恶意代码更高层的结构入手,从函数调用图出发,相比较序列的方法,基于图的方法使得恶意代码的特征更加抽象且具有代表性,判定效果更好。
静态分析需要使用IDA Pro、Win32asm等反汇编程序对恶意代码进行反汇编,然后再从反汇编文件中提取有用特征信息。如图1所示为反汇编代码,由于静态分析只是针对恶意代码的代码层面上做分析,不用实际执行恶意代码,所以速度相对较快,并且不会产生危害操作系统的恶意行为。
图1 静态反汇编代码
Yang Zhong[2]等人使用局部函数特征作为恶意代码的特征进行同源性分析,在没有使用整个文件进行相似性比较的情况下,取得了很好的分类效果。陈琪[3]等人在其使用局部函数特征提取出现不均的情况下,使用IDA反汇编工具将恶意代码进行反汇编,然后提取程序代码函数作为单类支持向量机(OCSVM)的输入,筛选出样本特征函数,之后引入聚类算法BSAS的思想构建恶意代码家族特征库,计算恶意代码字符串、API的N-Gram特征的相似度,为恶意代码及其变种的检测分类提供依据。
如图2所示是未知样本与恶意代码家族特征库相似性比较结果,图中纵坐标代表未知样本的真实恶意代码家族名,横坐标代表恶意代码家族特征库中存有特征的家族名称,用序号表示,图中的色块表示未知样本经过与恶意代码各个家族进行相似度计算得出的平均相似度,色块颜色越深相似度越高。根据图上相似度展示,各个家族的未知样本与已知样本生成的家族特征库的平均相似度较高,并且与其他家族的平均相似度较低,说明本文所用方法是可行性的,能够提高家族判定准确率。
图2 未知样本与特征库家族平均相似度
文献[4]是将恶意代码的行为与其反汇编代码相结合,首先通过IDA反汇编工具将恶意代码进行反汇编,然后提取其控制流程图,并以图相似度作为相似性度量方式,之后通过DBSCAN聚类算法对同源性恶意代码进行家族聚类。
由于恶意代码中函数的调用、代码的执行流程影响它的行为操作,在一定程度上能够体现作者的母的和编码习惯,所以可作为恶意代码同源性分析的典型特征。将函数控制流程图与行为操作相结合的方式,能够对恶意代码中会对系统产生危害的操作进行重点关注,然后通过比较恶意代码相同行为的函数控制流程图,判断行为操作的同源性,如图3所示为函数控制流程图。
图3 函数控制流图
因为本文选取的恶意代码特征是图,所以采用的相似性度量是图相似度,通过比较两个图中相同节点与边的数量,计算Jaccard作为图的相似度。如图4所示,各个家族的簇内相似度都在78%以上,族间相似度在20%以下,说明不同家族内部聚合度比较高,同一家族的恶意代码差异性小。
图4 簇内及簇间相似度
静态分析技术是将恶意代码进行成功反汇编后进行分析,在面对恶意代码加壳、扰乱、变形和多态等多种自保护方式时,仅通过静态分析技术进行分析往往存在不足,所以需要动态分析技术来补充。动态分析技术是通过搭建沙箱模拟一个虚拟环境,将恶意代码放在该环境下,提取在运行过程中下的特征,通过这种方式,可以避免加壳等技术带来的影响。但是它需要提供虚拟的运行环境,并且对特征提取技术有更高的要求。
在恶意代码可执行文件中,由于代码与指令未进行分割,指令流难以识别,所以在使用深度学习模型时,难以形成有实际意义的词向量来作为深度学习的输入。文献[5]基于文本分析思想并结合深度学习算法,提出了基于Asm2Vec的恶意代码同源判定方法。通过搭建虚拟化环境提取恶意代码的动态API信息,利用Word2Vec进行矢量化形成词向量,并搭建TextCNN深度学习模型进行家族判定。该方法准确率较高且预测时间短,既快速又高效。
图5所示为Word2vec的模型结构,利用词的上下文,使语义信息更加丰富。TextCNN模型结构简单,在文本分类任务上应用比较广泛,如图6所示,是采用TextCNN模型作为进行恶意代码同源判定的实现过程。
图5 word2vec 模型
图6 基于TextCNN 的恶意代码同源性分析模型
通过采用微软恶意代码分类挑战赛的数据集进行实验,在准确率方面,采用Asm2vec方式小幅度小于采用传统特征工程方法,但是在检测速度方面,领先于传统机器学习方法,因此基于Asm2Vec[10]的恶意代码同源判定方法在准确率和检测速度具有较高的优越性。
图7 实验结果对比
基于图的动态分析方法存在两个问题,第一是这些方法大都依赖于图匹配,而图匹配是一个NP完全问题,存在计算缓慢;第二将特征子图作为检测分类的方法,忽略了子图间的关系[7]。针对上述问题,文献[6]提出了基于子图相似性的恶意代码检测方法,使用DMBSS(逆拓扑标识)将特征子图转换成字符串,子图的结构信息蕴含在字符串内,然后基于神经网络计算子图间的相似性,最后,使用子图向量构建恶意程序的相似性函数,并在此基础上,结合SVM分类器对恶意程序进行检测,速度较快且准确率较高。
图8
如图8所示,介绍了基于子图相似性的恶意代码检测框架,分为3部分,特征子图库构建及其向量表示、训练模型的构建过程以及未知程序的检测过程。其中数据流图是通过捕获程序在运行时期内进程、注册表、文件、URL的行为生成的。图间的相似度是使用深度图内核来计算[8]。
目前,对于恶意代码同源性判定的技术研究已经越来越成熟,本文分别从静态分析、动态分析两个不同角度,分析了当前恶意代码同源性判定的特征提取方法和算法选择,比较了各自的优缺点。但是现在的研究大多是分步来进行的,并没有一套成型的恶意代码同源判定系统。并且对于基于基因视角的恶意软件分析研究也很少,各界对恶意软件基因也没有统一的定义,所以后续对于恶意代码的同源性分析,可以从群体和遗传学等角度出发,以基因视角来研究恶意代码的同源性。