恶意程序检测技术综述_第1页
恶意程序检测技术综述_第2页
恶意程序检测技术综述_第3页
恶意程序检测技术综述_第4页
恶意程序检测技术综述_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

恶意程序检测技术综述

一般来说,恶意软件是指在不允许的情况下,在信息系统中安装、执行并达到不当目的的程序。上述过程可以描述为,恶意程序作者首先实现能够完成不正当目的的恶意程序,之后该程序与反病毒软件反复对抗的过程中形成了多个版本。显而易见,这一系列的恶意程序与最初的恶意程序实现了相同的不正当目的,只是表现形式不同。一种更普遍的情况是某个恶意程序的二进制文件或源代码在网络中被公开,其他恶意程序作者会借鉴甚至复用这个恶意程序的代码或者功能模块,并加以变形、混淆,以简化恶意程序开发的复杂度。这些恶意程序样本可以被认为是同源的,或者是相似的。这种现象在当前恶意程序开发过程中相当普遍。同时,恶意程序的自我复制、变形技术也会使同一个恶意程序变形为多个同源的恶意程序。同源的恶意程序样本构成了恶意程序家族,可被视为精确的恶意程序分类。从恶意程序的产生过程不难看出,现实存在的绝大多数恶意程序都与已知的恶意程序在某些特征上存在极大的相似性。如果待检程序与已知恶意程序或恶意程序家族的样本间存在较大相似度,则可判定该程序为恶意程序。同时,无论人类还是计算机,对恶意程序的检测过程本质都是“找相似”的过程,即从已知的样本中找到能够代表该群体或个体的特征,如果测试样本中含有与这些特征相同或相似的特征,就可以对测试样本进行判定或分类本文从恶意程序特征入手,将其分为序列特征、结构特征和语义特征三类,首先分析现有基于上述三类特征的恶意程序相似性分析方法,然后介绍各类特征通用的相似性分析方法,最后指出恶意程序相似性分析技术仍需解决的问题。1恶意程序样本分析基于序列特征的相似性分析,指根将序列作为特征,对恶意程序样本进行相似性分析。序列特征是最简单的语法结构特征,主要包括字节或字符序列、指令序列、API调用序列或系统调用序列等具体特征。1.1基于特征码的恶意程序检测方法最早的恶意程序检测系统使用哈希值对比或特征码检测的方法识别恶意程序。哈希值可以用来唯一标识恶意程序,本质是程序文件整个字节序列的数学变换,通过计算程序文件所有字节的哈希值可以判断两个程序样本是否为同一程序。常用的哈希算法包括MD5、SHA-x等。由于基于哈希值的检测具备速度快、0误报率的特点,很多现代反病毒软件仍保留了这一做法。在病毒库中保存已识别恶意程序的哈希值,如果未知程序的哈希值与病毒库中某条记录一致,则可判断该程序为恶意程序。很多恶意程序会利用已知软件或操作系统漏洞进行攻击,为达到快速开发的目的,恶意程序作者往往更倾向使用公开的漏洞利用程序。漏洞利用程序中的载荷常以字节序列的形式存在,如果待检程序中出现已知漏洞利用程序的载荷字节序列,则可判定该程序为恶意程序。同样,恶意程序作者还会直接将已公开的恶意程序源码或二进制程序中的某个模块嵌入到自己的恶意程序之中,而这些公开的源码或程序中经常会包含注释、可打印字符串、或磁盘路径、URL等标识位置的字符串,通过检测这些字符串也能够判定待检程序是否为恶意程序。基于这种考虑,传统方法需要人工分析恶意程序,从中获取特殊的、能够标识该程序的字节序列或字符序列,并在未知程序中检测是否存在这些序列,如果存在,则可判定未知程序是恶意程序。这种方法被称为基于特征码的恶意程序检测方法。上述哈希值比对和特征码检测是最简单、最基本的相似性分析方法,检测结果能够保证0%的假阳性比例。基于特征码的检测识别了恶意程序间的局部相似性,而基于哈希值的方法识别了恶意程序间的整体相似性,其分析结果都只有100%和0%两种。这些检测方法很容易被恶意程序反分析技术绕过,如对原始恶意程序文件进行1bit的更改都会造成哈希值的检测结果由100%变为0%,但这1bit可能对源程序完全没有影响。恶意程序常常避免使用硬编码方式存储敏感字符串或漏洞利用程序的载荷,从而导致基于字节或字符序列的检测方法失效。此外,两种方法都需要预先获取特征字节或字符序列,很难做到全自动分析。针对上述问题,研究者们提出了精度更高、更加适于自动化分析的基于字节特征的相似性分析方法。Kotler等人此外,文献[9]统计了二进制程序文件中字节出现的频度,得到255维字节频度向量,通过计算向量间的距离和向量夹角的余弦值判定未知程序是否与已知恶意程序相近,进而判定是否为恶意程序。文献[10]选择恶意程序中的可打印字符串作为分类依据,使用了机器学习方法计算样本间的相似度并对恶意程序家族分类。文献[11]将二进制程序文件0-1比特转换为灰度图,再分析灰度图的相似性,最终完成对恶意程序家族分类。字节和字符串序列特征的最大优势是特征提取和计算速度快,但是他们非常容易受制于恶意程序反分析技术,例如被广泛应用的恶意程序加壳和加密技术严重降低了使用该特征进行相似性分析的准确性。1.2基于自适应的检测方法由于不同程序中很难出现完全相同的指令对,现有工作多使用操作码或助记符代替完整指令进行相似性分析。文献[12]对程序中的所有函数片段进行定长切分,用助记符出现频率的向量标识每个分片,使用Jaccard距离度量向量距离,计算两个程序中各个分片的相似度,据此完成恶意程序家族分类,最终得到每个恶意程序家族的特征助记符序列,用于未知恶意程序样本的检测。Santos团队先后在文献[13]和文献[14]中分别使用统计学方法和挖掘方法分析程序中操作码出现的频率,并计算恶意程序间的相似性。文献[13]建立了包含操作码及其出现频率的操作码概要文件,使用互信息理论计算统计学意义上每种操作码之间的相关性,据此度量函数间相似性。文献[14]阐述了使用决策树、支持向量机、k最近邻和贝叶斯网络等四种机器学习方法对操作码轮廓文件进行聚类的具体方法,用数据挖掘方法提高了上一工作的相似性分析的准确性和恶意程序家族分类能力。文献[12-14]统计了程序不同代码片段中指令的出现频率。程序中往往包含成千上万条指令,指令条数的数量级远大于应用程序编程接口API(ApplicationProgrammingInterface)调用次数。此外,程序的字节或字符特征基本不反映程序的语义信息,且程序中非指令信息也会参与到字节频率的计算,直接统计其出现的频率可能造成较大的分析误差。根据“样本空间越大统计学方法结果越可靠”的共识,统计频率的方法更适用于指令序列特征。此外,文献[15]使用了静态分析和动态分析结合的方法提取程序中的所有基本块,从中选择出包含call指令的基本块作为主要分析的基本块,使用SimHash方法提取主要分析的基本块的助记符序列,再将其转换为RGB格式的图像,最终使用得到的图像进行恶意程序间的相似性分析。虽然提取指令执行序列特征耗时较多,但是相似性分析速度较快,总体的分析时间与基于静态指令序列特征的方法基本相当。相较于字节或字符序列特征,指令序列特征带有更多的语义信息。特征提取时需要首先对程序反汇编,复杂度远大于提取字节和字符序列。指令序列特征较适于使用统计学、图形图像学等方法进行相似性分析。抗混淆能力比字节和字符序列特征稍强,但是总体抗攻击能力仍较弱。花指令、等价指令替换等方法会对相似性分析结果的准确性产生很大影响。1.3基于api调用序列的相似性分析和恶意程序判定现代应用程序中几乎所有的功能都需依靠API实现。现代编程语言为开发者提供了丰富的API库,其实现了应用程序可能用到的所有基本功能。API为应用程序开发者屏蔽了大量底层细节,大大提高了应用程序的开发效率。系统调用是操作系统为用户态提供的操作内核的接口,多数API调用归结到底都是由系统调用实现的。现代程序设计中API调用也可称为库函数调用。目前主流的API调用识别方法是使用库函数签名,其中最著名的是IDAPro的库函数快速识别与鉴定技术FLAIR(FastLibraryAcquisitionforI-dentificationandRecognition)。系统调用通过中断实现,通过监控中断的中断号即可识别系统调用。API调用序列和系统调用序列都能够反映程序的行为很多工作结合数据挖掘方法完成了基于API调用序列的相似性分析和恶意程序判定。文献[17]通过API调用序列生成签名数据库,应用基于分类的面向目标的关联算法OOA(Objective-OrientedAssociation)生成规则数据库,最后根据待检程序样本的API调用序列和规则数据库判定待检样本是否为恶意程序。文献[18]使用NativeBayes、J48和RandomForest三种数据挖掘方法分析样本中API调用序列的相似性,最终生成恶意程序特征集,用于判定样本是否为恶意程序。文献[19]综合使用了字符序列和API调用序列两种特征,利用支持向量机方法分析程序间相似性并判定带测样本是否是恶意程序。机器学习方法也常用于相似性分析和恶意程序判定工作。文献[20]利用微软开发者网络微软开发者网络MSDN(MicrosoftDeveloperNetwork)比较和识别API调用,在学习、训练过程中利用API调用序列的相似性区分良性程序和恶意程序。该工作综合使用n-grams技术和类敏感文档频度挖掘API调用序列间的相似性,使用恶意程序和良性程序的“相关API”特征集合判定程序是否为恶意程序。此外,文献[21]使用动态分析方法提取系统调用序列,计算序列间Jensen-Shannon距离比对程序样本间相似度。系统调用序列和API调用序列都能反映程序的行为特征。系统调用序列适用于使用动态分析方法获取,API调用序列适于使用静态分析方法获取。每个API调用都可以看作是系统调用序列的集合。通常系统调用序列特征空间的数量级远大于API调用序列,因此计算量更大,且API调用序列可以看作是系统调用序列的一个语义相关的划分,相似性分析结果天然地优于采用了类似n-grams的序列划分方法的分析结果。与字节或字符序列和指令序列特征相比,针对API调用和系统调用序列特征的攻击方式更为复杂。文献[22]提出的攻击方案实现了在编译过程中完成攻击代码注入,但不同编译器环境下攻击代码的注入细节不同。针对API调用序列的攻击能够使静态分析方法无法正确识别程序中的API调用,攻击可以通过混淆静态链接库或使用隐式函数调用2相似性分析方法基于图结构特征的相似性分析方法,是使用图的结构作为特征分析程序的相似性分析方法。图结构特征是较为高级的语法结构特征,主要包括函数调用图和控制流图两种,部分文献还会将控制流图与数据流图一同分析。2.1基于控制流图的相似性分析方法控制流图反映了程序的逻辑结构,数据流图反映了程序的数据流转关系。文献[24]提出了使用控制流图和数据流图特征对二进制程序进行相似性比较和同源分析的方法,并采用微软各个版本的动态链接库进行实验,验证其分析算法的有效性。该工作适于分析同一公司发布的同源良性程序间的相似性,此后研究人员陆续提出了针对恶意程序的控制流、数据流相似性分析方法。后续工作更倾向于单独使用控制流图特征进行相似性分析。Silvio团队一直致力于基于控制流图的二进制程序相似性分析技术研究。文献[25]使用字符串编辑距离度量控制流图间的相似性,提高了图同构问题的分析效率。文献[26]使用启发式算法识别不同二进制程序中的同构控制流,同构比例大说明相似度高,以此判定程序是否为恶意程序。文献[27]提出了线性时间的相似性分析方法,将控制流图转化为向量,再使用曼哈顿距离度量向量间的相似性。这种方法有效的解决了文献[25]不能很好应对恶意程序多态属性的问题,且提高了文献[26]的分析效率。与Silvio的工作不同,文献[28]使用深度污点分析和自动化输入构造技术找出二进制程序间的不同之处。分析过程从一个种子输入开始,追踪这个输入引发的被执行的控制流,并将该控制流以符号形式送入解析器,求解引导其他控制流的输入。该工作可以视为文献[29]的强化版本。与静态分析方法相比,动态分析方法都必须解决覆盖率较低和耗时较长的问题。上述两个工作均采用了串行的动态分析框架,两者分析时长相当,对gzip-1.24和gzip-1.40两个程序的分析比较时间长达3小时。大多数应用很难接受串行化分析方法的耗时。除上述工作外,文献[30]引入了图着色技术使控制流图能够更好的表达程序特征,用于度量多态蠕虫病毒样本间的相似性。文献[31]将控制流图视为马尔科夫链,使用数据流信息预测转移概率,最终建立指令执行序列相似性矩阵,并据此使用支持向量机方法进行恶意程序家族分类。文献[32-33]利用控制流图特征,使用数据挖掘方法分析恶意程序间相似性。上述工作中,使用控制流图和数据流图特征进行相似性分析的依据是同源程序在结构上变化不大,但理论上存在两个程序的控制流图结构相似而程序功能不同的情况。同时,基于控制流图特征的相似性分析结果很容易受到恶意控制流篡改方法的影响。因此,简单的控制流图结构同构并不是恶意程序相似性分析问题比较理想的解决方案,而结合控制流图和数据流图同时进行分析能够提高恶意程序相似性分析的准确性。因为控制流结构是否同构、控制流图节点内容是否相似、控制流图语义是否等价这三者共同决定了两个恶意程序的相似性。控制流图的语义等价问题和控制流的图匹配问题应当为今后研究的重点问题。2.2下一步研究方向在函数调用图中,节点是函数,边是函数调用关系。完整准确的函数调用图能够覆盖程序中所有的函数和函数调用关系,反映了整个程序的行为特征。文献[2]使用点、边的编辑操作计算图编辑距离,利用函数调用图的图编辑距离刻画二进制文件的相似性,借此解决了大规模恶意程序样本的恶意程序家族分类问题。文献[34]将函数调用图描述为完全二分图,根据图中点、边相似度生成边权矩阵,根据边权矩阵计算函数调用图的相似性。文献[35]提出基于最大共同边数目的度量算法,通过度量两个函数调用图中公共的节点个数和边的条数,计算函数调用图的整体相似性。文献[36]进一步完善了文献[35]的工作,提高了相似性分析的准确性。上述工作的技术路线可以归纳为:先根据函数内部特征判断节点是否匹配,再根据函数调用关系判断边是否匹配,最后根据边的匹配情况判断函数调用图相似性。函数间相似性计算的准确性决定了函数调用图边相似性分析的准确性,因此函数调用图相似性计算的关键在于函数间相似性计算。而函数间相似性分析需要计算控制流或指令序列相似性,这种做法没有完全发挥出函数调用图在结构和功能两方面优势,分析方法受制于低级别程序特征相似性准确程度的制约。而且根据边匹配情况计算相似度方法的准确性受函数拆分、合并、垃圾函数调用等简单、常用的混淆手段影响较大。上述问题应当成为进一步研究的重点内容。此外,函数调用图比其他特征携带了更多程序信息,其相似性分析方法的复杂度不可避免的高于其他特征。现有方案为了解决该问题普遍丢弃了函数调用图的详细信息,所以从相似性分析结果中无法定位函数调用图的哪些位置是相似或相同的。这种做法提高了分析效率,但是不利于识别0day恶意程序。因为很多0day恶意程序会进行大量语义等价改造,虽然与原始恶意程序同源,但是表现形式差别很大,需要对函数调用图中相似部分进行深入分析,才能准确识别这类恶意程序。后续工作应该在该问题上做出改进。同时,函数调用图相似性分析同样存在语义等价问题:(1)在语义等价方面,相似性分析方法无法识别两个函数调用图中语义等价但表现形式不同的函数。若把函数调用图退化为函数调用树,那么树的叶子节点就是API调用。如果能够解决API调用序列的语义等价问题,其方法将可以直接用于解决函数调用图的语义等价问题;(2)在结构等价方面,对用户自定义函数进行拆分或合并将更改函数调用图的结构,影响函数调用图相似性计算。如果能解决控制流图的结构等价问题,其方法可以用于解决函数调用图结构等价问题。后续工作也可在上述工作中做出改进。3基于api的相似性比对基于语义特征的相似性分析,是指使用语义特征进行程序的相似性分析。语义特征是高层的程序特征,可以认为API调用序列描述了程序的行为,其序列描述了程序的语义。不同文献对语义和行为两个概念的界定不同。文献[37]较早提出了语义相似性分析方法,重点是分析指令的语义。使用形式化方法从指令序列中识别出程序行为,再使用行为特征进行相似性分析,最终检测恶意程序。文献[38]着眼于使用API调用刻画程序的行为,从程序样本中抽取API调用,并建立分层级的行为依赖图,从不同样本的行为依赖图中找出相同的子图,每一个恶意程序家族的所有样本将共享某些子图,将它们作为恶意程序家族的特征,用于恶意程序检测。文献[39]也从API调用入手,提出使用加权的上下文API依赖图刻画程序的行为特征,在相似性比对时将图作为向量处理,以缩短分析时间。虽然该工作在安卓平台上进行实验验证,但是其解决方案同样适用于PC平台。本文认为行为特征描述了程序功能,其可归纳在语义特征中。文献[40]提取Windows系统事件描述行为特征,使用迭代行为映射方法,逐步合并程序样本中行为相近的部分,最终得到程序的相似性分析结果。文献[41]抽取的行为特征包括运行环境的改变、文件操作、信号量锁定、注册表更改等,使用机器学习方法分析并提取恶意程序家族共享的行为特征,最终用于恶意程序检测。除此之外,也有文献使用其他方法刻画程序的语义。例如文献[42]将程序指令中的地址数据变为0x00,并去掉了基本块中的空指令,之后计算基本块的MD5值。该文献认为如果两个基本块的MD5值相同,则说明这两个基本块是语义等价的。整个方案中没有涉及到程序语义级别的信息,使用这种方法判定语义等价是否合理值得商榷。文献[43]利用“定义”作为相似性分析的中间件,通过定义逻辑炸弹,筛选满足指定语义特征的恶意程序。现有分析方法可分为两种:(1)从样本中提取语法特征。如果某些语法特征达到了某种条件即可判定为语义相似或等价;(2)从样本中提取语义特征,如果发现与已知语义特征相近或相同,则判定两个样本语义相似或等价。这种方案取得了比较理想的效果。但是该方法仍很难识别0day恶意程序,因为0day恶意程序可能会表现出已知恶意程序没有直接表现出的行为,鲜有文献能够对语义特征进行有效的推理分析从而识别0day恶意程序。4基于距离的相似性分析方法通用的相似性度量方法主要有:通用的序列相似性分析方法、基于距离的相似性分析方法和基于机器学习和数据挖掘的相似性分析方法。序列比对方法在生物信息学、语音数字信号处理、协议逆向工程等领域有着广泛应用。该方法同样适用于程序的相似性分析问题。序列比对是指将两个或多个序列排列在一起,找出序列之间的最大相似性匹配,同时辨别序列之间的差异基于距离的相似性分析方法的基本思路是各种恶意程序特征都可以转化为距离,并根据距离大小判定程序间的相似程度。基于距离的相似性分析方法主要使用Jaccard距离、字符串编辑距离、图编辑距离、夹角余弦和信息熵等。使用特征间距离度量样本相似性的方法同样取得了很高的分析效率和比较理想的分析结果,特别在恶意程序家族分类和相似样本检索问题中,该方法极大地提高了分析效率。该方案的问题在于分析过程中丢失了大量原始信息,相似性分析结果只有距离计算结果,无法从分析过程中获知程序中哪个位置的哪些元素是相同或相似的,因此这种方法不适用于精度较高的相似性分析需求。上文提及的各种恶意程序特征同样都可以使用机器学习或数据挖掘方法进行相似性分析。在现有文献5函数调用图特征函数调用图特征属于语法层

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论