一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于可达性分析的组件间交互威胁检测方法及装置与流程

2021-11-09 21:44:00 来源:中国专利 TAG:


1.本发明涉及程序分析领域,尤其涉及一种基于可达性分析的组件间交互威胁检测方法及装置,其中可达性分析包括输入可达性分析和路径可达性分析。


背景技术:

2.大数据所蕴藏的巨大价值,使其成为当前网络攻击的重点目标之一。但大数据处理程序及其所依托的大数据平台,普通重视服务的高可用性、高扩展性,未充分考虑安全性,导致在大数据处理过程中存在安全风险。大数据处理程序中的漏洞类型不以传统漏洞为主,而多为逻辑缺陷或由于组件间交互引入的安全威胁,且因其交互频繁、种类多样、触发条件复杂难以检测、复现、分析、定位。以模糊测试为代表的传统漏洞挖掘技术虽能有效发现操作系统内核、协议、开源库等关键基础软件中的漏洞,但其未对大数据处理程序中由于组件间交互引入的安全威胁进行适配,缺乏相应场景的威胁检测能力。
3.程序分析是指对计算机程序进行自动化的处理,以确认或发现其特性,比如性能、安全性等。程序分析应用的场景包括编译优化、缺陷检测、故障定位等,可以用来发现缓冲区溢出、释放后重用、空指针解引用等影响程序安全性的缺陷。因此,程序分析也是当前主流的漏洞挖掘手段,特别是针对内存破坏类漏洞和条件竞争漏洞等传统漏洞的工具层出不穷。但这些工具对于需要跨组件触发的漏洞的检测和确认能力不足,导致大数据应用等复杂软件系统中由于组件间交互导致的安全威胁难以被检测和定位。而此类漏洞在上述复杂软件系统中频繁发生,影响系统和用户的安全性。因此需要一种检测组件间交互威胁的技术,来补充现有工具的不足。


技术实现要素:

