一种SCA漏洞可达性分析方法、装置及电子设备与流程

文档序号:37190803发布日期:2024-03-01 13:00阅读:18来源:国知局
一种SCA漏洞可达性分析方法、装置及电子设备与流程

本技术涉及计算机网络,具体而言,涉及一种sca漏洞可达性分析方法、装置及电子设备。


背景技术:

1、随着网络技术的不断发展,各种应用程序的开发也越来越多,在应用程序的开发过程中,需要依赖很多组件,而这些组件中可能会存在漏洞组件,因此,需要对漏洞组件进行判断。

2、目前,对于组件的安全性进行检测,可采用软件成分分析(software compositionanalysis,sca)技术常被用于识别和清点软件中的开源组件依赖关系,进而识别出潜藏在依赖中的安全漏洞或者许可证等风险。然而,这一技术目前存在的一个缺陷在于,当识别出应用软件依赖的开源组件后,随之关联出的大量开源组件漏洞中,实际上多数是不可达(unreachable)的。原因主要有三点:第一是检测出的存在已知漏洞的依赖组件未必会在软件实际运行过程中被加载;第二,即使存在已知漏洞的依赖组件实际会被加载,但软件并不会执行到其中漏洞所在的代码位置,或者软件实际运行时并不会调用相应的漏洞函数;第三,即使软件能够执行到依赖组件中的漏洞所在的代码位置,或者依赖组件中的漏洞函数会被软件调用,而可触发漏洞的有害参数也未必能够传入漏洞所在的代码位置或者说漏洞函数。

3、对于上述的sca漏洞可达性分析,目前采用的可达性分析方法至少包括动态分析、静态分析和动态静态相结合的方式,而在对开源组件漏洞进行可达性分析时,如果采用动态分析(例如插桩)的方法对漏洞进行验证其是否可达,就存在测试覆盖率的问题;如果采用静态分析的方法,存在将一些实际不会执行的路径也考虑进去的问题。而一些复合型方法,如plate等人的系列研究将动态分析与静态分析的方法结合起来,也存在忽略数据流的问题。例如,危险数据未必能够沿可执行路径传播到漏洞位置,以及数据传播路径上可能发生数据转换、数据清理,这会导致可达性分析的结果包含较高的误报,从而高估了漏洞的可达性。如何能够快速准确地对漏洞组件的可达性进行分析,是目前急需解决的问题。


技术实现思路

1、本技术的一些实施例的目的在于提供一种sca漏洞可达性分析方法、装置及电子设备,通过本技术的实施例的技术方案,通过获取应用程序和与所述应用程序对应的依赖组件,并根据所述应用程序和所述依赖组件,构建与所述应用程序对应的依赖树;其中所述依赖组件中包括漏洞组件;根据所述依赖树,确定所述应用程序的第一调用图和所述依赖组件的第二调用图;根据所述第一调用图和所述第二调用图,确定所述漏洞组件中的漏洞函数调用链;根据与所述漏洞组件中漏洞函数调用链,确定所述漏洞函数调用链的控制流图;采用分段式路径搜索方式,根据所述漏洞函数调用链的控制流图,确定与所述漏洞函数调用链的控制流图对应的路径约束信息;根据与所述漏洞函数调用链的控制流图对应的路径约束信息,确定所述漏洞组件中的漏洞的可达性分析结果。本技术实施例通过对应用程序和依赖组件的代码进行多层类型分析,为代码构建调用图,进而根据调用图,生成与依赖树中的漏洞组件中的漏洞对应的函数调用链,并获取该漏洞函数调用链对应的控制流图,采用分段式路径搜索方式,确定与漏洞函数调用链的控制流图对应的路径约束信息,通过该路径约束信息对漏洞组件中的漏洞进行可达性分析,得到可达性分析结果,提高了sca漏洞可达性分析的检测效率和准确性。

2、第一方面,本技术的一些实施例提供了一种sca漏洞可达性分析方法,包括:

3、获取应用程序和与所述应用程序对应的依赖组件,并根据所述应用程序和所述依赖组件,构建与所述应用程序对应的依赖树;其中所述依赖组件中包括漏洞组件;

4、根据所述依赖树,确定所述应用程序的第一调用图和所述依赖组件的第二调用图;

