一种基于源代码结构的漏洞检测方法及其检测系统与流程

专利查询1月前  22


本发明属于代码漏洞检测,具体涉及一种基于源代码结构的漏洞检测方法及其检测系统。


背景技术:

1、随着软件系统的复杂性日益增加,代码安全性问题也变得愈发重要。传统的漏洞检测方法主要分为静态代码分析和动态代码分析两大类。静态代码分析工具(如sonarqube、fortify)通过分析代码的源文件,检测出潜在的安全漏洞。这种方法能够在开发早期发现问题,减少漏洞在生产环境中被利用的风险。然而,由于静态分析缺乏对运行时环境的理解,它通常无法检测出依赖于实际执行路径的复杂漏洞。

2、动态代码分析工具(如 owaspzap、 burpsuite)则在代码运行时进行检测,通过模拟攻击者行为来识别潜在的安全问题。这类方法能够覆盖静态分析无法触及的运行时问题,但其局限性在于需要在模拟环境下运行应用程序,且容易受限于测试用例的覆盖率。

3、近年来,图论分析方法被引入代码漏洞检测领域,特别是函数调用图和控制流图的应用,使得开发者能够更加直观地理解代码结构并识别潜在的安全隐患。通过将代码的各个部分建模为节点,并将节点间的关系建模为边,图论方法能够有效地发现循环依赖、异常路径和未授权的数据流动路径等问题。

4、尽管现有的多层次图论分析方法在代码结构分析中取得了一定成果,但它们往往局限于单一模块或特定层次的分析,无法全面覆盖跨模块依赖和复杂数据流动的风险。


技术实现思路

1、发明目的:提供一种基于源代码结构的漏洞检测方法及其检测系统,解决了现有技术存在的上述问题。

2、技术方案:一种基于源代码结构的漏洞检测方法,包括以下步骤:

3、对源代码解析,生成抽象语法树;基于抽象语法树搭建多层次图;其中,多层次图至少包括函数调用图、控制流图和数据流图;

4、基于图论算法检测源代码中潜在漏洞生成潜在漏洞报告,识别源代码中的动态风险;对源代码进行预定操作识别源代码中复杂依赖关系和数据流动路径;其中,所述预定操作至少包括最大流最小割计算、连通分量分析、随机游走计算;

5、基于多层次图论分析法检测源代码结构中的漏洞生成代码结构漏洞报告,识别源代码中跨函数、跨模块或数据流动的固有缺陷;其中,多层次图论分析法至少包括跨函数、跨模块分析和风险评估;

6、结合自适应扫描策略对潜在漏洞报告和代码结构漏洞报告进行检测,并生成漏洞检测报告,依据漏洞检测报告来判断是否修复,给出修复建议:

7、若是,则根据漏洞类型和位置,提供详细的修复步骤和代码示例,辅助开发者进行漏洞修复;反之,则系统安全。

8、优选的,基于抽象语法树搭建多层次图包括以下步骤:

9、获取抽象语法树中的` main`、` getdata`、` processdata`和` printdata`作为函数节点,获取抽象语法树中的` main-> getdata`、` main-> processdata`和` main-> printdata`作为函数边搭建函数调用图;

10、获取抽象语法树中的基本块作为控制节点,获取抽象语法树中的代码块之间的控制流转移关系作为控制边搭建控制流图;

11、获取抽象语法树中的变量作为数据节点,获取抽象语法树中的变量之间的赋值关系作为数据边搭建数据流图。

12、优选的,所述最大流最小割计算步骤如下:

13、s1、设定源代码执行的起点为源点 s,设定源代码执行的终点为汇点 t;

14、s2、将源代码结构中各个函数、控制流或数据流作为网络中的源点 u和汇点 v,起点 u和终点 v之间的连接代表函数调用关系或控制流、数据流的路径;

15、s3、定义流量函数 f( u, v),表示源点 u和汇点 v的流量,通过流量函数 f( u, v)计算从源点s到汇点t的所有路径的流量值;