4.针对大数据应用等复杂软件系统中频繁发生的组件间交互威胁难以通过现有方法进行检测和定位的问题,本发明公开一种基于可达性分析的组件间交互威胁检测方法及装置。此方法在源代码、字节码或二进制代码反汇编得到的中间表示代码上进行分析,基于漏洞路径可达性和外部输入可控性,判断某个组件内的漏洞能否能通过组件间交互触发,这里的漏洞包括组件内未修复的已公开漏洞,用其它技术手段(如:模糊测试、静态检测等)以及人工审计新发现的疑似漏洞等。
5.本发明的技术内容包括:
6.一种基于可达性分析的组件间交互威胁检测方法,其步骤包括:
7.1)收集漏洞,组成漏洞集合,并将待分析软件系统中主应用及依赖组件的代码进行反汇编或中间翻译,得到中间表示代码;
8.2)依据中间表示代码,分别构建主应用类层次图、主应用调用图、主应用过程间控制流图、主应用系统依赖图、依赖组件类层次图与依赖组件系统依赖图;
9.3)利用主应用类层次图及主应用调用图进行分析,获取若干候选外部输入点;
10.4)在主应用过程间控制流图上进行分析,并根据获取的被调用函数的函数原型,
在主应用类层次图上进行检索,将主应用类层次图上查询不到类型引用的被调用函数,放入调用指令集合,其中函数原型包括:类型引用、函数名、参数数量和参数类型;
11.5)将调用指令集合中的每一调用函数与依赖组件类层次图中的函数进行匹配,并将匹配成功的调用函数作为组件间的交互接口,把交互接口调用点放入调用点集合;
12.6)利用主应用系统依赖图,获取与候选外部输入点存在数据依赖关系的交互接口调用点,并将存在依赖关系的交互接口调用点,作为可控交互接口调用点;
13.7)利用依赖组件系统依赖图,识别与漏洞集合中各漏洞存在数据依赖关系的可控交互接口调用点,得到组件间交互威胁检测结果。
14.进一步地,主应用及依赖组件的代码包括:源代码、字节码或二进制代码。
15.进一步地,主应用类层次图或依赖组件类层次图中的每个节点代表面向对象语言中的一个类,边代表类的继承关系;主应用调用图中的每个节点代表一个函数,边代表函数调用关系;主应用过程间控制流图中的每个节点代表函数中的一个基本块,边代表控制流转移关系;主应用系统依赖图中每一函数表示一主应用程序依赖图,依赖组件系统依赖图中每一函数表示一依赖组件程序依赖图,主应用程序依赖图或依赖组件程序依赖图中的每个节点为程序中的语句,边表示数据依赖关系。
16.进一步地,通过以下步骤查找候选外部输入点:
17.1)遍历主应用类层次图中所有函数;
18.2)当任一函数是main函数,且在调用图上查询不到前驱节点,则认为该main函数为候选外部输入点。
19.进一步地,通过以下步骤获取被调用函数的函数原型:
20.1)从主应用过程间控制流图的根结点开始以深度优先顺序进行迭代遍历;
21.2)对遍历到的每个节点,通过识别中间表示上的所有调用类型的指令,获取被调用函数的函数原型。
22.进一步地,通过以下步骤进行匹配:
23.1)对于调用指令集合中的每一调用函数,在依赖组件类层次图上查询接口的类型声明是否存在;
24.2)若类型声明存在,则在依赖组件类层次图上查找相应函数原型中的函数名、参数数量和参数类型;
25.3)若相应的函数名、参数数量和参数类型存在,则匹配成功。
26.进一步地,通过以下步骤存在数据依赖关系的交互接口调用点:
27.1)从主应用系统依赖图中的交互接口调用点处,做第一后向数据流切片;
28.2)若第一后向数据流切片中某条语句的use点包含一候选外部输入点,则该候选外部输入点与该交互接口调用点存在依赖关系。
29.进一步地,通过以下步骤识别与漏洞集合中各漏洞存在数据依赖关系的可控交互接口调用点:
30.1)在各漏洞所在依赖组件系统依赖图上,以各漏洞的漏洞路径集合中所有节点为起点,做第二后向数据流切片;
31.2)若第二后向数据流切片中包含可控交互接口调用点处被调用接口的函数体,则该漏洞与该可控交互接口调用点存在数据依赖关系。
32.进一步地,组件间交互威胁检测结果包括:识别出的可控交互接口调用点及相应的候选外部输入点、漏洞。
33.一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行以上所述方法。
34.一种电子装置,包括存储器和处理器,其中存储器存储执行以上所述方法的程序。
35.和现有技术相比,本发明具有的优点和积极效果如下:
36.本发明面向大数据应用等复杂软件系统中频繁发生的组件间交互威胁,相比现有技术有明显优势。一方面,由于交互类型多且频繁,模糊测试等现有动态检测技术难以获得较高的代码覆盖率,又由于威胁触发路径较深且输入条件复杂,对威胁的触发和监控能力不足。另一方面,现有静态检测技术擅长分析内存破坏类漏洞等传统漏洞,但缺少对组件间交互威胁的定制化处理。本发明不局限于分析某一类漏洞,而是通过对输入点、交互接口的识别和漏洞路径可达性、外部输入可控性分析,实现通用的威胁检测效果,且结果具有较强的可验证性和可复现性。
附图说明
37.图1本发明的方法示例图。
具体实施方式
38.为了使本技术领域的人员更好的理解本发明,下面将结合说明书附图,对本发明实施例中的技术方案进行清楚、完整地描述。
39.本方法主要分析外部输入的可控性和漏洞路径可达性。方法的输入包括漏洞集合vuls(包括收集到的组件内已公开漏洞和新发现的疑似漏洞),以及主应用和其它依赖组件的代码。其中,漏洞集合中的每个元素对应一个已公开或疑似漏洞的完整信息,包含漏洞路径,漏洞所在的依赖组件和漏洞描述等。方法的输出包括漏洞代码位置vul、组件间交互调用点callsite和外部输入位置input构成的三元组列表results。具体分为7个步骤,如图1所示,详细做法如下:
40.1.首先将待分析软件系统中主应用和其它依赖组件的源代码、字节码或二进制代码进行反汇编或中间翻译,转换为中间表示代码,主要目的是获得易于分析其语义的表现形式。以大数据数据仓库hive为例,主应用为hive,其它依赖组件包括hadoop平台基础组件hdfs、yarn、mapreduce等,分析它们的jar包(字节码)并得到wala的中间表示代码wala

ir的形式。wala