5、根据所述第一调用图和所述第二调用图,确定所述漏洞组件中的漏洞函数调用链;

6、根据与所述漏洞组件中漏洞函数调用链,确定所述漏洞函数调用链的控制流图;

7、采用分段式路径搜索方式,根据所述漏洞函数调用链的控制流图,确定与所述漏洞函数调用链的控制流图对应的路径约束信息;

8、根据与所述漏洞函数调用链的控制流图对应的路径约束信息,确定所述漏洞组件中的漏洞的可达性分析结果。

9、本技术的一些实施例通过对应用程序和依赖组件的代码进行多层类型分析,为代码构建调用图,进而根据调用图,生成与依赖树中的漏洞组件中的漏洞对应的函数调用链,并获取该漏洞函数调用链对应的控制流图,采用分段式路径搜索方式,确定与漏洞函数调用链的控制流图对应的路径约束信息,通过该路径约束信息对漏洞组件中的漏洞进行可达性分析,得到可达性分析结果,提高了sca漏洞可达性分析的检测效率和准确性。

10、可选地,所述根据所述依赖树,确定所述应用程序的第一调用图和所述依赖组件的第二调用图,包括:

11、对所述应用程序进行代码类型分析,得到与所述应用程序对应的第一粗粒度调用图,并对各个依赖组件进行代码类型分析,得到与所述依赖组件对应的第二粗粒度调用图;

12、获取所述第一粗粒度调用图中与预设规则对应的第一特征信息,以及获取所述第二粗粒度调用图中的与预设规则对应的第二特征信息;

13、采用所述预设规则对所述第一特征信息进行处理,得到所述应用程序的第一调用图,采用所述预设规则对所述第二特征信息进行处理,得到所述依赖组件的第二调用图。

14、本技术的一些实施例通过先生成应用程序和依赖组件的粗粒度调用图,然后根据预设规则识别粗粒度调用图中的特征信息,进而通过预设规则对对应的特征信息进行处理,得到细粒度调用图,提高数据处理的准确性。

15、可选地,所述预设规则至少包括数据流规则、语义规则、路径规则和文本相似规则,且所述数据流规则用于获取符合数据规则的种子目标,所述语义规则用于排除可能性小的目标,所述路径规则用于选择数据流路径,所述文本相似规则用于判断文本内容的相似性;

16、其中,数据流规则的优先级高于语义规则的优先级,所述语义规则的优先级高于所述路径规则,所述路径规则的优先级高于所述文本相似规则。

17、本技术的一些实施例从粗粒度调用图中提取包括数据流规则、语义规则、路径规则和文本相似规则,使用启发式策略识别非直接调用目标,解决了类型分析过程中使用信息种类单一的问题,在保持低漏报率的前提下有效降低了误报率。

18、可选地,所述根据所述第一调用图和所述第二调用图,确定所述漏洞组件中的漏洞函数调用链,包括:

19、基于所述应用程序和所述依赖组件,对所述第一调用图和所述第二调用图进行剪枝,将与漏洞函数没有直接或间接调用关系的函数删除,得到与所述漏洞组件中的漏洞函数调用链。

20、本技术的一些实施例,通过采用到达定值算法对第一调用图和第二调用图进行数据流分析,将与漏洞函数没有直接或间接调用关系的函数删除,得到与所述漏洞组件中的漏洞函数调用链,可以缓解路径爆炸的问题,同时减少数据的处理量,提高数据处理效率。

21、可选地,所述根据所述漏洞函数调用链,确定所述漏洞函数调用链对应的控制流图,包括:

22、利用到达定值算法,基于所述应用程序中的目标语句,和/或所述依赖组件中的目标语句,对所述漏洞函数调用链对应的初始控制流图进行路径剪枝,将与所述目标语句无关的语句删除,得到所述漏洞函数调用链的控制流图。

23、可选地,所述采用分段式路径搜索方式,根据所述漏洞函数调用链的控制流图,确定与所述漏洞函数调用链的控制流图对应的路径约束信息,包括:

24、对于所述漏洞函数调用链中的每一个函数的控制流图,分别对控制流图中每一段路径进行路径检测,得到与所述函数对应的路径约束表达式;

25、对与所述函数对应的路径约束表达式进行合并处理,得到与所述漏洞函数调用链的控制流图对应的路径约束信息。

26、本技术的一些实施例通过采用分段式路径搜索方式,对漏洞函数调用链中的每一个函数的控制流图进行路径检测,从而得到函数对应的路径约束表达式,进而对多个与函数对应的路径约束表达式进行合并,从而得到漏洞函数调用链对应的路径约束信息,这样解决了现有的符号执行方法难以对外部依赖库中的函数进行路径探索的问题,分段式的方法可以全面地计算应用程序内部和外部的所有执行路径。

27、可选地,所述根据与所述漏洞函数调用链的控制流图对应的路径约束信息,确定所述漏洞组件中的漏洞的可达性分析结果,包括:

28、采用约束求解器对与所述漏洞函数调用链的控制流图对应的路径约束信息进行求解,得到求解结果;

29、若所述求解结果无解,则确定所述依赖组件中的漏洞组件中的漏洞不可达;

30、若所述求解结果有解,则获取与所述漏洞函数调用链对应的检测路径和风险参数,并根据所述检测路径和所述风险参数判断所述漏洞组件的漏洞可达性。

31、本技术的一些实施例利用约束求解器对漏洞函数调用链对应的路径约束信息进行约束求解,若无解,则说明漏洞组件的漏洞不可达,若可以解出满足整个漏洞函数调用链的可行路径及相关变量的具体值,结合预先收集的能够触发该已知漏洞的风险参数,判断漏洞是否真实可达,从而可以快速准确的判断漏洞组件中的漏洞是否可达。

32、可选地,所述方法还包括:

33、将获得的与所述应用程序和所述依赖组件对应的路径约束信息进行存储。

34、本技术的一些实施例,可以保存对函数首次进行内部路径探索获得的路径约束表达式,并在以后的分析中重复利用,而不必每次都对函数进行控制流图生成和符号执行。

35、第二方面,本技术的一些实施例提供了一种sca漏洞可达性分析装置,包括:

36、获取模块,用于获取应用程序和与所述应用程序对应的依赖组件,并根据所述应用程序和所述依赖组件,构建与所述应用程序对应的依赖树;其中所述依赖组件中包括漏洞组件;

37、第一确定模块,用于根据所述依赖树,确定所述应用程序的第一调用图和所述依赖组件的第二调用图;

38、第二确定模块,用于根据所述第一调用图和所述第二调用图,确定所述漏洞组件中的漏洞函数调用链;

39、第三确定模块,用于根据与所述漏洞组件中漏洞对应的函数调用链,确定所述函数调用链对应的控制流图;

40、搜索模块,用于采用分段式路径搜索方式,根据所述漏洞函数调用链的控制流图,确定与所述漏洞函数调用链的控制流图对应的路径约束信息;

41、分析模块,用于根据与所述漏洞函数调用链的控制流图对应的路径约束信息,确定所述漏洞组件中的漏洞的可达性分析结果。

42、本技术的一些实施例通过对应用程序和依赖组件的代码进行多层类型分析,为代码构建调用图,进而根据调用图,生成与依赖树中的漏洞组件中的漏洞对应的函数调用链,并获取该漏洞函数调用链对应的控制流图,采用分段式路径搜索方式,确定与漏洞函数调用链的控制流图对应的路径约束信息,通过该路径约束信息对漏洞组件中的漏洞进行可达性分析,得到可达性分析结果,提高了sca漏洞可达性分析的检测效率和准确性。

43、可选地,所述第一确定模块用于:

44、对所述应用程序进行代码类型分析,得到与所述应用程序对应的第一粗粒度调用图,并对各个依赖组件进行代码类型分析,得到与所述依赖组件对应的第二粗粒度调用图;

45、获取所述第一粗粒度调用图中与预设规则对应的第一特征信息,以及获取所述第二粗粒度调用图中的与预设规则对应的第二特征信息;

46、采用所述预设规则对所述第一特征信息进行处理,得到所述应用程序的第一调用图,采用所述预设规则对所述第二特征信息进行处理,得到所述依赖组件的第二调用图。

47、本技术的一些实施例通过先生成应用程序和依赖组件的粗粒度调用图,然后根据预设规则识别粗粒度调用图中的特征信息,进而通过预设规则对对应的特征信息进行处理,得到细粒度调用图,提高数据处理的准确性。

