一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于新型漏洞指纹的脆弱性检测方法及系统

2022-08-11 08:35:40 来源:中国专利 TAG:

技术特征:
1.一种基于新型漏洞指纹的脆弱性检测方法,其特征在于,包括:选取用于构建漏洞指纹的漏洞,从漏洞对应的公开数据库中获取漏洞补丁文件diff,获得漏洞修改前后的样本代码;构建代码解析器;利用代码解析器分别对漏洞补丁文件diff中修改前后的样本代码进行预处理,获得规范性代码;基于规范性代码和利用语法树形成控制流图,获取漏洞指纹;其中,漏洞指纹包含基本块特征序列;对于待检测代码,基于lcs算法计算待检测代码和形成漏洞指纹的补丁文件相似度,确定敏感代码段;对敏感代码段进行处理,得到敏感代码段的基本块特征序列和路径特征序列;将漏洞指纹中的基本块特征序列映射到一个m位的位图,初始状态每一位都置为0,基于位图对敏感代码段的基本块特征序列进行遍历,判断敏感代码段的基本块特征序列中的特征值是否在在位图中,若是,将位图中对应的位定为1;若否,则不进行改变;对敏感代码段进行标记,基于敏感代码段的路径特征序列,判断标记后的敏感代码段是否存在脆弱代码片段,若是,输出脆弱代码片段。2.根据权利要求1所述的基于新型漏洞指纹的脆弱性检测方法,其特征在于,所述构建代码解析器,具体为:基于开源解析器antlr4构建解析器对应的岛屿语法,生成代码解析器;在进行预处理之前,将所用代码转换为小写,删除多余空格、制表符、换行符和所有注释;将缩进样式改为lisp样式。3.根据权利要求2所述的基于新型漏洞指纹的脆弱性检测方法,其特征在于,所述代码解析器对漏洞补丁文件diff中修改前后的样本代码进行预处理,获得规范性代码,具体为:对函数和参数名、变量标识符、数据类型、字符串常量以及函数调用名进行统一替换;获得代码规范化和抽象化的结果。4.根据权利要求3所述的基于新型漏洞指纹的脆弱性检测方法,其特征在于,所述对函数和参数名、变量标识符、数据类型、字符串常量以及函数调用名进行统一替换,具体为:函数名与参数名替换:从函数的声明中获取所有形式参数,使用符号“_param”替换函数体中所有参数变量,使用符号“_funcdec”替换函数声明中的函数名;变量标识符替换:使用符号“_data”替换在函数体内定义并且使用的所有变量;数据类型替换:使用符号“_type”替换数据类型,但不替换signed、uns igned等类型修饰符;常量替换:使用符号“_str”替换代码中字符串常量,不替换所有print类函数中包含的“%”等格式字符的字符串参数;函数调用替换:使用符号“_function”替换每个被调用的函数的名称。5.根据权利要求4所述的基于新型漏洞指纹的脆弱性检测方法,其特征在于,所述基于规范性代码和利用语法树形成控制流图,获取漏洞指纹;具体为:5.1,利用语法树形成控制流图获取代码的基本块和基本块之间的控制转移路径;5.2,将修改前的补丁文件形成的基本块集合称为blocka,路径集合称为patha;修改后
的基本块集合称为blockb;5.3,利用哈希函数分别计算blocka和blockb中基本块的特征值和patha中路径的特征值;5.4,设置第一空白代码块特征序列和第二空白代码块特征序列,设置第一空白的路径特征序列,将获得的基本块特征值分别添加到第一空白代码块特征序列和第二空白代码块特征序列中,得到修改前的补丁文件的代码块特征序列seqa和修改后的补丁文件的代码块特征序列seqb;将patha获得的路径特征添加到第一空白的路径特征序列中,得到修改后的补丁文件的路径特征序列ha,并形成补丁文件diff对应的特征向量v(seqa,seqb,ha);5.5,针对漏洞补丁中所有的补丁文件diff,重复步骤5.1到5.4获得特征向量v1,v2...vn;特征向量v1,v2...vn共同组成漏洞指纹f{v1,v2...vn};所述漏洞指纹包含的基本块特征序列为修改前的补丁文件的代码块特征序列seqa和修改后的补丁文件的代码块特征序列seqb。6.根据权利要求5所述的基于新型漏洞指纹的脆弱性检测方法,其特征在于,所述对敏感代码段进行处理,得到敏感代码段的基本块特征序列和路径特征序列,具体为:6.1,将敏感代码段划分为若干个基本块和若干条路径,基本块形成的集合称为blockc,路径形成的集合称为pathc;6.2,利用哈希函数计算blockc中基本块的特征值和pathc中路径的特征值;6.3,设置空白的代码块特征序列和路径特征序列,将获得的基本块特征值添加到空的代码块特征序列中;将pathc获得的路径特征添加到空的路径特征序列,得到敏感代码段的代码块特征序列seqf和敏感代码段的路径特征序列hf。7.根据权利要求6所述的基于新型漏洞指纹的脆弱性检测方法,其特征在于,在对敏感代码段进行标记之前,还包括:判定敏感代码段是否满足预设条件;具体为:判定条件1:敏感代码段的代码块特征序列seqf和修改前的补丁文件的代码块特征序列seqa的交集不为空集,敏感代码段的代码块特征序列seqf和修后前的补丁文件的代码块特征序列seqb的交集为空集;判定条件2:对于同一向量形成的位图中特征值对应的位标签相同。8.根据权利要求7所述的基于新型漏洞指纹的脆弱性检测方法,其特征在于,所述判断标记后的敏感代码段是否存在脆弱代码片段,若是,输出脆弱代码片段;具体为:对于标记的敏感代码段,计算敏感代码段的路径特征序列hf和修改前的补丁文件的路径特征序列ha之间的皮尔逊相关系数;如果相关系数大于0.8则判定为脆弱代码片段。9.根据权利要求8所述的基于新型漏洞指纹的脆弱性检测方法,其特征在于,所述对于待检测代码,基于lcs算法计算待检测代码和形成漏洞指纹的补丁文件相似度,确定敏感代码段;具体为:通过计算待检测代码和形成漏洞指纹的补丁文件之间的最长公共子序列lcs,获取两段代码的相似度如公式(1)所示:其中,si为待测代码行数,sj为补丁文件行数;所述最长公共子序列lcs为待检测代码和形成漏洞指纹的补丁文件之间最长子序列;
所述皮尔逊相关系数如公式(2)所示:其中,xi为敏感代码段的路径特征序列hf的特征值,yi为修改前的补丁文件的路径特征序列ha的特征值。10.一种基于新型漏洞指纹的脆弱性检测系统,其特征在于,包括:获取模块,所述获取模块用于选取用于构建漏洞指纹的漏洞,从漏洞对应的公开数据库中获取漏洞补丁文件diff,获得漏洞修改前后的样本代码;构建模块,所述构建模块用于构建代码解析器;预处理模块,所述预处理模块利用代码解析器对分别对漏洞补丁文件diff中修改前后的样本代码进行预处理,获得规范性代码;漏洞指纹获取模块,所述漏洞指纹获取模块基于规范性代码和利用语法树形成控制流图,获取漏洞指纹;其中,漏洞指纹包含基本块特征序列;相似度计算模块,所述相似度计算模块对于待检测代码,基于lcs算法计算待检测代码和形成漏洞指纹的补丁文件相似度,确定敏感代码段;处理模块,所述处理模块用于对敏感代码段进行处理,得到敏感代码段的基本块特征序列和路径特征序列;第一判断模块,所述第一判断模块用于将漏洞指纹中的基本块特征序列映射到一个m位的位图,初始状态每一位都置为0,基于位图对敏感代码段的基本块特征序列进行遍历,判断敏感代码段的基本块特征序列中的特征值是否在在位图中,若是,将位图中对应的位定为1;若否,则不进行改变;第二判断模块,所述第二判断模块对敏感代码段进行标记,基于敏感代码段的路径特征序列,判断标记后的敏感代码段是否存在脆弱代码片段,若是,输出脆弱代码片段。

技术总结
本发明公开基于新型漏洞指纹的脆弱性检测方法及系统,包括:通过构建漏洞指纹的漏洞,收集修改前后的样本代码,构建代码解析器;利用代码解析器对漏洞补丁文件进行预处理,基于规范性代码和利用语法树形成控制流图,获取漏洞指纹;基于LCS算法计算待检测代码和形成漏洞指纹的补丁文件相似度,确定敏感代码段;对敏感代码段进行处理,得到敏感代码段的基本块特征序列和路径特征序列;将漏洞指纹映的基本块特征集合映射到位图中,基于位图对敏感代码段的基本块特征序列进行遍历;基于敏感代码段基本块特征序列和路径特征序列,判断敏感代码段是否存在脆弱代码片段,若是,输出脆弱代码片段。本发明提高了代码复用的检测效率和检测方法的鲁棒性与实用性。方法的鲁棒性与实用性。方法的鲁棒性与实用性。


技术研发人员:赵加坤 陈迪阳 杜小智
受保护的技术使用者:西安交通大学
技术研发日:2022.04.28
技术公布日:2022/8/9
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献