System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术提出了一种源代码漏洞检测方法及系统,属于代码漏洞检测。
技术介绍
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、检测每个代码块的内存使用情况,当所述代码块的内存使用持续增加,则代码块被认定本文档来自技高网...
【技术保护点】
1.一种源代码漏洞检测方法,其特征在于,所述源代码漏洞检测方法包括:
2.根据权利要求1所述源代码漏洞检测方法,其特征在于,提取待漏洞检测的源代码,并对源代码进行拆分,获得多个代码块,包括:
3.根据权利要求1所述源代码漏洞检测方法,其特征在于,对所述待检测漏的源代码拆分形成的多个代码块进行静态代码分析,获得静态代码分析结果,包括:
4.根据权利要求3所述源代码漏洞检测方法,其特征在于,按照关联关系依次对每个代码块按照预设的静态代码分析项进行静态代码分析,获得分析结果,包括:
5.根据权利要求1所述源代码漏洞检测方法,其特征在于,对所述待检测漏的源代码拆分形成的多个代码块进行动态代码分析,获得动态代码分析结果,包括:
6.一种源代码漏洞检测系统,其特征在于,所述源代码漏洞检测系统包括:
7.根据权利要求6所述源代码漏洞检测系统,其特征在于,所述源代码提取模块包括:
8.根据权利要求6所述源代码漏洞检测系统,其特征在于,所述静态代码分析模块包括:
9.根据权利要求8所述源代码漏洞检测系统
10.根据权利要求6所述源代码漏洞检测系统,其特征在于,所述动态代码分析模块包括:
...【技术特征摘要】
1.一种源代码漏洞检测方法,其特征在于,所述源代码漏洞检测方法包括:
2.根据权利要求1所述源代码漏洞检测方法,其特征在于,提取待漏洞检测的源代码,并对源代码进行拆分,获得多个代码块,包括:
3.根据权利要求1所述源代码漏洞检测方法,其特征在于,对所述待检测漏的源代码拆分形成的多个代码块进行静态代码分析,获得静态代码分析结果,包括:
4.根据权利要求3所述源代码漏洞检测方法,其特征在于,按照关联关系依次对每个代码块按照预设的静态代码分析项进行静态代码分析,获得分析结果,包括:
5.根据权利要求1所述源代码漏洞检测...
【专利技术属性】
技术研发人员:沈伍强,龙震岳,崔磊,周纯,钱正浩,李如雄,唐亮亮,梁哲恒,骆书剑,沈桂泉,张金波,张小陆,姚潮生,王业超,
申请(专利权)人:广东电网有限责任公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。