一种源代码缺陷检测方法与装置制造方法及图纸

技术编号:27877328 阅读:23 留言:0更新日期:2021-03-31 00:58
本申请提供的源代码缺陷检测方法与装置,针对待进行缺陷检测的软件源代码,基于其语法结构,提取软件源代码中的数据流关系和控制流关系,并根据数据流关系和控制流关系,对软件源代码进行切片处理,生成用于输入至人工智能模型进行缺陷检测的蕴含上下文语义的代码片段,无需编译即可完成源代码解析及代码片段生成过程,从而,从输入数据角度来看,本申请同时支持输入可编译和/或不可编译的软件源代码,扩展了软件源代码缺陷检测的范围;同时,本申请利用人工智能技术自动学习源代码解析生成的语法树、数据流、控制流等代码上下文蕴含的缺陷模式和正常模式,在不依赖检测规则、专家经验和编译环境前提下即可实现源代码缺陷检测。

【技术实现步骤摘要】
一种源代码缺陷检测方法与装置
本申请属于计算机
,尤其涉及一种源代码缺陷检测方法与装置。
技术介绍
信息技术处于高速发展阶段,软件增长速度越来越快,导致源代码规模呈爆炸式增长,其中蕴含的源代码缺陷同样会导致安全风险难以预测。如何准确地检测出源代码中可能含有的软件缺陷,如API(应用程序接口)或敏感函数误用、恶意代码、后门代码等,对于保障信息安全,防范恶意攻击具有重要意义。目前已有的源代码缺陷检测方法,对专家经验、检测规则、编译环境等依赖度较高,在检测性能、检测结果展示、使用便捷性上均有不足。其主要缺陷体现在:1)从输入数据上看:已有的源代码缺陷检测装置或工具一般需要输入可编译的软件源代码或已编译的可执行二进制文件,而不可编译的软件源代码(程序源代码)无法被检测,这类装置或工具限制了能够进行检测的软件源代码的范围;2)从缺陷检测方法或引擎上看:主要使用静态分析方法,例如数据流分析、污点分析等,对专家经验、检测规则、编译环境等依赖度较高;因此,如何至少部分地解决上述技术问题,克服能进行缺陷检测的软件源代码的范围限制,和/或改善源代码缺陷检测对检测规则、编译环境和专家经验依赖度较高的现状,成为本领域值得研究的课题。
技术实现思路
有鉴于此,本申请提供了一种源代码缺陷检测方法与装置,用于至少部分地解决上述技术问题,克服能进行缺陷检测的软件源代码的范围限制,和/或改善源代码缺陷检测对检测规则、编译环境和专家经验依赖度较高的现状。具体技术方案如下:一种源代码缺陷检测方法,包括:获取待进行缺陷检测的软件源代码;基于所述软件源代码的语法结构,提取所述软件源代码中的数据流关系和控制流关系;根据所述数据流关系和所述控制流关系,对所述软件源代码进行切片处理,得到所述软件源代码的代码片段;根据所述软件源代码的代码片段训练人工智能模型,得到用于源代码缺陷检测的人工智能模型;利用构建的所述人工智能模型对所述软件源代码的代码片段进行缺陷检测处理,得到所述软件源代码的代码片段的缺陷检测结果。可选的,所述基于所述软件源代码的语法结构,提取所述软件源代码中的数据流关系和控制流关系,包括:解析并提取所述软件源代码中含有的语义信息和/或语法信息,并生成包含所述语义信息和/或语法信息的抽象语法树;根据所述抽象语法树,提取所述软件源代码中各个函数内的控制流关系,并生成分别对应于各个函数内的控制流关系的各个控制流图;将各个控制流图进行整合,生成具有函数间控制流关系的控制流图;根据所述抽象语法树,提取所述软件源代码中的数据流关系,并生成相对应的数据流图;将所述控制流图和所述数据流图进行整合,生成包含有控制流关系和数据流关系的控制流-数据流图。可选的,所述根据所述数据流关系和所述控制流关系,对所述软件源代码进行切片处理,得到所述软件源代码的代码片段,包括:对所述控制流-数据流图进行子图提取,得到至少一个子图;根据所述至少一个子图,提取代码语句,生成对应于至少一个子图的含有控制流关系和/或数据流关系的至少一个代码片段。可选的,所述利用预先构建的人工智能模型对所述软件源代码的代码片段进行缺陷检测处理,得到所述软件源代码的代码片段的缺陷检测结果,包括:将代码片段的向量化表示输入预先构建的人工智能模型,由所述人工智能模型对代码片段进行缺陷分析与缺陷类别判定,得到包含所述代码片段的缺陷类别的缺陷检测结果。可选的,在利用预先构建的人工智能模型对所述软件源代码的代码片段进行缺陷检测处理之前,上述方法还包括:对所述软件源代码的代码片段进行规范化处理;其中,对代码片段的规范化处理包括:提取代码片段的预定补充信息,和/或,剔除重复的代码片段。可选的,在得到所述软件源代码的代码片段的缺陷检测结果之后,上述方法还包括:输出所述缺陷检测结果,并于可视化界面对所述检测结果进行支持交互式的信息展示。一种源代码缺陷检测装置,包括:获取单元,用于获取待进行缺陷检测的软件源代码;提取单元,用于基于所述软件源代码的语法结构,提取所述软件源代码中的数据流关系和控制流关系;切片单元,用于根据所述数据流关系和所述控制流关系,对所述软件源代码进行切片处理,得到所述软件源代码的代码片段;人工智能模型训练单元,用于根据所述软件源代码的代码片段训练人工智能模型,得到用于源代码缺陷检测的人工智能模型;检测单元,用于利用构建的所述人工智能模型对所述软件源代码的代码片段进行缺陷检测处理,得到所述软件源代码的代码片段的缺陷检测结果。可选的,所述提取单元,具体用于:解析并提取所述软件源代码中含有的语义信息和/或语法信息,并生成包含所述语义信息和/或语法信息的抽象语法树;根据所述抽象语法树,提取所述软件源代码中各个函数内的控制流关系,并生成分别对应于各个函数内的控制流关系的各个控制流图;将各个控制流图进行整合,生成具有函数间控制流关系的控制流图;根据所述抽象语法树,提取所述软件源代码中的数据流关系,并生成相对应的数据流图;将所述控制流图和所述数据流图进行整合,生成包含有控制流关系和数据流关系的控制流-数据流图。可选的,所述切片单元,具体用于:对所述控制流-数据流图进行子图提取,得到至少一个子图;根据至少一个子图,提取代码语句,生成对应于至少一个子图的含有控制流关系和/或数据流关系的至少一个代码片段。可选的,所述检测单元,具体用于:对所述代码片段进行编码,生成所述代码片段的向量化表示;将代码片段的向量化表示输入预先构建的人工智能模型,由所述人工智能模型对代码片段进行缺陷分析与缺陷类别判定,得到包含所述代码片段的缺陷类别的缺陷检测结果。可选的,上述装置,还包括:规范化处理单元,用于在利用预先构建的人工智能模型对所述软件源代码的代码片段进行缺陷检测处理之前,对所述软件源代码的代码片段进行规范化处理;其中,对代码片段的规范化处理包括:提取代码片段的预定补充信息,和/或,剔除重复的代码片段。可选的,上述装置,还包括:结果输出控制单元,用于输出所述缺陷检测结果,以于可视化界面对所述检测结果进行支持交互式的信息展示。与现有技术相比,本申请提供的上述技术方案具有如下优点:从上述技术方案可知,本申请提供的源代码缺陷检测方法与装置,针对待进行缺陷检测的软件源代码,基于其语法结构,提取软件源代码中的数据流关系和控制流关系,并根据数据流关系和控制流关系,对软件源代码进行切片处理,生成用于输入至人工智能模型进行缺陷检测的蕴含上下文语义的代码片段,无需编译即可完成源代码解析及代码片段生成过程,从而,从输入数据角度来看,本申请同时支持输入可编译和/或不可编译的软件源代码,扩展了软件源代码缺陷检测的范围;同时,本申请利用人工智能技术自动学习源代码解析生成的语法树、数本文档来自技高网...