16、s4、使用最大流量算法,通过公式(1)计算出从源点 s到汇点 t的所有路径中承载的最大流量,其中,公式(1)如下:

17、                     (1);

18、式中: u源代码中的函数起点, v表示源代码中的函数终点, v表示节点的集合, s表示代码执行的起始点, t表示代码执行的终止点;

19、s5、在计算最大流量的过程中,使用最小割定理 max( flow)= min( cut)识别从源点 s到汇点 t的最小割容量;

20、通过最大流最小割定理 max( flow)= min( cut),即可获取割断源点到汇点的最小割的容量。

21、优选的,获取函数调用图,通过公式(1)计算得到函数内数据传输流量、函数请求响应流量和 cdn回源流量的总和 f,当 f满足 e r时,则通过公式(1)计算出从源点到达汇点的最大流量路径即为最大流的值,反之,则继续通过流量函数公式计算函数内数据传输流量、函数请求响应流量和 cdn回源流量的总和 f,直至 f满足 e r。

22、优选的,所述连通分量分析步骤如下:

23、获取控制流图,结合深度优先搜索方法识别控制流图中控制节点相互到达的子图,形成子图集合,其中,每个子图代表代码中的一个独立模块,识别独立模块并分析独立模块之间的依赖关系,其中,深度优先搜索公式如下:

24、 dfs( g,w) = visit all vertices reachable from w               (2);

25、式中: g表示要进行遍历的图结构, w表示起始顶点。

26、优选的,所述识别代码中独立模块的方法基于以下标准:

27、在控制流图中,控制节点互相可达的子图为一个独立模块或根据源代码的功能分组,将具有相似或相关功能的节点聚合成独立模块;其中,独立模块通过对其内部控制节点的分析确认模块的边界。

28、优选的,分析独立模块之间的依赖关系,通过分析独立模块之间的调用关系或数据共享完成独立模块之间的依赖关系分析;

29、其中,调用关系指跨模块调用,识别出模块之间的函数调用,即函数调用代表了独立模块间的直接依赖关系;

30、数据共享至至少两个独立模块共享相同数据或变量,即共享相同数据或变量代表了独立模块的共享依赖关系。

31、优选的,所述随机游走计算步骤如下:

32、获取多层次图中的节点,建立节点状态转移矩阵 p:

33、                     (3);

34、通过公式(2)计算节点 p ij边的概率,按照边的概率转移到下一个节点,直至达到终止条件后,分析数据流动路径,识别潜在的数据泄露和未授权访问路径;

35、其中, p ij边的概率计算公式如下:

36、                     (4);

37、式中: w ij表示从节点 i到节点 j的边的权重, k表示节点 i所有可能的出边集合, σ k表示对出边权重求和。

38、优选的,代码结构漏洞报告生成步骤如下:

39、获取多层次图,对多层次图中的函数调用图、控制流图和数据流图的结构进行综合分析;

40、其中,通过对函数调用图分析,区分程序执行的核心路径、边缘或罕执行路径对应的函数,优化程序性能,发现潜在漏洞,通过对控制流图分析,识别函数间的调用关系,揭示潜在的控制流依赖问题,通过对数据流图分析,识别变量在函数和模块之间的数据流动路径,获取存在数据泄露或不当使用的风险,生成代码结构漏洞报告;

41、结合潜在漏洞报告、代码结构漏洞报告和项目特征,构件风险评估模型,评估源代码中潜在的安全风险,确定扫描深度和范围,动态调整扫描深度和范围。

42、一种基于源代码结构的漏洞检测系统,包括以下步骤:用于实现上述所述的一种基于源代码结构的漏洞检测方法,所述系统包括:

43、第一模块,被设置对源代码解析,生成抽象语法树;基于抽象语法树搭建多层次图;其中,多层次图至少包括函数调用图、控制流图和数据流图;

44、第二模块,被设置基于图论算法检测源代码中潜在漏洞生成潜在漏洞报告;对源代码进行预定操作识别源代码中复杂依赖关系和数据流动路径;其中,所述预定操作至少包括最大流最小割计算、连通分量分析、随机游走计算;

45、第三模块,被设置基于多层次图论分析法检测源代码结构中的漏洞生成代码结构漏洞报告;其中,多层次图论分析法至少包括跨函数、跨模块分析和风险评估;

46、第四模块,被设置结合自适应扫描策略对潜在漏洞报告和代码结构漏洞报告进行检测,并生成漏洞检测报告,依据漏洞检测报告来判断是否修复,给出修复建议:

47、若是,则根据漏洞类型和位置,提供详细的修复步骤和代码示例,辅助开发者进行漏洞修复;反之,则系统安全。

48、有益效果:本发明涉及一种基于源代码结构的漏洞检测方法及其检测系统,对源代码解析,将不同层次的代码关系解析为函数调用图、控制流图和数据流图,使用最大流最小割、连通分量分析、随机游走等高级图论算法,对源代码中潜在漏洞进行综合分析,征程潜在漏洞报告,再利用多层次图论分析放检测源代码结构中的漏洞,生成代码结构漏洞报告,提升检测覆盖范围,结合自适应扫描策略,能够根据不同类型的源代码文件和已知的漏洞特征动态调整检测策略,提高检测效率。


技术特征:

1.一种基于源代码结构的漏洞检测方法,其特征在于,包括以下步骤:

2.根据权利要求1所述的一种基于源代码结构的漏洞检测方法,其特征在于,基于抽象语法树搭建多层次图包括以下步骤:

3.根据权利要求1所述的一种基于源代码结构的漏洞检测方法,其特征在于,所述最大流最小割计算步骤如下:

4.根据权利要求3所述的一种基于源代码结构的漏洞检测方法,其特征在于,获取函数调用图,通过公式(1)计算得到函数内数据传输流量、函数请求响应流量和cdn回源流量的总和f,当f满足er时,则通过公式(1)计算出从源点到达汇点的最大流量路径即为最大流的值,反之,则继续通过流量函数公式计算函数内数据传输流量、函数请求响应流量和cdn回源流量的总和f,直至f满足er。

5.根据权利要求1所述的一种基于源代码结构的漏洞检测方法,其特征在于,所述连通分量分析步骤如下:

6.根据权利要求5所述的一种基于源代码结构的漏洞检测方法,其特征在于,所述识别代码中独立模块的方法基于以下标准:

7.根据权利要求5所述的一种基于源代码结构的漏洞检测方法,其特征在于,分析独立模块之间的依赖关系,通过分析独立模块之间的调用关系或数据共享完成独立模块之间的依赖关系分析;

8.根据权利要求1所述的一种基于源代码结构的漏洞检测方法,其特征在于,所述随机游走计算步骤如下:

9.根据权利要求2所述的一种基于源代码结构的漏洞检测方法,其特征在于,代码结构漏洞报告生成步骤如下:

10.一种基于源代码结构的漏洞检测系统,其特征在于,用于实现上述权利要求1-9任意一项权利要求所述的一种基于源代码结构的漏洞检测方法,所述系统包括:


技术总结
本发明公开了一种基于源代码结构的漏洞检测方法及其检测系统,属于代码漏洞检测技术领域。包括以下步骤:对源代码解析,生成抽象语法树;基于抽象语法树搭建多层次图;基于图论算法检测源代码中潜在漏洞生成潜在漏洞报告;对源代码进行预定操作识别源代码中复杂依赖关系和数据流动路径;基于多层次图论分析法检测源代码结构中的漏洞生成代码结构漏洞报告;结合自适应扫描策略对潜在漏洞报告和代码结构漏洞报告进行检测,并生成漏洞检测报告,依据漏洞检测报告来判断是否修复,给出修复建议。本发明根据不同类型的源代码文件和已知的漏洞特征动态调整检测策略,提高检测效率。

技术研发人员:曹育生,刘阳,郑逸凡
受保护的技术使用者:上海齐同信息科技有限公司
技术研发日:
技术公布日:2024/12/5

最新回复(0)