48、可选地,所述预设规则至少包括数据流规则、语义规则、路径规则和文本相似规则,且所述数据流规则用于获取符合数据规则的种子目标,所述语义规则用于排除可能性小的目标,所述路径规则用于选择数据流路径,所述文本相似规则用于判断文本内容的相似性;

49、其中,数据流规则的优先级高于语义规则的优先级,所述语义规则的优先级高于所述路径规则,所述路径规则的优先级高于所述文本相似规则。

50、本技术的一些实施例从粗粒度调用图中提取包括数据流规则、语义规则、路径规则和文本相似规则,使用启发式策略识别非直接调用目标,解决了类型分析过程中使用信息种类单一的问题,在保持低漏报率的前提下有效降低了误报率。

51、可选地,所述第二确定模块用于:

52、基于所述应用程序和所述依赖组件,对所述第一调用图和所述第二调用图进行剪枝,将与漏洞函数没有直接或间接调用关系的函数删除,得到与所述漏洞组件中的漏洞函数调用链。

53、本技术的一些实施例,通过采用到达定值算法对第一调用图和第二调用图进行数据流分析,将与漏洞函数没有直接或间接调用关系的函数删除,得到与所述漏洞组件中的漏洞函数调用链,可以缓解路径爆炸的问题,同时减少数据的处理量,提高数据处理效率。

54、可选地,所述第三确定模块用于:

55、利用到达定值算法,基于所述应用程序中的目标语句,和/或所述依赖组件中的目标语句,对所述漏洞函数调用链对应的初始控制流图进行路径剪枝,将与所述目标语句无关的语句删除,得到所述漏洞函数调用链的控制流图。

56、可选地,所述搜索模块用于:

57、对于所述漏洞函数调用链中的每一个函数的控制流图,分别对控制流图中每一段路径进行路径检测,得到与所述函数对应的路径约束表达式;

58、对与所述函数对应的路径约束表达式进行合并处理,得到与所述漏洞函数调用链的控制流图对应的路径约束信息。

59、本技术的一些实施例通过采用分段式路径搜索方式,对漏洞函数调用链中的每一个函数的控制流图进行路径检测,从而得到函数对应的路径约束表达式,进而对多个与函数对应的路径约束表达式进行合并,从而得到漏洞函数调用链对应的路径约束信息,这样解决了现有的符号执行方法难以对外部依赖库中的函数进行路径探索的问题,分段式的方法可以全面地计算应用程序内部和外部的所有执行路径。

60、可选地,所述分析模块用于:

61、采用约束求解器对与所述漏洞函数调用链的控制流图对应的路径约束信息进行求解,得到求解结果;

62、若所述求解结果无解,则确定所述依赖组件中的漏洞组件中的漏洞不可达;

63、若所述求解结果有解,则获取与所述漏洞函数调用链对应的检测路径和风险参数,并根据所述检测路径和所述风险参数判断所述漏洞组件的漏洞可达性。

64、本技术的一些实施例利用约束求解器对漏洞函数调用链对应的路径约束信息进行约束求解,若无解,则说明漏洞组件的漏洞不可达,若可以解出满足整个漏洞函数调用链的可行路径及相关变量的具体值,结合预先收集的能够触发该已知漏洞的风险参数,判断漏洞是否真实可达,从而可以快速准确的判断漏洞组件中的漏洞是否可达。

65、可选地,所述搜索模块还用于:

66、将获得的与所述应用程序和所述依赖组件对应的路径约束信息进行存储。

67、本技术的一些实施例,可以保存对函数首次进行内部路径探索获得的路径约束表达式,并在以后的分析中重复利用,而不必每次都对函数进行控制流图生成和符号执行。

68、第三方面,本技术的一些实施例提供一种电子设备,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,其中,所述处理器执行所述程序时可实现如第一方面任一实施例所述的sca漏洞可达性分析方法。

69、第四方面,本技术的一些实施例提供一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时可实现如第一方面任一实施例所述的sca漏洞可达性分析方法。

70、第五方面,本技术的一些实施例提供一种计算机程序产品,所述的计算机程序产品包括计算机程序,其中,所述的计算机程序被处理器执行时可实现如第一方面任一实施例所述的sca漏洞可达性分析方法。

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