【技术保护点】
1.一种源代码缺陷检测方法,其特征在于,包括:/n获取待进行缺陷检测的软件源代码;/n基于所述软件源代码的语法结构,提取所述软件源代码中的数据流关系和控制流关系;/n根据所述数据流关系和所述控制流关系,对所述软件源代码进行切片处理,得到所述软件源代码的代码片段;/n利用预先构建的人工智能模型对所述软件源代码的代码片段进行缺陷检测处理,得到所述软件源代码的代码片段的缺陷检测结果。/n

【技术特征摘要】
1.一种源代码缺陷检测方法,其特征在于,包括:
获取待进行缺陷检测的软件源代码;
基于所述软件源代码的语法结构,提取所述软件源代码中的数据流关系和控制流关系;
根据所述数据流关系和所述控制流关系,对所述软件源代码进行切片处理,得到所述软件源代码的代码片段;
利用预先构建的人工智能模型对所述软件源代码的代码片段进行缺陷检测处理,得到所述软件源代码的代码片段的缺陷检测结果。


2.根据权利要求1所述的方法,其特征在于,所述基于所述软件源代码的语法结构,提取所述软件源代码中的数据流关系和控制流关系,包括:
解析并提取所述软件源代码中含有的语义信息和/或语法信息,并生成包含所述语义信息和/或语法信息的抽象语法树;
根据所述抽象语法树,提取所述软件源代码中各个函数内的控制流关系,并生成分别对应于各个函数内的控制流关系的各个控制流图;
将各个控制流图进行整合,生成具有函数间控制流关系的控制流图;
根据所述抽象语法树,提取所述软件源代码中的数据流关系,并生成相对应的数据流图;
将所述控制流图和所述数据流图进行整合,生成包含有控制流关系和数据流关系的控制流-数据流图。


3.根据权利要求2所述的方法,其特征在于,所述根据所述数据流关系和所述控制流关系,对所述软件源代码进行切片处理,得到所述软件源代码的代码片段,包括:
对所述控制流-数据流图进行子图提取,得到至少一个子图;
根据所述至少一个子图,提取代码语句,生成对应于至少一个子图的含有控制流关系和/或数据流关系的至少一个代码片段。


4.根据权利要求3所述的方法,其特征在于,所述利用预先构建的人工智能模型对所述软件源代码的代码片段进行缺陷检测处理,得到所述软件源代码的代码片段的缺陷检测结果,包括:
对所述代码片段进行编码,生成所述代码片段的向量化表示;
将代码片段的向量化表示输入预先构建的人工智能模型,由所述人工智能模型对代码片段进行缺陷分析与缺陷类别判定,得到包含所述代码片段的缺陷类别的缺陷检测结果。


5.根据权利要求1所述的方法,其特征在于,在利用预先构建的人工智能模型对所述软件源代码的代码片段进行缺陷检测处理之前,还包括:
对所述软件源代码的代码片段进行规范化处理;
其中,对代码片段的规范化处理包括:提取代码片段的预定补充信息,和/或,剔除重复的代码片段。


6.根据权利要求1所述的方法,其特征在于,在得到所述软件源代码的代码片段的缺陷检测结果之后,还包括...

【专利技术属性】
技术研发人员:王晓萌管志斌辛伟王嘉捷崔静景湘评
申请(专利权)人:中国信息安全测评中心
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1