基于神经网络的代码分析方法及其装置、电子设备与流程

文档序号:35124688发布日期:2023-08-14 18:10阅读:24来源:国知局
基于神经网络的代码分析方法及其装置、电子设备与流程

本发明涉及信息安全,具体而言,涉及一种基于神经网络的代码分析方法及其装置、电子设备。


背景技术:

1、随着软件功能的日益强大,相应的程序代码越来越复杂,很难在设计开发中彻底消除程序代码中存在的所有漏洞或缺陷,若直接投产可能会对网络安全造成隐患,为避免软件安全漏洞问题,在投产前对软件的程序代码进行漏洞分析是十分重要的。

2、相关技术中,对软件的程序代码进行漏洞分析时还依赖于人工对程序的源代码进行分析,或者利用半自动化工具进行分析之后再由人工进行验收核对,由于目前程序的源代码中复杂的代码结构、繁多的封装函数和庞大的代码量,人工或自动化工具均难以捕捉代码元素与漏洞元素之间的关联关系,导致代码分析的误报率和漏报率高居不下,并且代码分析的效率比较低下。

3、针对上述的问题,目前尚未提出有效的解决方案。


技术实现思路

1、本发明实施例提供了一种基于神经网络的代码分析方法及其装置、电子设备,以至少解决相关技术中代码分析过程中,分析效率低下的技术问题。

2、根据本发明实施例的一个方面,提供了一种基于神经网络的代码分析方法,包括:接收目标程序的源代码,构建与所述目标程序的源代码对应的代码属性图;基于预设切片原则对所述代码属性图进行切片,输出与可疑漏洞相关的代码属性子图,其中,所述可疑漏洞为所述源代码中疑似引起网络安全漏洞的代码段,所述预设切片原则至少包括:预设词法原则、预设路径原则;基于所述代码属性子图在所述源代码中提取特征张量,并对所述特征张量进行编码,得到代码张量编码,其中,所述特征张量指所述源代码中能对所述代码属性子图中的节点属性和关联关系进行描述的代码字段,所述代码张量编码用于表征所述代码属性子图中所有节点的节点属性和关联关系;将所述代码张量编码输入至预设神经网络模型,输出所述目标程序的源代码中所述可疑漏洞的漏洞位置和漏洞类型。

3、可选地,基于预设切片原则对所述代码属性图进行切片,输出与可疑漏洞相关的代码属性子图的步骤,包括:基于所述预设词法原则,查找所述源代码中的可疑漏洞语句,将所述可疑漏洞语句在所述代码属性图中对应的节点标记为第一类可疑节点,基于所述第一类可疑节点以及各节点之间的第一依赖关系生成初始切片模板;基于所述预设路径原则,在所述代码属性图中标记第二类可疑节点,将所述第二类可疑节点以及各节点之间的第二依赖关系添加至所述初始切片模板,生成扩展切片模板;基于所述扩展切片模板对所述代码属性图进行切片,得到所述代码属性子图。

4、可选地,基于所述预设路径原则,在所述代码属性图中标记第二类可疑节点的步骤,包括:以所述第一类可疑节点为基点,获取所述代码属性图中每个其它节点到所述第一类可疑节点之间经过节点最少的最短路径,并统计所述最短路径所经过的总节点数,其中,所述其它节点是指除所述第一类可疑节点之外的节点;比较所述总节点数与预设数量阈值,得到比较结果;在所述比较结果指示所述总节点数小于等于所述预设数量阈值的情况下,将所述总节点数对应的其它节点标记为所述第二类可疑节点。

5、可选地,在构建与所述目标程序的源代码对应的代码属性图之前,还包括:提取所述源代码中各代码结构中的变量名;获取变量名重写策略;基于所述变量名重写策略,采用预设编译器解析器重写所述源代码中的变量名。

6、可选地,在输出所述目标程序中的可疑漏洞的漏洞位置和漏洞类型之后,还包括:基于所述漏洞位置生成待测试代码镜像,基于所述漏洞类型生成测试用例集,其中,所述测试用例集中包含n个测试用例,n为大于等于1的整数;基于所述漏洞位置,将所述测试用例注入所述待测试代码镜像,运行所述待测试代码镜像;监测运行过程中所述测试用例是否覆盖漏洞路径以及所述待测试代码镜像是否正常运行,基于监测结果输出漏洞检测报告。

7、可选地,所述预设神经网络模型包括:输入层,接收所述代码张量编码;嵌入层,通过线性变换对所述代码张量编码进行降维处理;双向lstm层,对降维后的所述代码张量编码进行双向分析,得到分析结果;注意力层,基于所述分析结果,计算所有降维后的所述代码张量编码的注意力权重,并将所述注意力权重标记到对应的所述代码张量编码上,输出标记后的所述代码张量编码;分类输出层,对标记后的所述代码张量编码进行特征分类,并输出分类结果,其中,所述分类结果指示所述目标程序中的可疑漏洞的漏洞位置和漏洞类型。

8、可选地,所述预设神经网络模型是通过以下方法得到的:获取m份历史代码程序的源代码以及漏洞检测数据集中预先记录的每份所述历史代码程序的历史代码漏洞,并确定每份所述历史代码漏洞的漏洞类型以及漏洞所在位置的标签,得到所述历史代码漏洞的漏洞信息,其中,m为大于等于1的整数;重写所述历史代码程序的源代码中的变量名,并构建所述历史代码程序的源代码对应的历史代码属性图;基于所述预设切片原则对所述历史代码属性图进行切片,输出历史代码属性子图,并基于所述历史代码属性子图在所述历史代码程序的源代码中提取历史特征张量,对所述历史特征张量进行编码,得到历史代码张量编码;将所述历史代码张量编码输入至初始神经网络模型进行分析,得到历史代码程序分析结果,其中,所述历史代码程序分析结果至少包括:历史代码漏洞的漏洞类型、历史代码漏洞的漏洞位置标签;比较所述历史代码程序分析结果与所述历史代码漏洞的的漏洞信息之间的相似度,在所述相似度小于预设相似度阈值的情况下,更新所述初始神经网络模型各网络层的参数;对所述初始神经网络模型进行迭代训练,直至所述相似度大于等于所述预设相似度阈值,得到所述预设神经网络模型。

9、可选地,所述漏洞检测数据集是通过以下方法得到的:获取第一类安全漏洞网站的漏洞信息以及第二类安全漏洞网站的漏洞信息,其中,所述漏洞信息包括下述至少之一:漏洞种类、攻击向量、涉及产品组件以及版本、代码是否开源;将所述第一类安全漏洞网站的漏洞信息以及所述第二类安全漏洞网站的漏洞信息汇总至预设漏洞信息数据库;提取所述预设漏洞信息数据库中涉及开源代码的漏洞的版本更新信息、漏洞补丁、漏洞位置以及位置标签;将所述开源代码的漏洞的版本更新信息、漏洞补丁、漏洞位置以及位置标签汇总至漏洞代码数据库中,形成所述漏洞检测数据集。

10、可选地,基于所述漏洞位置生成待测试代码镜像的步骤,包括:基于所述漏洞位置确定所述可疑漏洞的触发调用路径;在所述可疑漏洞的触发调用路径上进行插桩处理,并对插桩后的源代码进行编译链接,生成所述待测试代码镜像。

11、可选地,基于所述漏洞类型生成测试用例集的步骤,包括:调用预设测试用例库,其中,所述预设测试用例库预先存储不同漏洞类型的代码漏洞与对应的测试用例之间的映射关系;基于所述预设测试用例库,确定与每个所述漏洞类型对应的测试用例,采用预设遗传算法对所述测试用例进行随机变异,生成所述目标程序的源代码的所述测试用例集,并记录每个测试用例覆盖的漏洞路径。

12、根据本发明实施例的另一方面,还提供了一种基于神经网络的代码分析装置,包括:接收单元,用于接收目标程序的源代码,构建与所述目标程序的源代码对应的代码属性图;切片单元,用于基于预设切片原则对所述代码属性图进行切片,输出与可疑漏洞相关的代码属性子图,其中,所述可疑漏洞为所述源代码中疑似引起网络安全漏洞的代码段,所述预设切片原则至少包括:预设词法原则、预设路径原则;编码单元,用于基于所述代码属性子图在所述源代码中提取特征张量,并对所述特征张量进行编码,得到代码张量编码,其中,所述特征张量指所述源代码中能对所述代码属性子图中的节点属性和关联关系进行描述的代码字段,所述代码张量编码用于表征所述代码属性子图中所有节点的节点属性和关联关系;输出单元,用于将所述代码张量编码输入至预设神经网络模型,输出所述目标程序的源代码中所述可疑漏洞的漏洞位置和漏洞类型。

13、可选地,所述切片单元包括:第一生成模块,用于基于所述预设词法原则,查找所述源代码中的可疑漏洞语句,将所述可疑漏洞语句在所述代码属性图中对应的节点标记为第一类可疑节点,基于所述第一类可疑节点以及各节点之间的第一依赖关系生成初始切片模板;第二生成模块,用于基于所述预设路径原则,在所述代码属性图中标记第二类可疑节点,将所述第二类可疑节点以及各节点之间的第二依赖关系添加至所述初始切片模板,生成扩展切片模板;切片模块,用于基于所述扩展切片模板对所述代码属性图进行切片,得到所述代码属性子图。

14、可选地,所述第二生成模块包括:统计子模块,用于以所述第一类可疑节点为基点,获取所述代码属性图中每个其它节点到所述第一类可疑节点之间经过节点最少的最短路径,并统计所述最短路径所经过的总节点数,其中,所述其它节点是指除所述第一类可疑节点之外的节点;比较子模块,用于比较所述总节点数与预设数量阈值,得到比较结果;标记子模块,用于在所述比较结果指示所述总节点数小于等于所述预设数量阈值的情况下,将所述总节点数对应的其它节点标记为所述第二类可疑节点。

15、可选地,所述基于神经网络的代码分析装置还包括:第一提取模块,用于提取所述源代码中各代码结构中的变量名;第一获取模块,用于获取变量名重写策略;第一重写模块,用于基于所述变量名重写策略,采用预设编译器解析器重写所述源代码中的变量名。

16、可选地,所述基于神经网络的代码分析装置还包括:第三生成模块,用于基于所述漏洞位置生成待测试代码镜像,基于所述漏洞类型生成测试用例集,其中,所述测试用例集中包含n个测试用例,n为大于等于1的整数;注入模块,用于基于所述漏洞位置,将所述测试用例注入所述待测试代码镜像,运行所述待测试代码镜像;监测模块,用于监测运行过程中所述测试用例是否覆盖漏洞路径以及所述待测试代码镜像是否正常运行,基于监测结果输出漏洞检测报告。

17、可选地,所述预设神经网络模型包括:输入层,接收所述代码张量编码;嵌入层,通过线性变换对所述代码张量编码进行降维处理;双向lstm层,对降维后的所述代码张量编码进行双向分析,得到分析结果;注意力层,基于所述分析结果,计算所有降维后的所述代码张量编码的注意力权重,并将所述注意力权重标记到对应的所述代码张量编码上,输出标记后的所述代码张量编码;分类输出层,对标记后的所述代码张量编码进行特征分类,并输出分类结果,其中,所述分类结果指示所述目标程序中的可疑漏洞的漏洞位置和漏洞类型。

18、可选地,所述基于神经网络的代码分析装置还包括:第二获取模块,用于获取m份历史代码程序的源代码以及漏洞检测数据集中预先记录的每份所述历史代码程序的历史代码漏洞,并确定每份所述历史代码漏洞的漏洞类型以及漏洞所在位置的标签,得到所述历史代码漏洞的漏洞信息,其中,m为大于等于1的整数;第二重写模块,用于重写所述历史代码程序的源代码中的变量名,并构建所述历史代码程序的源代码对应的历史代码属性图;编码模块,用于基于所述预设切片原则对所述历史代码属性图进行切片,输出历史代码属性子图,并基于所述历史代码属性子图在所述历史代码程序的源代码中提取历史特征张量,对所述历史特征张量进行编码,得到历史代码张量编码;分析模块,用于将所述历史代码张量编码输入至初始神经网络模型进行分析,得到历史代码程序分析结果,其中,所述历史代码程序分析结果至少包括:历史代码漏洞的漏洞类型、历史代码漏洞的漏洞位置标签;比较模块,用于比较所述历史代码程序分析结果与所述历史代码漏洞的的漏洞信息之间的相似度,在所述相似度小于预设相似度阈值的情况下,更新所述初始神经网络模型各网络层的参数;迭代模块,用于对所述初始神经网络模型进行迭代训练,直至所述相似度大于等于所述预设相似度阈值,得到所述预设神经网络模型。

19、可选地,所述基于神经网络的代码分析装置还包括:第三获取模块,用于获取第一类安全漏洞网站的漏洞信息以及第二类安全漏洞网站的漏洞信息,其中,所述漏洞信息包括下述至少之一:漏洞种类、攻击向量、涉及产品组件以及版本、代码是否开源;第一汇总模块,用于将所述第一类安全漏洞网站的漏洞信息以及所述第二类安全漏洞网站的漏洞信息汇总至预设漏洞信息数据库;第二提取模块,用于提取所述预设漏洞信息数据库中涉及开源代码的漏洞的版本更新信息、漏洞补丁、漏洞位置以及位置标签;第二汇总模块,用于将所述开源代码的漏洞的版本更新信息、漏洞补丁、漏洞位置以及位置标签汇总至漏洞代码数据库中,形成所述漏洞检测数据集。

20、可选地,所述第三生成模块包括:确定子模块,用于基于所述漏洞位置确定所述可疑漏洞的触发调用路径;生成子模块,用于在所述可疑漏洞的触发调用路径上进行插桩处理,并对插桩后的源代码进行编译链接,生成所述待测试代码镜像。

21、可选地,所述第三生成模块还包括:调用子模块,用于调用预设测试用例库,其中,所述预设测试用例库预先存储不同漏洞类型的代码漏洞与对应的测试用例之间的映射关系;记录子模块,用于基于所述预设测试用例库,确定与每个所述漏洞类型对应的测试用例,采用预设遗传算法对所述测试用例进行随机变异,生成所述目标程序的源代码的所述测试用例集,并记录每个测试用例覆盖的漏洞路径。

22、根据本发明实施例的另一方面,还提供了一种计算机可读存储介质,所述计算机可读存储介质包括存储的计算机程序,其中,在所述计算机程序运行时控制所述计算机可读存储介质所在设备执行上述任意一项所述的基于神经网络的代码分析方法。

23、根据本发明实施例的另一方面,还提供了一种电子设备,包括一个或多个处理器和存储器,所述存储器用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现上述任意一项所述的基于神经网络的代码分析方法。

24、本公开中,提出一种基于神经网络的代码分析方法,先接收目标程序的源代码并构建对应的代码属性图,再基于预设切片原则对代码属性图进行切片,输出与可疑漏洞相关的代码属性子图,然后基于代码属性子图在源代码中提取特征张量,对特征张量进行编码,得到代码张量编码,其中,特征张量指源代码中能对代码属性子图中的节点属性和关联关系进行描述的代码字段,最后将代码张量编码输入至预设神经网络模型,输出目标程序的源代码中可疑漏洞的漏洞位置和漏洞类型。

25、本公开中,通过构建代码属性图来准确表示复杂代码的结构以及各个代码元素的属性信息与关联关系,再基于预设切片原则去除代码属性图中与源代码中的可疑漏洞完全无关的代码元素对应的冗余节点,得到代码属性子图,进而精准定位并提取源代码中与代码属性子图对应的代码字段作为特征张量,编码后输入预设神经网络可以有效减少神经网络的计算量,输出源代码中可疑漏洞的漏洞位置和漏洞类型,能够有效提升代码漏洞分析的效率,进而解决了相关技术中代码分析过程中,分析效率低下的技术问题。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1