ir用接近字节码的语法表示指令,但用一种基于静态单赋值(ssa)的寄存器传输语言表示,并将指令组织在基本块的控制流图中。
41.2.在中间表示代码上,先构建主应用的类层次图chg、调用图cg、过程间控制流图icfg和系统依赖图sdg,再构建其它依赖组件的类层次图chg和系统依赖图sdg(sdg均只考虑数据依赖),作为后续分析的对象。chg中的每个节点代表面向对象语言中的一个类,边代表类的继承关系;cg的每个节点代表一个函数,边代表函数调用关系;icfg中的每个节点代表函数中的一个基本块,边代表控制流转移关系,包括过程间和过程内;sdg是程序依赖图(pdg)的扩展,每个函数表示为一个pdg,pdg中的每个节点为程序中的语句,边表示数据依赖关系。
42.3.在主应用的类层次图上进行分析,遍历类中的所有函数,如果某个函数是main函数,并且在主应用的调用图上查询不到前驱节点(即从未作为被调用函数),则将其识别为一个可能的外部输入点input。
43.4.在主应用的过程间控制流图上进行分析,从图的根结点开始以深度优先顺序进行迭代遍历,对遍历到的每个节点,识别中间表示上的所有调用类型的指令,并获取被调用函数的函数原型,包括类型引用、函数名、参数数量、参数类型等信息。在主应用的类层次图上查询被调用函数的类型引用,如果查询不到,则认为可能是调用了一个其它组件中的接口,即组件间交互接口,并将调用指令放入调用指令集合call_insts。
44.5.从调用指令集合call_insts中取出调用指令,对于每个可能为组件间交互接口的被调函数,首先在依赖组件的类层次图上查询接口的类型声明是否存在,然后查找相应的函数原型是否存在,包括函数名、参数数量、参数类型等,完全匹配则确认为一个组件间交互接口,最终将交互接口的调用点信息放入调用点集合callsites。
45.6.对于调用点集合callsites中的每个交互接口调用点callsite,要判断主应用中外部输入点input是否与调用点callsite存在数据依赖,确定交互接口调用点是否是输入可控的。具体来说,从主应用的系统依赖图中调用点callsite处开始做后向数据流切片,如果切片结果中某条语句的use点包含某个外部输入点input,说明存在数据依赖关系,即识别为可控的交互接口调用点。
46.7.对于每个识别到的可控交互接口调用点callsite,分析漏洞集合vuls中的所有漏洞:在漏洞vul所在组件的系统依赖图上,以vul的漏洞路径集合中所有节点为起点,做后向数据流切片,看切片结果中是否包含调用点处被调用接口的函数体,是则说明存在数据依赖,验证了漏洞路径可达性。最终识别为一个输入可控、路径可达的组件间交互威胁,将漏洞vul、输入点input和交互调用点callsite的三元组放到结果列表results中。
47.下面通过一个实例说明上述步骤的执行过程。
48.在大数据数据仓库hive的场景下,主应用是hive,依赖组件是hadoop平台(hdfs、yarn、mapreduce)等。如图1所示,以yarn组件中的一个已公开漏洞cve

2014

3627为例,说明交互安全威胁检测的过程。方法的输入为包含cve

2014

3627漏洞信息的集合vuls和hive、hadoop漏洞版本的jar包。通过输入点识别,我们将查询执行类execdriver的入口函数识别为外部输入位置。通过交互接口识别,我们会找到可能的交互接口调用点,位于execdriver类的execute函数中,调用了distributedcache类的addcachearchive接口。然后在依赖组件中识别了相应的函数体,确认为一个交互接口调用点。对于这条调用点,以execdriver类的main函数参数为污点源,通过上述分析方法可以判断输入可控性。而yarn的漏洞cve

2014

3627的漏洞路径包括distributedcache类的addcachearchive接口,通过上述分析方法可以判断路径可达性,最终验证cve

2014

3627的触发可行性,识别为一个组件间交互导致的安全威胁。
49.hive在处理连接查询时,默认为大表与小表间的连接操作选用mapjoin物理查询算法。该算法在执行时会将小表上传到分布式缓存中。如hive部署在包含漏洞的hadoop版本上,则可能在发送精心构造的查询时触发漏洞cve

2014

3627,暨通过执行hive查询影响到hadoop平台上用户的安全性。
50.针对大数据应用等复杂软件系统中频繁发生的组件间交互威胁,与现有动静态分
析技术相比,本发明的主要优势如表1所示:
[0051][0052]
表1
[0053]
提供以上实施例仅仅是为了描述本发明的目的,而并非要限制本发明的范围。本发明的范围由所附权利要求限定。不脱离本发明的精神和原理而做出的各种等同替换和修改,均应涵盖在本发明的范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献