【技术实现步骤摘要】
基于代码属性图的软件脆弱性智能检测方法、系统及介质
本专利技术涉及计算机程序检测、以及软件脆弱性检测检测
,具体涉及一种基于代码属性图的软件脆弱性智能检测方法、系统及介质。
技术介绍
软件脆弱性是指软件在其生命周期(即开发、部署、执行整个过程)中存在的缺陷,这些缺陷可被不法分子利用,如绕过系统的访问控制、非法窃取较高的权限等,往往造成用户隐私数据泄露、数字资产被盗、系统信息被更改等安全问题,从而导致企业和个人巨大的经济损失和名誉损失。随着现在软件系统的复杂度越来越高,规模越来越大,脆弱性代码出现的频率也在不断提升。根据美国国家漏洞数据库(NationalVulnerabilityDatabase,NVD)公布数据显示,2017年公布的脆弱性代码数目为14645个,2018年公布的脆弱性代码数目为16511个,2019年公布的脆弱性代码数目为17305个。随着计算机技术的发展,脆弱性代码出现的频率也在不断上升,因此及时发现软件中存在的脆弱性代码是一份十分重要的工作。目前检测软件脆弱性的方法主要有静态、动态和混合三大类。静态方法包括基于规则的分析、代码相似性检测(即代码克隆检测)和符号执行等方法。其中,基于规则的分析主要依靠专家人工去发现脆弱性代码中的脆弱性代码中的规则,并用脆弱性代码的规则对源代码进行匹配;代码相似性检测是将源代码与脆弱性代码进行相似度比较,进而发现脆弱性;符号执行是将输入用符号来表征而不是具体值,将程序的执行过程和程序变量表征成符号表达式。静态分析技术主要依靠对源代码的分析,往往难以发现 ...
【技术保护点】
1.一种基于代码属性图的软件脆弱性智能检测方法,其特征在于,包括:/n1)基于待检测的代码样本生成代码属性图,所述代码样本为一个函数;/n2)从代码属性图中提取出抽象语法树序列、控制流图序列和程序依赖图序列;/n3)将抽象语法树序列、控制流图序列和程序依赖图序列分别通过预先训练好的向量映射器转换为数值型向量,得到抽象语法树向量、控制流图向量和程序依赖图向量;/n4)将抽象语法树向量、控制流图向量和程序依赖图向量分别通过对应的预先训练好的特征提取器提取特征向量,然后将提取得到的三种特征向量合并成代码样本的特征向量;/n5)将代码样本的特征向利用预先训练好的脆弱性检测器得到代码样本为脆弱性代码的概率,若该概率超过预设阈值则判定该代码样本为脆弱性代码。/n
【技术特征摘要】
1.一种基于代码属性图的软件脆弱性智能检测方法,其特征在于,包括:
1)基于待检测的代码样本生成代码属性图,所述代码样本为一个函数;
2)从代码属性图中提取出抽象语法树序列、控制流图序列和程序依赖图序列;
3)将抽象语法树序列、控制流图序列和程序依赖图序列分别通过预先训练好的向量映射器转换为数值型向量,得到抽象语法树向量、控制流图向量和程序依赖图向量;
4)将抽象语法树向量、控制流图向量和程序依赖图向量分别通过对应的预先训练好的特征提取器提取特征向量,然后将提取得到的三种特征向量合并成代码样本的特征向量;
5)将代码样本的特征向利用预先训练好的脆弱性检测器得到代码样本为脆弱性代码的概率,若该概率超过预设阈值则判定该代码样本为脆弱性代码。
2.根据权利要求1所述的基于代码属性图的软件脆弱性智能检测方法,其特征在于,步骤1)之前还包括对待检测的代码样本进行预处理的步骤,所述预处理包括:针对所有的参数将名称按照出现的顺序替换为第一指定符号加顺序编号的形式,针对所有的变量将名称按照出现的顺序替换为第二指定符号加顺序编号的形式,针对所有的字符串常量,将名称替换为第三指定符号。
3.根据权利要求1所述的基于代码属性图的软件脆弱性智能检测方法,其特征在于,步骤3)中预先训练好的向量映射器由分词器Tokenizer和词向量转换模型Word2Vec构成,输入是文本型向量,输出为N1*N2维的数值型向量,用于将文本型向量转换成机器学习算法可识别的N1*N2维向量,其中N1为词向量转换模型Word2Vec训练得到的单个映射向量的长度,N2为单个代码样本的文本型向量的长度。
4.根据权利要求3所述的基于代码属性图的软件脆弱性智能检测方法,其特征在于,步骤3)之前包括训练向量映射器的步骤:
A1)从预设的脆弱性代码数据集中提取代码样本,生成代码属性图,并从代码属性图中提取出抽象语法树序列、控制流图序列和程序依赖图序列,生成的抽象语法树序列、控制流图序列和程序依赖图序列中的所有元素组成一个语料库;
A2)利用语料库对分词器Tokenizer进行训练得到词典D1,在词典D1中每个在语料库中出现过的词Token都有唯一对应的索引号;
A3)利用语料库对词向量转换模型Word2Vec进行训练,词向量转换模型Word2Vec根据每个词Token在语料库中出现的频次生成词Token的映射集V1,语料库中出现次数超过阈值的每个词Token在映射集V1中有唯一的长度为N1的向量表示;
步骤3)将抽象语法树序列、控制流图序列和程序依赖图序列分别通过预先训练好的向量映射器转换为数值型向量的步骤包括:
将抽象语法树序列先通过词典D1转化由序列中的每个Token对应的索引号构成的数值型向量V2,当V2长度大于N2时,在向量末端截断,当V2长度小于N2时,在向量末端补0,使所有的向量长度全部为N2;由于索引号是整数,存在大小关系,而抽象语法树序列本身的每个Token是没有大小关系的因此再通过映射集V1,将数值型向量V2中的每个Token用映射集中Token对应的长度为N1的向量替换,当映射集V1中不存在当前Token的映射时,用长度为N1的零向量替换,得到N1*N2维的数值型向量V3;
将控制流图序列先通过词典D1转化由序列中的每个Token对应的索引号构成的数值型向量V2,当V2长度大于N2时,在向量末端截断,当V2长度小于N2时,在向量末端补0,使所有的向量长度全部为N2;由于索引号是整数,存在大小关系,而控制流图序列本身的每个Token是没有大小关...
【专利技术属性】
技术研发人员:任怡,肖添明,谭郁松,李宝,杨立明,杨洒情,蹇松雷,董攀,阳国贵,张建锋,王静,黄辰林,王晓川,丁滟,谭霜,王庆坤,姜智文,
申请(专利权)人:中国人民解放军国防科技大学,
类型:发明
国别省市:湖南;43
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。