著录项信息
专利名称 | 一种恶意代码行为特征提取方法 |
申请号 | CN200910237422.X | 申请日期 | 2009-11-06 |
法律状态 | 权利终止 | 申报国家 | 暂无 |
公开/公告日 | 2011-05-11 | 公开/公告号 | CN102054149A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F21/56 | IPC分类号 | G;0;6;F;2;1;/;5;6查看分类表>
|
申请人 | 中国科学院研究生院 | 申请人地址 | 北京市石景山区玉泉路19号(甲)
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 中国科学院研究生院 | 当前权利人 | 中国科学院研究生院 |
发明人 | 王蕊;杨轶;冯登国 |
代理机构 | 北京君尚知识产权代理事务所(普通合伙) | 代理人 | 邵可声 |
摘要
本发明公开了一种恶意代码行为特征提取方法,属于网络安全技术领域。本发明的方法为:1)运行恶意代码,提取恶意代码的执行信息;所述执行信息包括恶意代码的执行指令序列和行为序列;2)根据执行信息,构造执行代码的控制依赖图和数据依赖图;3)对控制依赖图和数据依赖图进行关联性比较,记录相关的关联性信息;4)比较不同恶意代码之间的控制依赖图和数据依赖图,根据相似性聚类,提取每类样本的特征依赖。与现有技术相比,本发明具有信息提取全面、抗干扰性强,而且对单个样本特征的变种具有一定的适用性,同时具有特征库规模小、适应范围广的特点。
1.一种恶意代码行为特征提取方法,其步骤为:
1)运行恶意代码,提取恶意代码的执行信息;所述执行信息包括恶意代码的执行指令序列和行为序列;其中,所述执行指令序列的提取方法为:将所述恶意代码运行于一硬件模拟器上;然后在所述硬件模拟器翻译层添加一反汇编引擎;在指令被翻译之后,执行之前记录恶意代码样本执行的所有指令以及寄存器的信息;
2)根据执行信息,构造执行代码的控制依赖图和数据依赖图;
3)对控制依赖图和数据依赖图进行关联性比较,记录相关的关联性信息;
4)比较不同恶意代码之间的控制依赖图和数据依赖图,根据相似性聚类,提取每类样本的特征依赖。
2.如权利要求1所述的方法,其特征在于所述行为序列提取方法为:
1)在恶意代码进程加载之后,执行之前,通过虚拟机读取进程的内存及进程加载的动态库中的导出表;
2)通过比较导出表中API名称与API表中的名称,从导出表中获取对应API的地址并将其加入到API表中;所述API表包括API名称、API地址及API参数和返回值;
3)恶意代码执行中,将当前CPU的EIP值与API表中函数地址的参数逐一做匹配比较;
所述EIP值为CPU当前执行的指令所在的位置;
4)当EIP值和API表中的函数地址相同时,读取堆栈获得函数的参数和返回地址,将返回地址记录在函数列表中,当EIP值和函数列表中的返回地址相同时,读取函数的返回值。
3.如权利要求1所述的方法,其特征在于采用动态污点传播的方法构建所述控制依赖图和数据依赖图,其方法为:
1)将感兴趣的数据标记为污点,同时创建影子内存,记录污点内存被访问的状态;
2)在恶意代码执行过程中监控系统调用,当发生新的系统调用时,查询记录的污点传播过程,找到产生该污点的系统调用;
3)在两个系统调用之间建立依赖关系,同时根据操作对于变量和污点的使用情况,确定调用之间是控制依赖还是数据依赖关系,从而得到控制依赖图和数据依赖图。
4.如权利要求1或3所述的方法,其特征在于通过比较所述控制依赖图中的函数地址和所述数据依赖图中的函数地址,对所述控制依赖图和数据依赖图进行关联性比较;其方法为:首先对比数据依赖图和控制依赖图的系统调用地址,然后在含有相同系统调用地址的控制依赖图与数据依赖图间建立关联关系。
5.如权利要求3所述的方法,其特征在于步骤3)之后,步骤4)之前对所述控制依赖图和数据依赖图进行预处理,识别并删除控制依赖图和数据依赖图中的可删除调用;所述可删除调用为:将对操作系统产生影响的函数构成一敏感函数集合,在污点传播中,产生了污点,但到其被漂白为止,未发生任何传播,或者发生了传播,其控制集合为空,没有任何敏感操作与之产生数据或控制依赖关系;如果某单个系统调用为所述可删除调用,则从所述控制依赖图或数据依赖图中删掉该系统调用的节点和边;如果某个控制依赖图或者数据依赖图从污点开始的所有系统调用操作都没有引起系统状态的改变,则将该图删除。
6.如权利要求5所述的方法,其特征在于步骤3)之后,步骤4)之前对所述控制依赖图和数据依赖图中的循环进行缩减,其方法为:
1)采用自然循环识别算法识别所述恶意代码中的循环;
2)根据每一次循环的过程,计算执行时污点是否连续,如果发现相同的污点传播过程在一条路径上执行,则对该路径进行缩减;缩减的方法是:首先识别自然循环的开始和结束,然后分析每一次循环对于污点内存的操作地址和长度,如果后一次循环读取的起始地址等于前一次循环读取的起始地址和读取长度之和,则将该指令和系统调用缩减为一条指令,缩减后的指令起始为前一次循环的起始地址,长度为两次循环读取的长度之和。
7.如权利要求6所述的方法,其特征在于步骤3)之后,步骤4)之前对所述控制依赖图和数据依赖图中的等价调用进行统一,其方法为:建立一行为等价系统调用库,在该库中设置行为序列,同时将多种等价行为序列映射为相同的内容。
8.如权利要求7所述的方法,其特征在于步骤3)之后,步骤4)之前统计所述控制依赖图和数据依赖图的行为轮廓信息;其方法为:分别从控制依赖图和数据依赖图的入口点开始遍历,遇到节点时判断节点类型,并将该节点所表示的函数所在的类别标志加入类别记录中,同时增加表示该类函数调用个数的计数,一直到所有节点都遍历完成为止;所述函数的类型包括:文件访问、注册表访问、网络访问、进程操作。
9.如权利要求1所述的方法,其特征在于采用基于系统调用对齐的比较方法比较不同恶意代码之间的控制依赖图和数据依赖图,其方法为:
1)选取两个恶意代码中行为轮廓差异最小的两个控制依赖图;
2)以控制依赖图入口点为起点进行递归比较,在比较入口点相同后,以入口点为起点,递归遍历与其有边连接的节点,对节点的相似性进行比较;其中比较的节点为同是出边或入边连接的节点;
3)当两个节点同为出边或同为入边连接并且所表示的系统调用相同,则这两个节点互为等价节点,将这两个节点都标记为visited,并以这两个节点为起点,递归遍历其所有相连的状态未标记为visited的节点并进行比较,如果发现与某个节点相连的节点都为visited,则该节点的递归计算完成,返回上一级函数;
4)重复上述步骤1)到3),对不同恶意代码之间的数据依赖图进行比较。
10.如权利要求1所述的方法,其特征在于使用有限状态自动机表示所述特征依赖,其方法为:
1)初始状态下,有限状态自动机集合为空;
2)从特征样本的控制依赖图和数据依赖图集合中任取一个依赖图,将该依赖图的入口节点加入有限状态自动机,作为起始状态S;
3)将S置为当前节点S,由当前节点开始遍历步骤2中所选的依赖图;
4)当与当前节点相连的节点所在类别与当前节点不同时,在有限状态自动机中加入一个节点,并使用状态转换边将该节点和当前节点连接起来;如果相连的节点和当前节点同属一个类别,则在当前节点上添加一个到自身的状态转换边;
5)重复上述步骤3)和4),遍历步骤2中所选依赖图中所有节点。
11.如权利要求1所述的方法,其特征在于当新的恶意代码出现时,将其与每个聚类中的特征依赖进行比较,确定其聚类的归属;然后将新的恶意代码添加到对应的聚类中,重新计算聚类的特征依赖。
一种恶意代码行为特征提取方法\n技术领域\n[0001] 本发明属于网络安全技术领域,具体涉及一种恶意代码行为特征提取方法。\n背景技术\n[0002] 随着计算机在各领域应用的日益广泛,恶意代码已成为当前互联网和计算机安全的主要威胁之一,恶意代码检测成为软件及系统安全的重要问题。随着计算机技术的不断发展,恶意代码呈现出传播速度快、感染能力强、破坏力大的特点,造成越来越严重的安全影响甚至经济损失。随着恶意代码技术的发展,其利用混淆技术以及隐藏技术,可在短时间内产生大量变种,传统的基于代码特征的特征提取和匹配方法已无法对其进行有效防护。\n因此,提高恶意代码特征提取的准确性和所提取特征的适应性成为当前亟待解决的问题。\n[0003] 现有的恶意代码特征提取方法,可分为静态分析提取和动态分析提取。由于一般无法获得恶意代码源代码,静态提取方法一般需先对代码进行反汇编,然后提取特征。静态提取通常依赖于反汇编技术,恶意代码可使用混淆技术使反汇编无法顺利进行,从而无法有效提取代码特征;但静态提取方法分析代码全面,不局限于单一路径,可辅助动态分析。动态提取方法在恶意代码执行过程中提取特征,所分析的代码即为实际执行的代码。\n为避免实际执行代码会对操作系统产生恶意影响,产生了利用虚拟机的调试分析方法,如VMware、VirtualPC等虚拟机系统,但恶意代码可通过检查代码执行时间等方法检查其在虚拟机上执行,从而改变行为对抗分析。\n[0004] 当前的恶意代码特征提取技术,通常使用如下几种特征形式:\n[0005] 1.提取指令序列特征\n[0006] 目前商用恶意代码检测工具多使用简单的指令序列作为特征进行匹配,此方法必须使用不同的特征来表示即使简单的变种,特征数据库大,且易被简单的混淆技术绕过。\n[0007] 2.提取API调用序列\n[0008] 使用恶意代码与系统交互的API调用序列作为特征,记录指令序列使用序列匹配方法或者有限状态机,判断恶意行为。恶意代码采用重排顺序无关的系统调用,或插入无关API调用的方法可躲避基于此类特征的检测。\n[0009] 3.提取系统消息和事件序列\n[0010] 使用系统的状态变化作为恶意代码行为的描述,监控代码和系统的交互,记录系统消息和事件序列作为特征。此方法描述仍然针对于恶意代码行为的顺序,因此容易被混淆手段反制。\n[0011] 4.统计信息特征\n[0012] 使用统计信息,如使用操作码的频率分布,记录恶意代码执行的操作类型,对每种类型的系统调用个数进行统计。根据统计规律指定特定的指令分布作为特征。恶意代码通过垃圾代码插入的混淆技术可使此类特征匹配失效。\n[0013] 5.使用差异子图\n[0014] 提取恶意代码与正常代码的行为,将其构成CFG控制流图,并将CFG进行对比,获取差异子图作为特征,由于有些行为正常代码和恶意代码均会产生,只是在特定上下文中或次数不同而界定为恶意,此时只提取差异子图不足以描述恶意代码特征;且如何选用作比较的正常代码会对准确性及特征大小产生影响。\n[0015] 随着恶意代码技术的发展,变形、加壳等技术给特征提取及检测带来了很大的困难,尤其是混淆技术,恶意代码通过垃圾代码插入、等价指令替换、寄存器重分配、代码变换(如改变指令顺序,插入jump等跳转指令)等方式,使其代码特征表象产生变化,与传统方式提取的特征无法匹配,成功躲避基于传统特征的检测。\n[0016] 综上所述,目前恶意代码特征提取的主要问题有:分析及跟踪恶意代码以提取特征的系统与恶意代码拥有相等的权限,复杂的隐藏技术可绕过分析使特征无法提取;未能全面提取数据依赖和控制依赖信息表示特征,特征准确性不高;提取多针对单一恶意代码样本,对利用混淆技术产生的变种无法检测,特征适应性不强;轻微混淆技术产生的变种即产生新的特征,特征库庞大,带来存储以及匹配时间复杂度隐患。\n发明内容\n[0017] 本发明的目的在于提供一种恶意代码行为特征提取方法,通过在模拟硬件环境里执行恶意代码,分析虚拟CPU上的指令,获取恶意代码运行中的行为依赖关系并构建恶意代码的控制依赖图和数据依赖图,并通过对恶意代码行为依赖图和数据依赖图的统计,提取恶意代码行为特征用于检测。\n[0018] 本发明的主要内容如下:\n[0019] 1、将获取到的恶意代码样本放入硬件模拟器环境中,在硬件模拟器上运行恶意代码,获取执行信息。\n[0020] 2、监控硬件模拟器的虚拟CPU,根据执行代码信息,构造执行代码的控制依赖图和数据依赖图。\n[0021] 3、根据控制依赖图和数据依赖图记录的相关信息,对相同的系统函数进行比较,记录关联性。\n[0022] 4、对控制依赖图和数据依赖图进行预处理,缩减循环,识别其中的可删除调用和等价调用。统计依赖图的行为轮廓信息。\n[0023] 5、比较不同恶意代码样本的控制依赖和数据依赖图,根据相似性聚类,提取一类样本的特征依赖关系。\n[0024] 6、使用有限状态自动机(DFA)表示依赖特征。\n[0025] 为实现本发明的目的,本发明的技术方案为:\n[0026] 一种恶意代码行为特征提取方法,其步骤为:\n[0027] 1)运行恶意代码,提取恶意代码的执行信息;所述执行信息包括恶意代码的执行指令序列和行为序列;\n[0028] 2)根据执行信息,构造执行代码的控制依赖图和数据依赖图;\n[0029] 3)对控制依赖图和数据依赖图进行关联性比较,记录相关的关联性信息;\n[0030] 4)比较不同恶意代码之间的控制依赖图和数据依赖图,根据相似性聚类,提取每类样本的特征依赖。\n[0031] 进一步的,所述指令执行序列的提取方法为:将所述恶意代码运行于一硬件模拟器上;然后在所述硬件模拟器翻译层添加一反汇编引擎;在指令被翻译之后,执行之前记录恶意代码样本执行的所有指令以及寄存器的信息。\n[0032] 进一步的,所述行为序列提取方法为:\n[0033] 1)在恶意代码进程加载之后,执行之前,通过虚拟机读取进程的内存及进程加载的动态库中的导出表;\n[0034] 2)通过比较导出表中API名称与API表中的名称,从导出表中获取对应API的地址并将其加入到API表中;所述API表包括API名称、API地址及API参数和返回值;\n[0035] 3)恶意代码执行中,将当前CPU的EIP值与API表中函数地址的参数逐一做匹配比较;所述EIP值为CPU当前执行的指令所在的位置;\n[0036] 4)当EIP值和API表中的函数地址相同时,读取堆栈获得函数的参数和返回地址,[0037] 将返回地址记录在函数列表中,当EIP值和函数列表中的返回地址相同时,读取函数的返回值。\n[0038] 进一步的,采用动态污点传播的方法构建所述控制依赖图和数据依赖图,其方法为:\n[0039] 1)将感兴趣的数据标记为污点,同时创建影子内存,记录污点内存被访问的状态;\n[0040] 2)在恶意代码执行过程中监控系统调用,当发生新的系统调用时,查询记录的污点传播过程,找到产生该污点的系统调用;\n[0041] 3)在两个系统调用之间建立依赖关系,同时根据操作对于变量和污点的使用情况,确定调用之间是控制依赖还是数据依赖关系,从而得到控制依赖图和数据依赖图。\n[0042] 进一步的,通过比较所述控制依赖图中的函数地址和所述数据依赖图中的函数地址,对所述控制依赖图和数据依赖图进行关联性比较;其方法为:首先对比数据依赖图和控制依赖图的系统调用地址,然后在含有相同系统调用地址的控制依赖图与数据依赖图间建立关联关系。\n[0043] 进一步的,对所述控制依赖图和数据依赖图进行预处理,识别并删除控制依赖图和数据依赖图中的可删除调用;所述可删除调用为:将对操作系统产生影响的函数构成一敏感函数集合,在污点传播中,产生了污点,但到其被漂白为止,未发生任何传播,或者发生了传播,其控制集合为空,没有任何敏感操作与之产生数据或控制依赖关系;如果某单个系统调用为所述可删除调用,则从所述控制依赖图或数据依赖图中删掉该系统调用的节点和边;如果某个控制依赖图或者数据依赖图从污点开始的所有系统调用操作都没有引起系统状态的改变,则将该图删除。\n[0044] 进一步的,对所述控制依赖图和数据依赖图中的循环进行缩减,其方法为:\n[0045] 1)采用自然循环识别算法识别所述恶意代码中的循环;\n[0046] 2)根据每一次循环的过程,计算执行时污点是否连续,如果发现相同的污点传播过程在一条路径上执行,则对该路径进行缩减;缩减的方法是:首先识别自然循环的开始和结束,然后分析每一次循环对于污点内存的操作地址和长度,如果后一次循环读取的起始地址等于前一次循环读取的起始地址和读取长度之和,则将该指令和系统调用缩减为一条指令,缩减后的指令起始为前一次循环的起始地址,长度为两次循环读取的长度之和。\n[0047] 进一步的,对所述控制依赖图和数据依赖图中的等价调用进行统一,其方法为:建立一行为等价系统调用库,在该库中设置行为序列,同时将多种等价行为序列映射为相同的内容。\n[0048] 进一步的,统计所述控制依赖图和数据依赖图的行为轮廓信息;其方法为:分别从控制依赖图和数据依赖图的入口点开始遍历,遇到节点时判断节点类型,并将该节点所表示的函数所在的类别标志加入类别记录中,同时增加表示该类函数调用个数的计数,一直到所有节点都遍历完成为止;所述函数的类型包括:文件访问、注册表访问、网络访问、进程操作。\n[0049] 进一步的,采用基于系统调用对齐的比较方法比较不同恶意代码之间的控制依赖图和数据依赖图,其方法为:\n[0050] 1)选取两个恶意代码中行为轮廓差异最小的两个控制依赖图;\n[0051] 2)以控制依赖图入口点为起点进行递归比较,在比较入口点相同后,以入口点为起点,递归遍历与其有边连接的节点,对节点的相似性进行比较;其中比较的节点为同是出边或入边连接的节点;\n[0052] 3)当两个节点同为出边或同为入边连接并且所表示的系统调用相同,则这两个节点互为等价节点,将这两个节点都标记为visited,并以这两个节点为起点,递归遍历其所有相连的状态未标记为visited的节点并进行比较,如果发现与某个节点相连的节点都为visited,则该节点的递归计算完成,返回上一级函数;\n[0053] 4)重复上述步骤1)到3),对不同恶意代码之间的数据依赖图进行比较。\n[0054] 进一步的,使用有限状态自动机表示所述特征依赖,其方法为:\n[0055] 1)初始状态下,有限状态自动机集合为空;\n[0056] 2)从特征样本的控制依赖图和数据依赖图集合中任取一个依赖图,将该依赖图的入口节点加入有限状态自动机,作为起始状态S;\n[0057] 3)将S置为当前节点S,由当前节点开始遍历步骤2中所选的依赖图;\n[0058] 4)当与当前节点相连的节点所在类别与当前节点不同时,在有限状态自动机中加入一个节点,并使用状态转换边将该节点和当前节点连接起来;如果相连的节点和当前节点同属一个类别,则在当前节点上添加一个到自身的状态转换边;\n[0059] 5)重复上述步骤3)和4),遍历步骤2中所选依赖图中所有节点。\n[0060] 进一步的,当新的恶意代码出现时,将其与每个聚类中的特征依赖进行比较,确定其聚类的归属;然后将新的恶意代码添加到对应的聚类中,重新计算聚类的特征依赖。\n[0061] 本发明的优点和积极效果如下:\n[0062] 1.本发明提取恶意代码的控制依赖和数据依赖特征,提取信息全面,其描述方式不针对行为和指令的次序,因此具有更好的抗干扰性。\n[0063] 2.本发明使用依赖图预处理的方法,对产生的控制和数据依赖图进行处理,消除因为代码混淆如垃圾代码插入及代码变换引起的特征改变,进一步增强了抗干扰性。\n[0064] 3.本发明通过由相似性比较对恶意代码聚类再提取的方法,抽象提取出一类恶意代码的行为特征而非单个样本特征,可适用于一定的变种。\n[0065] 4.本发明使用大量恶意代码的统计信息提取特征,具有特征库规模小,适应范围广的特点。\n附图说明\n[0066] 图1基于控制依赖和数据依赖的恶意代码行为特征提取方法流程图。\n具体实施方式\n[0067] 下面结合附图详细说明本发明的技术方案:\n[0068] 如图1所示,一种基于控制依赖和数据依赖的恶意代码特征提取方法,包括步骤:\n[0069] 1、提取恶意代码的执行指令序列和行为序列。\n[0070] 采用硬件模拟器翻译层记录的方法,在硬件模拟器环境中执行恶意代码。通过在翻译层次添加反汇编引擎,在指令被翻译之后,执行之前记录恶意代码样本执行的所有指令以及寄存器的信息。对于行为序列的提取,需获取API地址和参数,本发明在进程加载之后,代码执行之前,通过虚拟机,读取进程的内存,并分析进程加载的动态库中的导出表,导出表包括API名称和API地址,通过采用字符比较的方法,比较导出表中API名称与API表中的名称,获取导出表中所有API的地址,将所有API地址加入到API表,所述API表包括API名称、API地址及API参数和返回值,此处的API参数和返回值在微软提供的程序开发文档中有详细描述,为业内共知。恶意代码执行中,将当前CPU的EIP值与API表中函数地址的参数逐一做匹配比较。(EIP指CPU执行程序时的地址寄存器,表示当前执行的指令所在的位置)当EIP的值和API表中的函数地址相同时,说明调用了对应的函数。此时可以读取堆栈获得函数的参数和返回地址,将返回地址记录在函数列表中,当EIP和函数列表中的返回地址相同时,读取函数的返回值。(此处使用的读取堆栈获取函数参数和返回值的获取方法是业内较为常用的。)\n[0071] 2、监控硬件模拟器的虚拟CPU,根据执行代码信息,构造执行代码的控制依赖图和数据依赖图。\n[0072] 恶意代码的控制依赖图和数据依赖图在执行的过程中通过分析虚拟CPU指令进行构建。通过硬件模拟器的译码模块获得当前模拟CPU的类型,使得模拟CPU的指令转化为本地CPU的指令再运行,在虚拟机上运转的操作系统能够正确的执行指令,可模拟多种CPU。\n[0073] 本发明中代码的控制依赖图和数据依赖图,通过污点传播过程构建(动态污点传播技术可参考《Dynamic Taint Analysis for Automatic Detection,Analysis,and SignatureGeneration of Exploits on Commodity Software》)。我们将感兴趣的数据标记为污点,如将创建文件函数CreateFile获得的文件句柄,或ReadFile函数读取的文件内容据标记为污点,同时创建影子内存,记录污点内存被访问的状态。在恶意代码执行中由于在虚拟CPU中获取的是汇编语言代码,相对于源码丢失了大量语义信息。为了构造控制依赖和数据依赖,需要在汇编语言层次,对相关内容进行污点传播。在执行过程中监控系统调用,当发生新的系统调用时,查询记录的污点传播过程,分析系统调用使用的污点,回溯污点过程,找到产生该污点的调用,在两个系统调用之间建立依赖关系,同时根据操作对于变量和污点的使用情况,以此确定调用之间是控制依赖还是数据依赖关系,从而得到控制依赖图和数据依赖图。\n[0074] 3、根据控制依赖图和数据依赖图记录的相关信息,对相同的系统函数进行比较,记录关联性。\n[0075] 在生成依赖图后,需要对控制依赖图和数据依赖图进行关联性比较,记录相关的关联性信息。关联性信息是通过比较系统API的调用地址产生的。在依赖图的构建中已经记录了系统调用的地址,通过比较控制依赖图中的函数地址和数据依赖图中的函数地址,确定关联关系。\n[0076] 首先对比数据依赖图和控制依赖图的系统调用地址,当其中存在相同地址的系统调用时,确定关联关系;在含有相同系统调用地址的控制依赖图与数据依赖图间建立关联关系。此时控制依赖图和数据依赖图中不仅仅包含节点和边,也包含有记录对应关系的数据。(控制依赖图的概念和数据依赖图的概念是共知的)\n[0077] 4、对依赖图进行预处理,缩减循环,识别其中的可删除调用和等价调用。统计依赖图的行为轮廓信息。\n[0078] 首先进行的是可删除行为识别。将对操作系统产生影响的函数构成一敏感函数集合,在污点传播中,可删除行为的特征是:产生了污点,但到其被漂白为止,未发生任何传播,或者发生了传播,其控制集合为空,没有任何敏感操作(即对操作系统产生影响的函数)与之产生数据或控制依赖关系。满足以上条件,可知当前行为是可删除行为,可以从图中删除。可删除的行为可能是单个系统调用,也可能是一个控制依赖图或数据依赖图。对于单个系统调用,则直接从数据依赖图和控制图中删掉它的节点和边。对于一个控制依赖图或者数据依赖图,如果该图中从污点开始的所有系统调用操作都没有引起系统状态的改变,则直接将该图删除。\n[0079] 循环缩减,是为了消除动态控制依赖图和数据依赖图构造过程中产生的冗余数据。由于行为提取是动态分析过程,记录了进程执行的整个过程,因此循环在控制依赖图中表示为一个连续的操作序列。并采用自然循环识别算法识别代码中的循环。根据每一次循环的过程,计算执行时污点是否连续,如果发现相同的污点传播过程在一条路径上执行,则对该路径进行缩减。缩减的方法是首先识别自然循环的开始和结束,然后分析每一次循环对于污点内存的操作地址和长度,如果后一次循环读取的起始地址等于前一次循环读取的起始地址和读取长度之和,则将该指令和系统调用缩减为一条指令,其起始为前一次的起始地址,长度为两次读取的长度之和。\n[0080] 等价系统调用序列:即在代码中调用次序不同,或函数名称不同,而功能相同的函数调用序列。如在恶意代码的编写过程中,常使用文件映射函数来替换文件读写函数,将文件映射进内存之后,使用内存操作指令读写文件内容。对于此类的混淆方法,本发明建立了行为等价系统调用库,在该库中设置行为序列,将多种等价行为序列映射为相同的内容。通过对于等价调用序列的识别和替换,我们使用了统一的方式描述经过混淆的行为,具有更好的抗干扰能力。\n[0081] 统计依赖图的行为轮廓信息,即统计调用信息是为了降低后续相似性比较的空间复杂度和时间复杂度.将系统函数分为文件访问、注册表访问、网络访问、进程操作四类。\n从控制依赖图和数据依赖图的入口点开始遍历,分析访问到的节点,在遇到节点时判断节点类型,并将该函数所在的类别标志加入类别记录中,同时增加在表示该类函数调用个数的计数,一直到所有节点都遍历完成为止。\n[0082] 5、比较不同恶意代码之间的控制依赖图和数据依赖图,根据相似性聚类,提取能代表该类样本的特征依赖。\n[0083] 在控制依赖图和数据依赖图的比较中,使用基于系统调用对齐的比较方法。系统调用对齐的方法是一种基于行为统计信息的方法,其核心思想是以代码执行的系统调用统计信息和控制依赖结构信息为指引,简化代码依赖性比较过程。我们把两个代码产生的控制依赖图和控制依赖图相比较,数据依赖图和数据依赖图相比较。系统调用对齐的过程分为两个部分,第一部分是系统调用轮廓的对齐,根据行为轮廓差异的大小,确定两个集合中控制依赖图和数据依赖图比较的先后次序,确定顺序的方法是计算依赖图中各个函数调用个数的差值,将其求和,调用图的比较顺序即是差值从小到大的顺序。第二部分是操作序列的对齐,即在依赖图的比较过程中,寻找相同的系统调用作为比较的起点。\n[0084] 在比较步骤上,我们首先比较控制依赖图,然后比较数据依赖图。控制依赖图比较算法在进行比较前,首先选取两个代码中行为轮廓差异最小的两个控制依赖图,以控制依赖图入口点Entry为起点进行递归比较。在比较入口点相同后,以入口点为起点,递归遍历与其有边连接的节点,对节点的相似性进行比较。此处要注意的是,必须同是出边或入边连接的节点才可以比较。等价节点的判定规则是,当两个节点同为出边或同为入边连接并且所表示的系统调用相同,则这两个节点互为等价节点,可将两个节点都标记为visited,并以这两个节点为起点,递归遍历其所有相连的状态非visited的节点并进行比较。在比较中,如果发现与某个节点相连的节点都为visited,则该节点的递归计算完成,返回上一级函数。在使用上面的方法比较控制依赖图后,我们采用相同的方法来比较数据依赖图。通过首先比较控制依赖图,然后比较数据依赖图的方法,确定恶意代码之间的相似性。\n[0085] 在比较控制依赖图和数据依赖图后,得到了两个恶意代码之间的相似性关系。其相似度的度量方法为:差异系统调用个数/所有系统调用个数。并在实验中人工确定阈值为70%,根据阈值以及相似度的不同,将恶意代码分为不同的聚类。\n[0086] 在此处使用机器学习的方法进行特征依赖关系提取。具体步骤是,从每个聚类中提取该聚类中重叠次数最多的依赖图,作为该类样本的特征依赖关系。当新的恶意代码出现时,将其与每个聚类中的特征依赖进行比较,确定其聚类的归属。同时在集合的扩充过程中,重新计算优化类的特征依赖。\n[0087] 6、使用有限状态自动机(DFA)表示特征依赖\n[0088] 在提取一类样本的控制依赖和数据依赖特征后,为了减小存储空间,加快恶意代码识别的速度,需要对使用控制依赖图和数据依赖图描述的恶意代码行为特征进行缩减。\n此处使用了有限状态自动机来定义行为特征模式。\n[0089] 有限状态自动机的构造过程。初始状态下,有限状态自动机集合为空,从特征样本的控制依赖图和数据依赖图集合中任取一个依赖图,从该依赖图的入口开始构造。首先将该依赖图的入口节点加入有限状态自动机,作为起始状态S。将当S置为前节点,由当前节点开始遍历依赖图。本发明将系统调用分为文件操作、网络操作、进程操作和注册表操作四类,当与当前节点相连的节点所在类别与当前节点不同时,我们在有限状态自动机中加入一个节点,并使用状态转换边将该节点和当前节点连接起来;如果相连的节点和当前节点同属一个类别,则在当前节点上添加一个到自身的状态转换边。有限状态自动机构建完成的条件是当前依赖图中所有节点都已经被遍历到。在作为特征的有限状态自动机中,除起始节点外的所有节点都可以做为终止节点,其有效性权值保存在终止节点中,由程序根据统计次数的多少和操作敏感性计算确定。\n[0090] 本发明提出的恶意代码特征提取方法,对于本领域的技术人员而言,可以根据需要自已配置各种检测敏感度信息,设计检测和分析方法,精确获得恶意代码的特征。\n[0091] 尽管为说明目的公开了本发明的具体实施例和附图,其目的在于帮助理解本发明的内容并据以实施,但是本领域的技术人员可以理解:在不脱离本发明及所附的权利要求的精神和范围内,各种替换、变化和修改都是可能的。因此,本发明不应局限于最佳实施例和附图所公开的内容,本发明要求保护的范围以权利要求书界定的范围为准。
法律信息
- 2019-10-29
未缴年费专利权终止
IPC(主分类): G06F 21/56
专利号: ZL 200910237422.X
申请日: 2009.11.06
授权公告日: 2013.02.13
- 2013-02-13
- 2011-06-29
实质审查的生效
IPC(主分类): G06F 21/22
专利申请号: 200910237422.X
申请日: 2009.11.06
- 2011-05-11
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2007-07-25
|
2006-11-27
| | |
2
| |
2008-03-12
|
2007-09-18
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |