一种源代码漏洞检测方法及系统与流程

文档序号:37159668发布日期:2024-02-26 17:27阅读:22来源:国知局
一种源代码漏洞检测方法及系统与流程

本发明提出了一种源代码漏洞检测方法及系统,属于代码漏洞检测。


背景技术:

1、源代码漏洞检测是一种软件安全实践,旨在识别和纠正应用程序或系统源代码中的潜在漏洞和安全问题。这些漏洞可能导致应用程序易受到恶意攻击,例如远程执行代码、拒绝服务攻击、数据泄漏等。源代码漏洞检测的目标是尽早发现和修复这些漏洞,以提高应用程序的安全性。然而,现有技术中存在漏洞检测不全面以及检测效率较低的问题。


技术实现思路

1、本发明提供了一种源代码漏洞检测方法及系统,用以解决现有技术中存在漏洞检测不全面以及检测效率较低的问题,所采取的技术方案如下:

2、一种源代码漏洞检测方法,所述源代码漏洞检测方法包括:

3、提取待漏洞检测的源代码,并对源代码进行拆分,获得多个代码块;

4、对所述待检测漏的源代码拆分形成的多个代码块进行静态代码分析,获得静态代码分析结果;

5、对所述待检测漏的源代码拆分形成的多个代码块进行动态代码分析,获得动态代码分析结果。

6、进一步地,提取待漏洞检测的源代码,并对源代码进行拆分,获得多个代码块,包括:

7、针对待漏洞检测项目的源代码进行下载,获得待漏洞检测的源代码;

8、对所述待漏洞检测的源代码进行扫描,获得所述源代码的基本信息;其中,所述基本信息包括代码结构、代码逻辑、代码功能、依赖关系和代码所形成的代码模块之间的关联关系;其中,所述代码模块对应一个代码功能;

9、根据源代码中的代码的代码逻辑和代码功能,识别可以拆分为独立模块的代码部分,作为可拆分代码部分;

10、针对每个可拆分代码部分定义接口参数和接口规范;其中,所述接口参数包括输入参数、输出参数、函数签名、方法调用等;

11、利用接口将对每个可拆分代码部分从所述源代码中进行提取,形成多个代码块;

12、提取所述代码块之间的依赖关系,按照所述依赖关系在所述代码块之间建立关联关系;

13、当每个代码块出现代码更新时,通过所述关联关系使与出现代码更新的代码块具有关联关系的代码块同步更新,以确保漏洞检测的是更新后的代码块。

14、进一步地,对所述待检测漏的源代码拆分形成的多个代码块进行静态代码分析,获得静态代码分析结果,包括:

15、调取代码逻辑起始点对应的代码块,并提取各个代码块之间的关联关系;

16、利用静态代码分析工具按照关联关系依次对每个代码块按照预设的静态代码分析项进行静态代码分析,获得静态分析结果,其中,所述静态代码分析项包括代码复杂度、安全漏洞、代码规范、重复代码和内存泄漏;

17、将所述静态分析结果生成静态代码分析报告。

18、进一步地,按照关联关系依次对每个代码块按照预设的静态代码分析项进行静态代码分析,获得分析结果,包括:

19、检测每个代码块的代码复杂度,当所述代码复杂度高于预设的代码复杂度阈值时,则代码块被认定为存在漏洞风险;

20、检测每个代码块是否存在已知的安全漏洞,当所述代码块中存在已知的安全漏洞时,则代码块被认定为存在漏洞风险,其中,所述已知的安全漏洞包括但不限制于缓冲区溢出和跨站脚本;

21、检测每个代码块的代码规范,判断所述代码块中是否存在不遵循编程规范的代码,当所述代码块中存在不遵循编程规范的代码量超过预设的代码量阈值时,则代码块被认定为存在漏洞风险;

22、检测每个代码块的是否存在重复代码,当存在重复代码的重复代码量超过预设的代码量阈值时,则代码块被认定为存在漏洞风险;

23、检测每个代码块是否存在内存泄漏,当所述代码块存在内存泄漏时,则代码块被认定为存在漏洞风险。其具体步骤包括,

24、步骤a1:利用公式(1)根据每个代码块的代码状态判断每个代码块是否为重复代码块

25、

26、其中e(a)表示第a个代码块是否为重复代码块的判定值;(d_a)16表示第a个代码块转换为16进制形式后的数据;(d_i)16表示第i个代码块转换为16进制形式后的数据;i表示第一整数变量;n表示所有代码块的总个数;

27、若e(a)=0,则所述第a个代码块即为重复的代码块;

28、若e(a)≠0,则所述第a个代码块即为非重复的代码块;

29、将重复的代码块直接认定为存在漏洞风险,并进行记录,同时将非重复的代码块继续进行后续的步骤;

30、步骤a2:利用公式(2)根据每个非重复的代码块中每一行的代码状态得到每个非重复的代码块的重复代码量

31、

32、其中q(b)表示第b个非重复的代码块的重复代码量;d_b(k)表示第b个非重复的代码块的第k行代码转换为16进制形式后的数据;d_b(k-r)表示第b个非重复的代码块的第k-r行代码转换为16进制形式后的数据;r表示第二整数变量;f{}表示判断0函数,若括号内的数值为0则函数值为1,若括号内的数值不为0则函数值为0;s[d_b(k)]表示第b个非重复的代码块的第k行代码的代码量;m(b)表示第b个非重复的代码块的代码总行数;

33、步骤a3:利用公式(3)根据每个非重复的代码块的重复代码量控制每个非重复的代码块的认定状态

34、

35、其中e′(b)表示第b个非重复的代码块的认定状态控制值;λ表示预设的代码量比例阈值;

36、若e′(b)=1,则所述第b个非重复的代码块即为重复的代码块;

37、若e′(b)=0,则所述第b个非重复的代码块即为非重复的代码块。

38、进一步地,对所述待检测漏的源代码拆分形成的多个代码块进行动态代码分析,获得动态代码分析结果,包括:

39、调取代码逻辑起始点对应的代码块,并提取各个代码块之间的关联关系,获取进行动态代码分析的代码块执行循序;

40、调取动态代码分析工具;

41、按照代码块执行循序利用动态代码分析工具按照关联关系依次对每个代码块按照预设的动态代码分析项进行动态代码分析,获得动态分析结果,其中,所述动态代码分析项包括执行路径分析、性能分析、内存使用分析、资源泄露率分析和api调用正常性分析;

42、将所述动态分析结果生成静态代码分析报告;

43、其中,所述按照代码块执行循序利用动态代码分析工具按照关联关系依次对每个代码块按照预设的动态代码分析项进行动态代码分析,获得动态分析结果,包括:。

44、检测每个代码块的代码复杂度执行路径,当代码块中存在未被覆盖的执行路径的数量超过预设的未被覆盖执行路径数量阈值时,则代码块被认定为存在漏洞风险;

45、检测每个代码块的性能分析,当所述代码块的程序响应时间长度超过预设的时间长度阈值时,则代码块被认定为存在漏洞风险;

46、检测每个代码块的内存使用情况,当所述代码块的内存使用持续增加,则代码块被认定为存在漏洞风险;

47、检测每个代码块的资源泄露率,当所述代码块的资源泄露率超过预设的泄露率阈值时,则代码块被认定为存在漏洞风险;

48、检测每个代码块的api调用情况,当所述代码块的api调用未能正确处理返回值和异常情况的次数超过预设的次数阈值时,则代码块被认定为存在漏洞风险。

49、一种源代码漏洞检测系统,所述源代码漏洞检测系统包括:

50、源代码提取模块,用于提取待漏洞检测的源代码,并对源代码进行拆分,获得多个代码块;

51、静态代码分析模块,用于对所述待检测漏的源代码拆分形成的多个代码块进行静态代码分析,获得静态代码分析结果;

52、动态代码分析模块,用于对所述待检测漏的源代码拆分形成的多个代码块进行动态代码分析,获得动态代码分析结果。

53、进一步地,所述源代码提取模块包括:

54、源代码下载模块,用于针对待漏洞检测项目的源代码进行下载,获得待漏洞检测的源代码;

55、基本信息获取模块,用于对所述待漏洞检测的源代码进行扫描,获得所述源代码的基本信息;其中,所述基本信息包括代码结构、代码逻辑、代码功能、依赖关系和代码所形成的代码模块之间的关联关系;其中,所述代码模块对应一个代码功能;

56、代码识别模块,用于根据源代码中的代码的代码逻辑和代码功能,识别可以拆分为独立模块的代码部分,作为可拆分代码部分;

57、接口定义模块,用于针对每个可拆分代码部分定义接口参数和接口规范;其中,所述接口参数包括输入参数、输出参数、函数签名、方法调用等;

58、拆分执行模块,用于利用接口将对每个可拆分代码部分从所述源代码中进行提取,形成多个代码块;

59、关联关系建立模块,用于提取所述代码块之间的依赖关系,按照所述依赖关系在所述代码块之间建立关联关系;

60、同步更新模块,用于当每个代码块出现代码更新时,通过所述关联关系使与出现代码更新的代码块具有关联关系的代码块同步更新,以确保漏洞检测的是更新后的代码块。

61、进一步地,所述静态代码分析模块包括:

62、第一代码块调取模块,用于调取代码逻辑起始点对应的代码块,并提取各个代码块之间的关联关系;

63、静态分析结果获取模块,用于利用静态代码分析工具按照关联关系依次对每个代码块按照预设的静态代码分析项进行静态代码分析,获得静态分析结果,其中,所述静态代码分析项包括代码复杂度、安全漏洞、代码规范、重复代码和内存泄漏;

64、第一报告生成模块,用于将所述静态分析结果生成静态代码分析报告。

65、进一步地,所述静态分析结果获取模包括:

