论文部分内容阅读
恶意软件指的是为了在用户设备上执行未经授权的恶意行为而创建的软件程序[1],这是信息时代所面临的一个极其普遍的安全威胁。因此,目前已经存在一系列的工作旨在解决恶意软件特征提取以及分类识别的问题。代码混淆技术可以极大地改变恶意软件的语法特征[2],从而得到一系列的同源恶意软件。受此影响,恶意软件的变种数量也随之出现了指数型增长的态势[3],这使得同源恶意软件分类识别的问题变得更为复杂和困难。因此,本文主要研究内容为:在限定范围的代码混淆技术的干扰之下,研究如何更加有效地进行同源恶意二进制软件分类识别的方法。本文针对该问题的重点以及难点进行了分析,针对以往相关工作的不足之处,给出了本文改进之后的同源恶意二进制软件分类识别方案。本文主要工作如下:1总结了以往关于恶意软件分类识别的相关工作,根据是否需要执行目标软件可以分为静态分析方法以及动态分析方法。由于运行时代码打包技术[13]的干扰,静态分析方法获取同源恶意软件的识别特征的难度非常大,因此本文主要关注动态分析方法的相关工作。动态分析方法的核心在于识别特征的定义。本文对已有的动态分析方法进行调研,说明了相关工作对于识别特征定义的演变过程,并且阐述了相关工作对应的不足之处:相关工作[28-31][16]的特征定义都是围绕系统调用依赖关系图所展开,关注于软件行为的操作过程,容易受到一部分系统调用混淆技术的干扰[33]。而Feature Set[8]的特征定义本质上关注于软件行为对指定操作对象的操作结果,可以很好地解决一部分系统调用依赖关系图所难以解决的系统调用混淆技术的干扰问题。但是由于其忽略了一部分系统调用参数的语义作用,其在面对部分非同源恶意软件的分类识别时不够准确。因此确定本文的工作目标为:改进相关工作的语义特征定义方式,使在其依旧具备对抗限定范围的代码混淆技术干扰的能力的同时,还能解决相关工作分类识别不够准确的问题。2针对相关工作分类识别不够准确的问题,本文给出改进之后的语义特征定义,即数据流系统调用序列,并且给出了与之相对应的数据流系统调用序列对齐算法。利用该特征定义与对应算法,求取同源恶意软件集合的最大公共子序列,从而得到同源恶意软件的恶意语义识别特征,最终利用该特征进行待检测样本的分类识别工作。本文假定的问题场景是存在已知的同源恶意二进制软件家族所构成的恶意软件集合,任务是判定待检测软件样本是否与集合中任一同源恶意软件家族同源。已知的恶意软件与待检测软件样本会使用的代码混淆技术的范围是基本块内混淆技术、控制流混淆技术、无用系统调用插入、系统调用依赖关系混淆。本文的解决方案通过动态执行获取待检测软件样本的系统调用序列以及相关执行指令,从而提取出待检测软件样本的语义特征,与先前获取得到的同源恶意软件的恶意语义识别特征进行比对,从而得到分类识别的判断结果,以此本文弥补了以往相关工作在面对部分非同源恶意软件时无法分类识别的缺陷。3基于Intel的插桩工具Pin实现了本文的动态执行环境,可以获取检测软件样本的系统调用序列以及执行指令序列;并且实现了同源恶意二进制软件特征提取的原型系统以及基于该语义特征对比的分类识别原型系统,并且对实际的恶意软件样本集合进行了实验评估。实验结果表明:数据流系统调用序列以及数据流系统调用序列对齐算法可以在代码混淆技术的干扰之下提取出用于同源恶意二进制软件分类识别所需的语义特征,从而完成分类识别工作,解决了以往相关工作中同源恶意二进制软件的分类识别的所遇到的部分困难。