【技术实现步骤摘要】
一种同源恶意代码的细粒度分类识别方法
本专利技术涉及同源恶意代码检测
,具体而言涉及一种同源恶意代码的细粒度分类识别方法。
技术介绍
恶意代码是信息时代所面临的一个极其普遍的安全威胁,并且恶意代码会通过代码混淆技术得到数量众多的变种。这些变种代码与原代码是属于同一个家族的同源恶意代码。因此利用已有的恶意代码提取得到按家族划分的恶意语义特征有助于待测代码的分类识别工作。系统调用序列分析可以获得代码实际执行时的行为特征,这有利于同源恶意代码的特征提取。目前的基于系统调用序列分析的同源恶意代码分类识别方案可以区分良性代码与恶意代码,但是对于恶意代码的分类识别粒度较粗,例如,在面对一部分具有相似系统调用的非同源的恶意代码时无法做到准确的分类识别。
技术实现思路
本专利技术目的在于提供一种同源恶意代码的细粒度分类识别方法,通过对系统调用关键参数的数据流进行分析,可以提取得到已有同源恶意代码库的恶意语义特征,并且将获得的恶意语义特征组织成恶意语义特征库,恶意语义特征库可以一直更新维护,从而为之后的待测代 ...
【技术保护点】
1.一种同源恶意代码的细粒度分类识别方法,其特征在于,所述细粒度分类识别方法包括以下步骤:/nS1,获取系统调用序列以及指令序列;/nS2,对系统调用序列以及指令序列进行分析,得到数据流系统调用序列,包括:/n筛选出系统调用序列中每一个系统调用的系统调用名称以及关键参数,以关键参数为源头对指令序列进行反向依赖分析,获取关键参数的数据赋值指令;再利用赋值关系分析,将关键参数的数据赋值指令转化为赋值表达式;最后将系统调用名称以及系统调用关键参数赋值表达式组合得到数据流系统调用,进一步得到数据流系统调用序列;/nS3,通过提取语义特征序列操作提取已有同源恶意代码库的恶意语义特征, ...
【技术特征摘要】
1.一种同源恶意代码的细粒度分类识别方法,其特征在于,所述细粒度分类识别方法包括以下步骤:
S1,获取系统调用序列以及指令序列;
S2,对系统调用序列以及指令序列进行分析,得到数据流系统调用序列,包括:
筛选出系统调用序列中每一个系统调用的系统调用名称以及关键参数,以关键参数为源头对指令序列进行反向依赖分析,获取关键参数的数据赋值指令;再利用赋值关系分析,将关键参数的数据赋值指令转化为赋值表达式;最后将系统调用名称以及系统调用关键参数赋值表达式组合得到数据流系统调用,进一步得到数据流系统调用序列;
S3,通过提取语义特征序列操作提取已有同源恶意代码库的恶意语义特征,所述提取语义特征序列操作包括:
对数据流系统调用序列进行排序预处理,将不存在依赖关系的数据流系统调用按照系统调用名称的字典序进行排序,再利用数据流系统调用序列对齐算法求解得到两个数据流系统调用序列的最大公共子序列;
S4,将获得的恶意语义特征组织成恶意语义特征库;
S5,获得待测代码的数据流系统调用序列,利用数据流系统调用序列对齐算法将之与恶意语义特征库中的恶意语义特征进行对比,对待测代码进行细粒度分类识别并且得出最终识别结果:是否为同源恶意代码和具体的恶意代码类别。
2.根据权利要求1所述的同源恶意代码的细粒度分类识别方法,其特征在于,步骤S1中,所述获取系统调用序列以及指令序列是指,利用Intel的动态插桩工具Pin来动态执行待分析的代码,执行过程中记录下代码的系统调用序列以及对应的指令序列,包括以下步骤:
S21,设置并且编译Pin动态执行器;
S22,设置Pin动态执行时的命令行;
S23,动态执行代码;
S24,记录代码的系统调用序列以及指令序列。
3.根据权利要求2所述的同源恶意代码的细粒度分类识别方法,其特征在于,步骤S24中,所述记录代码的系统调用序列以及指令序列的过程包括以下步骤:
S31,判断代码的动态执行过程是否结束,若已经结束转步骤S36,否则,转入步骤S32;
S32,获取当前执行的指令;
S33,判断当前指令是否为系统调用指令,若是转入步骤S34,否则,转入步骤S35;
S34,记录系统调用名称、系统调用参数列表以及“代码名称-执行指令.txt”文件所记录的指令序列,转入步骤S31;
S35,将当前指令记录到“代码名称-执行指令.txt”文件中,转入步骤S31;
S36,结束流程。
4.根据权利要求1所述的同源恶意代码的细粒度分类识别方法,其特征在于,步骤S2中,所述对系统调用序列以及指令序列进行分析,得到数据流系统调用序列的过程包括以下步骤:
S41,创建数据流系统调用序列链表;
S42,将系统调用序列以及指令序列链表的第一个节点赋值给临时节点tempNode;
S43,判断tempNode是否为Null,若是转入步骤S49,否则转入步骤S44;
S44,对tempNode进行反向依赖分析,将tempNode作为参数传给反向依赖分析操作,得到关键参数的数据赋值指令序列;
S45,对关键参数数据赋值指令序列进行赋值关系分析,将关键参数数据赋值指令序列作为参数传给赋值关系分析,得到关键参数赋值表达式Expression;
S46,创建新的数据流系统调用序列链表节点DFNode;
S47,将tempNode->SyscallId赋值给DFNode->SyscallId,将tempNode->SyscallName赋值给DFNode->SyscallName,将tempNode->DependenceSyscallId赋值给DFNode->DependenceSyscallId,将Expression加入到DFNode->CriticalArgumentExp;
S48,将DFNode追加到数据流系统调用序列链表的末尾,并且将tempNode->NextNode赋值给tempNode,转到步骤44;
S49,结束流程。
5.根据权利要求4所述的同源恶意代码的细粒度分类识别方法,其特征在于,步骤S44中,所述对tempNode进行反向依赖分析的过程包括以下步骤:
S51,根据不同系统调用确定关键参数,创建关键参数所依赖的变量,并且根据关键参数确定反向依赖分析的源头;
S52,设置变量x=1;
S53,从系统调用序列以及指令序列中取出第x条指令;
S54,判断第x条指令是否存在,若不存在则转入步骤S58,存在则转入步骤S55;
S55,判断第x条指令是否对关键参数以及关键参数所依赖的变量有数据赋值操作,若有操作则转到步骤S56,无操作则转到步骤S57;
S56,将第x条指令记录到“代码名称-关键参数数据赋值指令.txt”文件中,指令的源操作数内的变量加入关键参数所依赖的变量中,将指令的目的操作数从关键参数所依赖的变量中去除;
S57,将变量x加一,转到步骤S53;
S58,结束流程。
6.根据权利要求4所述的同源恶意代码的细粒度分类识别方法,其特征在于,步骤S45中,所述对关键参数数据赋值指令序列进行赋值关系分析的过程包括以下步骤:
S61,创建空的赋值表达式集合;
S62,定义变量y=1;
S63,从关键参数数据赋值指令序列中获取第y条指令;
S64,判断第y条指令是否存在,若不存在则结束流程,若存在则转入步骤S65;
S65,获取第y条指令源操作数以及目的操作数中的变量;
S66,判断赋值表达式集合内是否有步骤S65所得变量的定义,若有定义则转入步骤S67,若无定义则转入步骤S68;
S67,从赋值表达式集合中获取变量的赋值表达式,转到步骤S69;
S68,为变量定义一个新的赋值表达式,并且将其加入到赋值表达式集合中;
S69,根据第y条指令,对目的操作数内的变量进行数据赋值运算,更新该变量在赋值表达式集合内的赋值表达式;
S6a,对变量y加一,转到步骤S63。
7.根据权利要求1所述的同源恶意代码的细粒度分类识别方法,其特征在于,步骤S3中,所述对数据流系统调用序列进行排序预处理的过程包括以下步骤:
S81,输入数据流系统调用序列Arg_s1,Arg_s1为调用时输入的参数;
S82,获取Arg_s1链表的表头head;
S83,创建非元素节点p,p=head->NextNode,创建临时节点r,r=head->NextNode;
S84,创建记录节点record,record->NextNode=head;
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。