66、代码复杂度检测模块,用于检测每个代码块的代码复杂度,当所述代码复杂度高于预设的代码复杂度阈值时,则代码块被认定为存在漏洞风险;

67、安全漏洞检测模块,用于检测每个代码块是否存在已知的安全漏洞,当所述代码块中存在已知的安全漏洞时,则代码块被认定为存在漏洞风险,其中,所述已知的安全漏洞包括但不限制于缓冲区溢出和跨站脚本;

68、代码规范检测模块,用于检测每个代码块的代码规范,判断所述代码块中是否存在不遵循编程规范的代码,当所述代码块中存在不遵循编程规范的代码量超过预设的代码量阈值时,则代码块被认定为存在漏洞风险;

69、重复代码检测模块,用于检测每个代码块的是否存在重复代码,当存在重复代码的重复代码量超过预设的代码量阈值时,则代码块被认定为存在漏洞风险;

70、内存泄漏检测模块,用于检测每个代码块是否存在内存泄漏,当所述代码块存在内存泄漏时,则代码块被认定为存在漏洞风险。其具体步骤包括,

71、步骤a1:利用公式(1)根据每个代码块的代码状态判断每个代码块是否为重复代码块

72、

73、其中e(a)表示第a个代码块是否为重复代码块的判定值;(d_a)16表示第a个代码块转换为16进制形式后的数据;(d_i)16表示第i个代码块转换为16进制形式后的数据;i表示第一整数变量;n表示所有代码块的总个数;

74、若e(a)=0,则所述第a个代码块即为重复的代码块;

75、若e(a)≠0,则所述第a个代码块即为非重复的代码块;

76、将重复的代码块直接认定为存在漏洞风险,并进行记录,同时将非重复的代码块继续进行后续的步骤;

77、步骤a2:利用公式(2)根据每个非重复的代码块中每一行的代码状态得到每个非重复的代码块的重复代码量

78、

79、其中q(b)表示第b个非重复的代码块的重复代码量;d_b(k)表示第b个非重复的代码块的第k行代码转换为16进制形式后的数据;d_b(k-r)表示第b个非重复的代码块的第k-r行代码转换为16进制形式后的数据;r表示第二整数变量;f{}表示判断0函数,若括号内的数值为0则函数值为1,若括号内的数值不为0则函数值为0;s[d_b(k)]表示第b个非重复的代码块的第k行代码的代码量;m(b)表示第b个非重复的代码块的代码总行数;

80、步骤a3:利用公式(3)根据每个非重复的代码块的重复代码量控制每个非重复的代码块的认定状态

81、

82、其中e′(b)表示第b个非重复的代码块的认定状态控制值;λ表示预设的代码量比例阈值;

83、若e′(b)=1,则所述第b个非重复的代码块即为重复的代码块;

84、若e′(b)=0,则所述第b个非重复的代码块即为非重复的代码块。

85、进一步地,所述动态代码分析模块包括:

86、第二代码块调取模块,用于调取代码逻辑起始点对应的代码块,并提取各个代码块之间的关联关系,获取进行动态代码分析的代码块执行循序;

87、工具调取模块,用于调取动态代码分析工具;

88、动态分析结果获取模块,用于按照代码块执行循序利用动态代码分析工具按照关联关系依次对每个代码块按照预设的动态代码分析项进行动态代码分析,获得动态分析结果,其中,所述动态代码分析项包括执行路径分析、性能分析、内存使用分析、资源泄露率分析和api调用正常性分析;

89、第二报告生成模块,用于将所述动态分析结果生成静态代码分析报告;

90、其中,所所述动态分析结果获取模块包括:。

91、执行路径检测模块,用于检测每个代码块的代码复杂度执行路径,当代码块中存在未被覆盖的执行路径的数量超过预设的未被覆盖执行路径数量阈值时,则代码块被认定为存在漏洞风险;

92、性能分析检测模块,用于检测每个代码块的性能分析,当所述代码块的程序响应时间长度超过预设的时间长度阈值时,则代码块被认定为存在漏洞风险;

93、内存使用检测模块,用于检测每个代码块的内存使用情况,当所述代码块的内存使用持续增加,则代码块被认定为存在漏洞风险;

94、资源泄露率检测模块,用于检测每个代码块的资源泄露率,当所述代码块的资源泄露率超过预设的泄露率阈值时,则代码块被认定为存在漏洞风险;

95、api调用正常性检测模块,用于检测每个代码块的api调用情况,当所述代码块的api调用未能正确处理返回值和异常情况的次数超过预设的次数阈值时,则代码块被认定为存在漏洞风险。

96、本发明有益效果:

97、本发明提出的一种源代码漏洞检测方法及系统能够避免代码检测过程中单次遍历所有源代码导致代码单次检测内容较多,易出现代码检测操作异常,导致代码检测准确性较低的问题。同时,分块进行代码漏洞检测,能够有效缩减单次检测内容量,最大限度降低单次检测代码量过大而导致的数据冗余和响应时间延长的问题,进而有效提高源代码检测的检测效率。

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