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

联盟链智能合约的安全漏洞检测方法及装置

2022-07-06 05:59:57 来源:中国专利 TAG:


1.本技术涉及区块链技术领域,尤其涉及联盟链智能合约的安全漏洞检测方法及装置。


背景技术:

2.联盟链平台的代表是hyperledger fabric,该平台支持以go语言为主的高级语言编写智能合约。但由于目前智能合约仍处于早期阶段,用户和开发人员缺乏使用和实施智能合约的知识,因此在编写业务对应的智能合约代码的时候难免会出现一些错误和纰漏,使智能合约可能存在安全漏洞,遭受恶意攻击造成损失。hyperledger fabric联盟链智能合约安全漏洞种类如图1所示。
3.现有的智能合约安全漏洞检测方案多从传统的软件安全漏洞检测方案演变而来,对联盟链平台智能合约的安全漏洞检测技术则研究较少,以静态分析技术中的抽象语法树分析方案为主,通过给定的规则库,与抽象语法树进行简单的模式匹配。然而该方法缺乏具体的数据流和控制流分析,因此,检测的漏洞类型不够全面导致漏报率较高,同时也可能会存在大量误报。


技术实现要素:

4.鉴于此,本技术实施例提供了联盟链智能合约的安全漏洞检测方法及装置,以消除或改善现有技术中存在的一个或更多个缺陷。
5.本技术的一个方面提供了一种联盟链智能合约的安全漏洞检测方法,包括:
6.将联盟链智能合约的源代码转换为ssa中间语言,并获取该联盟链智能合约的入口函数;
7.自所述入口函数开始,构建所述联盟链智能合约对应的函数控制流图及函数调用图,并根据所述ssa中间语言对所述函数控制流图进行数据流分析,以获取待进行安全漏洞检测的目标数据;
8.从多种静态污点分析方式中选取所述目标数据对应的目标污点分析方式,并基于所述目标污点分析方式对所述目标数据进行安全漏洞检测,其中,至少一种所述污点分析方式对应的安全漏洞检测过程基于所述函数调用图实现。
9.在本技术的一些实施例中,所述目标数据包括:函数返回指令语句、函数调用执行语句中的source点、sink点和未分析函数调用参数中的至少一种;
10.相对应的,所述函数调用执行语句中的source点对应的静态污点分析方式为第一污点传播分析方法;
11.所述函数调用执行语句中的未分析函数调用参数和所述函数返回指令语句对应的静态污点分析方式均为第二污点传播分析方法,且该第二污点传播分析方法对应的安全漏洞检测过程基于所述函数调用图实现;
12.所述函数调用执行语句中的sink点对应的静态污点分析方式为污点检测分析方
式。
13.在本技术的一些实施例中,在所述将联盟链智能合约的源代码转换为ssa中间语言之前,还包括:
14.获取用于进行静态污点分析的配置文件,其中,该配置文件用于定义sink点、source点及对应的污点标签;
15.相对应的,所述根据所述ssa中间语言对所述函数控制流图进行数据流分析,以获取待进行安全漏洞检测的目标数据,包括:
16.基于所述配置文件及所述ssa中间语言遍历所述函数控制流图,以获取待进行安全漏洞检测的目标数据。
17.在本技术的一些实施例中,所述将联盟链智能合约的源代码转换为ssa中间语言,并获取该联盟链智能合约的入口函数,包括:
18.读取联盟链智能合约源文件;
19.基于go语言的ssa转换工具,将联盟链智能合约源文件中的源代码转换为ssa中间语言,并获取该联盟链智能合约的入口函数。
20.在本技术的一些实施例中,所述从多种静态污点分析方式中选取所述目标数据对应的目标污点分析方式,并基于所述目标污点分析方式对所述目标数据进行安全漏洞检测,包括:
21.若所述目标数据包括所述source点,则选取所述source点对应的第一污点传播分析方法对所述source点进行污点传播分析以确定被污染的参数;
22.若所述目标数据包括所述未分析函数调用参数,则选取所述第二污点传播分析方法对所述未分析函数调用参数进行污点传播分析,从所述函数调用图中找到该未分析函数调用参数的入口,将所述未分析函数调用参数的污点情况传播到函数签名处;
23.若所述目标数据包括所述函数返回指令语句,则选取所述第二污点传播分析方法对所述函数返回指令语句的返回值进行污点传播分析,从所述函数调用图中取出对应的函数调用方,将所述返回值的污点情况传递给调用方的变量。
24.在本技术的一些实施例中,所述从多种静态污点分析方式中选取所述目标数据对应的目标污点分析方式,并基于所述目标污点分析方式对所述目标数据进行安全漏洞检测,包括:
25.若所述目标数据包括所述sink点,则判断所述被污染的参数与所述sink点的参数之间是否存在交集,若是,则确定存在从source点到所述sink点的污点路径并获取对应的污点及污点标签。
26.在本技术的一些实施例中,在所述基于所述目标污点分析方式对所述目标数据进行安全漏洞检测之后,还包括:
27.若当前函数内的污点情况有更新,则针对对应的更新数据返回重新构建所述联盟链智能合约对应的函数控制流图及函数调用图,并在重新获取所述目标数据后对该目标数据进行安全漏洞检测;
28.若当前函数内的污点情况无更新,则根据预设的安全漏洞检测规则,生成所述污点标签对应的安全漏洞检测结果;
29.输出所述安全漏洞检测结果。
30.本技术的另一个方面提供了一种联盟链智能合约的安全漏洞检测装置,包括:
31.ssa中间语言转换模块,用于将联盟链智能合约的源代码转换为ssa中间语言,并获取该联盟链智能合约的入口函数;
32.数据流分析模块,用于自所述入口函数开始,构建所述联盟链智能合约对应的函数控制流图及函数调用图,并根据所述ssa中间语言对所述函数控制流图进行数据流分析,以获取待进行安全漏洞检测的目标数据;
33.静态污点分析模块,用于从多种静态污点分析方式中选取所述目标数据对应的目标污点分析方式,并基于所述目标污点分析方式对所述目标数据进行安全漏洞检测,其中,至少一种所述污点分析方式对应的安全漏洞检测过程基于所述函数调用图实现。
34.本技术的另一个方面提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现所述的联盟链智能合约的安全漏洞检测方法。
35.本技术的另一个方面提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现所述的联盟链智能合约的安全漏洞检测方法。
36.本技术提供的联盟链智能合约的安全漏洞检测方法,将联盟链智能合约的源代码转换为ssa中间语言,并获取该联盟链智能合约的入口函数;自所述入口函数开始,构建所述联盟链智能合约对应的函数控制流图及函数调用图,并根据所述ssa中间语言对所述函数控制流图进行数据流分析,以获取待进行安全漏洞检测的目标数据;从多种静态污点分析方式中选取所述目标数据对应的目标污点分析方式,并基于所述目标污点分析方式对所述目标数据进行安全漏洞检测,其中,至少一种所述污点分析方式对应的安全漏洞检测过程基于所述函数调用图实现,使得联盟链智能合约的安全漏洞检测方法具有良好的专用性,是为hyperledger fabric联盟链智能合约专门构建的;通过联盟链智能合约的源代码转化为ssa表示形式,由于每个ssa变量都会保存其相关的指令语句,因此只需要将待进行安全漏洞检测的目标数据中的source点变量相关的指令语句得到的新变量进行污点传播即可,尤其在函数内无害指令语句较多时,可以大幅度减少污点传播分析的时间,提高分析效率;通过收集控制流信息、函数调用信息等多个要素用于静态污点分析,结合为每项安全漏洞的检测分别设计了各自的检测规则,提高了安全漏洞检测的精度,使得联盟链智能合约安全漏洞检测过程覆盖的漏洞种类更多,检测效果更好。
37.本技术的附加优点、目的,以及特征将在下面的描述中将部分地加以阐述,且将对于本领域普通技术人员在研究下文后部分地变得明显,或者可以根据本技术的实践而获知。本技术的目的和其它优点可以通过在说明书以及附图中具体指出的结构实现到并获得。
38.本领域技术人员将会理解的是,能够用本技术实现的目的和优点不限于以上具体所述,并且根据以下详细说明将更清楚地理解本技术能够实现的上述和其他目的。
附图说明
39.此处所说明的附图用来提供对本技术的进一步理解,构成本技术的一部分,并不构成对本技术的限定。附图中的部件不是成比例绘制的,而只是为了示出本技术的原理。为了便于示出和描述本技术的一些部分,附图中对应部分可能被放大,即,相对于依据本技术
实际制造的示例性装置中的其它部件可能变得更大。在附图中:
40.图1为hyperledger fabric智能合约常见漏洞与检测规则的举例示意图。
41.图2为本技术一实施例中的联盟链智能合约的安全漏洞检测方法的一种流程示意图。
42.图3为本技术一实施例中的联盟链智能合约的安全漏洞检测方法的另一种流程示意图。
43.图4为本技术另一实施例中的联盟链智能合约的安全漏洞检测装置的结构示意图。
44.图5为本技术应用实例提供的系统模块的逻辑架构图。
45.图6为本技术应用实例提供的基于静态污点分析的hyperledger fabric联盟链智能合约安全漏洞检测方法的流程图。
46.图7为传统污点分析过程图。
具体实施方式
47.为使本技术的目的、技术方案和优点更加清楚明白,下面结合实施方式和附图,对本技术做进一步详细说明。在此,本技术的示意性实施方式及其说明用于解释本技术,但并不作为对本技术的限定。
48.在此,还需要说明的是,为了避免因不必要的细节而模糊了本技术,在附图中仅仅示出了与根据本技术的方案密切相关的结构和/或处理步骤,而省略了与本技术关系不大的其他细节。
49.应该强调,术语“包括/包含”在本文使用时指特征、要素、步骤或组件的存在,但并不排除一个或更多个其它特征、要素、步骤或组件的存在或附加。
50.在此,还需要说明的是,如果没有特殊说明,术语“连接”在本文不仅可以指直接连接,也可以表示存在中间物的间接连接。
51.在下文中,将参考附图描述本技术的实施例。在附图中,相同的附图标记代表相同或类似的部件,或者相同或类似的步骤。
52.基于区块链技术的智能合约应用程序正在广泛地嵌入到各种行业应用中,如金融、供应链管理、医疗保健、能源、物联网以及政府服务。但去中心化的公有链平台的事务处理效率不高,因此无法支撑大规模的应用。联盟链平台虽然牺牲了一定的去中心化程度,但却能保证较好的事务处理效率,因此,许多企业的智能合约应用都搭建在联盟链平台上。
53.联盟链平台的代表是hyperledger fabric。由于现有的智能合约安全漏洞检测方案多从传统的软件安全漏洞检测方案演变而来。公有链平台智能合约的安全漏洞检测方法较多,既有通过人工智能方式进行分析的方法,也有普通的静态和动态分析方法。而联盟链平台智能合约的安全漏洞检测技术则研究较少,以静态分析技术中的抽象语法树分析方案为主。抽象语法树分析技术是一种通过将源码文件中的每一项语句都转换成树状的方法,并且通过分析该树状结构的每个节点的类型和内容进行分析的方法。
54.因此造成现有智能合约安全漏洞检测方案有以下缺点:
55.1)大部分智能合约安全漏洞检测方案都是针对以太坊公有链智能合约实现的,不适用于联盟链智能合约的安全漏洞检测。二者在智能合约开发语言和区块链平台交易流程
两大方面存在差异。首先,以太坊公有链的智能合约开发是以solidity语言进行开发为主,hyperledger fabric联盟链以go语言开发为主。其次,以太坊公有链的交易执行流程为“order-execute architecture”,即在不同节点中需要对交易进行统一排序,确定交易顺序后再执行交易的形式。hyperledger fabric联盟链采用了新的“execute-order-validate architecture”架构,即先执行,然后再排序,最后对结果进行验证的形式。两种交易执行流程的不一致,导致了产生的安全漏洞不一致,两种检测工具无法通用。
56.2)现有的联盟链智能合约安全漏洞检测方案是使用抽象语法树分析,通过给定的规则库,与抽象语法树进行简单的模式匹配。该方法缺乏具体的数据流和控制流分析,因此,检测的漏洞类型不够全面导致漏报率较高,同时也可能会存在大量误报。
57.鉴于上述问题,本技术提供了一种基于静态污点分析的hyperledger fabric联盟链智能合约安全漏洞检测方案,能够针对目前已有的漏洞,构建了污点分析source点涉及到的关键函数api和基本变量分析;在后续hyperledger fabric平台更新后,如果发现有新的安全漏洞出现,可以根据安全漏洞出现的规则自行添加source点到配置文件中,体现良好的拓展性。
58.同时,传统的静态分析手段都需要基于抽象语法树和中间语言进行,通过收集各种信息提高检测的准确率和降低误报率。由于目前缺乏对go语言转换成中间语言的技术方法,所以大部分对go语言进行静态分析的工具都是基于抽象语法树匹配进行的,因此目前对hyperledger fabric智能合约进行安全检测的工具也采用同样的手段,通过go语言收集更多信息用于安全检测是一大难点。本技术通过利用go语言的ssa中间语言表示库,将智能合约源文件转换成ssa中间语言表示分析,相比抽象语法树分析,能够更好地涵盖源文件的控制流信息、函数调用信息等,从而实现上下文敏感的静态污点分析,减少误报率和漏报率。
59.在本技术的一个或多个实施例中,source点是指可能会引发安全问题的数据点,sink点是指污点汇聚点。
60.在本技术的一个或多个实施例中,ssa是一种编译器使用的中间语言(intermediate language),作为编译优化的基础(也是dfg jit的基础),它和control dependence graph一起被用来表示程序的数据流和控制流。
61.基于此,本技术实施例提供一种联盟链智能合约的安全漏洞检测方法,参见图2,所述联盟链智能合约的安全漏洞检测方法具体包含有如下内容:
62.步骤100:将联盟链智能合约的源代码转换为ssa中间语言,并获取该联盟链智能合约的入口函数。
63.可以理解的是,步骤100可以由联盟链智能合约的安全漏洞检测装置中的ssa中间语言转换模块执行,该模块可以利用输入的智能合约源代码文件,使用go语言的ssa转换工具,对其进行中间语言转换,将智能合约源代码转换成一种ssa中间语言进行表示,在转换过程中,可以将每个变量涉及到的指令语句(referrers)进行保存,并获取智能合约的函数入口,为后续分析提供基础支撑。
64.步骤200:自所述入口函数开始,构建所述联盟链智能合约对应的函数控制流图及函数调用图,并根据所述ssa中间语言对所述函数控制流图进行数据流分析,以获取待进行安全漏洞检测的目标数据。
65.可以理解的是,步骤200可以由联盟链智能合约的安全漏洞检测装置中的数据流分析模块执行,该模块主要作用是:
66.1)构建函数的数据流图icfg、控制流图cfg(control flow graph)和函数调用图(callgraph)用于后续分析过程。
67.2)利用ssa中间语言转换模块得出的中间语言,遍历cfg中每一条中间语言语句,对函数调用指令语句和返回指令语句定义了分析逻辑。
68.对函数调用执行语句,会判断是否存在source点、sink点和未分析函数调用。如果存在source点、未分析函数调用指令,则会调用下述的污点传播分析模块进行污点传播分析;如果存在sink点,则会调用下述的污点检测模块进行污点检测分析。
69.对函数返回指令语句,则会调用下述的污点传播分析模块进行污点传播分析。
70.步骤300:从多种静态污点分析方式中选取所述目标数据对应的目标污点分析方式,并基于所述目标污点分析方式对所述目标数据进行安全漏洞检测,其中,至少一种所述污点分析方式对应的安全漏洞检测过程基于所述函数调用图实现。
71.可以理解的是,步骤300可以由联盟链智能合约的安全漏洞检测装置中的静态污点分析模块执行,该模块用于从多种静态污点分析方式中选取所述目标数据对应的目标污点分析方式,并基于所述目标污点分析方式对所述目标数据进行安全漏洞检测,其中,至少一种所述污点分析方式对应的安全漏洞检测过程基于所述函数调用图实现。
72.从上述描述可知,本技术实施例提供的联盟链智能合约的安全漏洞检测方法,具有良好的专用性,是为hyperledger fabric联盟链智能合约专门构建的;通过联盟链智能合约的源代码转化为ssa表示形式,由于每个ssa变量都会保存其相关的指令语句,因此只需要将待进行安全漏洞检测的目标数据中的source点变量相关的指令语句得到的新变量进行污点传播即可,尤其在函数内无害指令语句较多时,可以大幅度减少污点传播分析的时间,提高分析效率;通过收集控制流信息、函数调用信息等多个要素用于静态污点分析,结合为每项安全漏洞的检测分别设计了各自的检测规则,提高了安全漏洞检测的精度,使得联盟链智能合约安全漏洞检测过程覆盖的漏洞种类更多,检测效果更好。
73.为了进一步提高安全漏洞检测的精度,在本技术实施例提供的一种联盟链智能合约的安全漏洞检测方法中,所述目标数据包括:函数返回指令语句、函数调用执行语句中的source点、sink点和未分析函数调用参数中的至少一种。
74.相对应的,所述函数调用执行语句中的source点对应的静态污点分析方式为第一污点传播分析方法。
75.所述函数调用执行语句中的未分析函数调用参数和所述函数返回指令语句对应的静态污点分析方式均为第二污点传播分析方法,且该第二污点传播分析方法对应的安全漏洞检测过程基于所述函数调用图实现。
76.所述函数调用执行语句中的sink点对应的静态污点分析方式为污点检测分析方式。
77.从上述描述可知,本技术实施例提供的联盟链智能合约的安全漏洞检测方法,通过针对函数返回指令语句、函数调用执行语句中的source点、sink点和未分析函数调用参数分别选用各自对应的静态污点分析方式,能够进一步提高安全漏洞检测的精度,使得联盟链智能合约安全漏洞检测过程覆盖的漏洞种类更多,检测效果更好。
78.为了使得联盟链智能合约的安全漏洞检测方法具有良好的拓展性,在本技术实施例提供的一种联盟链智能合约的安全漏洞检测方法中,参见图3,所述联盟链智能合约的安全漏洞检测方法中的步骤100之前还具体包含有如下内容:
79.步骤010:获取用于进行静态污点分析的配置文件,其中,该配置文件用于定义sink点、source点及对应的污点标签。
80.可以理解的是,步骤010可以由联盟链智能合约的安全漏洞检测装置中的配置模块执行,该模块主要用于向用户提供配置污点分析的相关参数,包括可能会引发安全问题的数据点(source点)以及污点汇聚点(sink点)等。
81.相对应的,所述联盟链智能合约的安全漏洞检测方法中的步骤200具体包含有如下内容:
82.步骤210:基于所述配置文件及所述ssa中间语言遍历所述函数控制流图,以获取待进行安全漏洞检测的目标数据。
83.从上述描述可知,本技术实施例提供的联盟链智能合约的安全漏洞检测方法,通过提供污点分析配置文件,使得联盟链智能合约的安全漏洞检测方法具有良好的拓展性,可以随着hyperledger fabric智能合约api变化,通过更改污点分析配置文件来进行修改和扩展。另外,本框架亦可通过配置文件配置其他敏感api,进行敏感数据泄漏等隐私性安全检测。
84.为了进一步大幅度减少污点传播分析的时间,提高分析效率,在本技术实施例提供的一种联盟链智能合约的安全漏洞检测方法中,所述联盟链智能合约的安全漏洞检测方法中的步骤100具体包含有如下内容:
85.步骤110:读取联盟链智能合约源文件。
86.步骤120:基于go语言的ssa转换工具,将联盟链智能合约源文件中的源代码转换为ssa中间语言,并获取该联盟链智能合约的入口函数。
87.从上述描述可知,传统的静态污点分析方法在发现source点后,对source点相关的变量进行污点传播分析时,需要再次遍历函数内所有的指令语句,通过枚举各个语句的指令类别分别进行不同的污点传播分析逻辑。而本技术实施例提供的联盟链智能合约的安全漏洞检测方法,由于将go语言转化为ssa表示形式时,每个ssa变量都会保存其相关的指令语句,因此只需要将source点变量相关的指令语句得到的新变量进行污点传播即可。该方式在函数内无害指令语句较多时,可以大幅度减少污点传播分析的时间,提高分析效率。
88.为了进一步提高安全漏洞检测的精度,在本技术实施例提供的一种联盟链智能合约的安全漏洞检测方法中,所述联盟链智能合约的安全漏洞检测方法中的步骤300还具体包含有如下内容:
89.步骤310:若所述目标数据包括所述source点,则选取所述source点对应的第一污点传播分析方法对所述source点进行污点传播分析以确定被污染的参数。
90.步骤320:若所述目标数据包括所述未分析函数调用参数,则选取所述第二污点传播分析方法对所述未分析函数调用参数进行污点传播分析,从所述函数调用图中找到该未分析函数调用参数的入口,将所述未分析函数调用参数的污点情况传播到函数签名处。
91.步骤330:若所述目标数据包括所述函数返回指令语句,则选取所述第二污点传播分析方法对所述函数返回指令语句的返回值进行污点传播分析,从所述函数调用图中取出
对应的函数调用方,将所述返回值的污点情况传递给调用方的变量。
92.可以理解的是,步骤310至步骤330可以由联盟链智能合约的安全漏洞检测装置中的静态污点分析模块中的污点传播分析模块执行,该模块主要定义了污点数据的表示以及污点数据的标签,并且定义了污点数据的传播规则。此外,该模块将对数据流分析模块分析过程中所发现的source点的污点传播路径进行污点传播分析,以及对未分析函数调用的函数参数与函数签名、调用者变量和被调用函数返回值等进行污点传播分析。
93.从上述描述可知,本技术实施例提供的联盟链智能合约的安全漏洞检测方法,通过针对函数返回指令语句、函数调用执行语句中的source点和未分析函数调用参数分别选用各自对应的污点传播分析方式,能够进一步提高安全漏洞检测的精度,使得联盟链智能合约安全漏洞检测过程覆盖的漏洞种类更多,检测效果更好。
94.为了进一步提高安全漏洞检测的精度,在本技术实施例提供的一种联盟链智能合约的安全漏洞检测方法中,所述联盟链智能合约的安全漏洞检测方法中的步骤300还具体包含有如下内容:
95.步骤340:若所述目标数据包括所述sink点,则判断所述被污染的参数与所述sink点的参数之间是否存在交集,若是,则确定存在从source点到所述sink点的污点路径并获取对应的污点及污点标签。
96.可以理解的是,步骤310至步骤330可以由联盟链智能合约的安全漏洞检测装置中的静态污点分析模块中的污点检测模块执行,该模块通过检测污点传播分析过程中被污染的参数与数据流分析过程中的sink点的参数是否存在交集,判断是否。如果存在污染路径,该模块将污染路径及污点标签等进行输出。
97.从上述描述可知,本技术实施例提供的联盟链智能合约的安全漏洞检测方法,通过针对函数调用执行语句中的sink点选用各自对应的污点检测分析方式,能够进一步提高安全漏洞检测的精度,使得联盟链智能合约安全漏洞检测过程覆盖的漏洞种类更多,检测效果更好。
98.为了保证联盟链智能合约的安全漏洞检测过程的全面性及有效性,并进一步提高输出安全漏洞检测结果的可靠性及有效性,参见图3,在本技术实施例提供的一种联盟链智能合约的安全漏洞检测方法中,所述联盟链智能合约的安全漏洞检测方法中的步骤300之后还具体包含有如下内容:
99.步骤400:若当前函数内的污点情况有更新,则针对对应的更新数据返回步骤100,重新构建所述联盟链智能合约对应的函数控制流图及函数调用图,并在重新获取所述目标数据后对该目标数据进行安全漏洞检测。
100.步骤500:若当前函数内的污点情况无更新,则根据预设的安全漏洞检测规则,生成所述污点标签对应的安全漏洞检测结果,并输出所述安全漏洞检测结果。
101.从上述描述可知,本技术实施例提供的联盟链智能合约的安全漏洞检测方法,通过针对对应的更新数据返回重新构建所述联盟链智能合约对应的函数控制流图及函数调用图,并在重新获取所述目标数据后对该目标数据进行安全漏洞检测,能够有效保证联盟链智能合约的安全漏洞检测过程的全面性及有效性;通过定义了hyperledger fabric智能合约常见的安全漏洞以及对应的在框架中的检测规则,结合污点检测模块得到的污点标签,输出漏洞检测结果,能够进一步提高输出安全漏洞检测结果的可靠性及有效性。
102.从软件层面来说,本技术还提供一种用于执行所述联盟链智能合约的安全漏洞检测方法中全部或部分内的联盟链智能合约的安全漏洞检测装置,参见图4,所述联盟链智能合约的安全漏洞检测装置具体包含有如下内容:
103.ssa中间语言转换模块10,用于将联盟链智能合约的源代码转换为ssa中间语言,并获取该联盟链智能合约的入口函数。
104.数据流分析模块20,用于自所述入口函数开始,构建所述联盟链智能合约对应的函数控制流图及函数调用图,并根据所述ssa中间语言对所述函数控制流图进行数据流分析,以获取待进行安全漏洞检测的目标数据。
105.静态污点分析模块30,用于从多种静态污点分析方式中选取所述目标数据对应的目标污点分析方式,并基于所述目标污点分析方式对所述目标数据进行安全漏洞检测,其中,至少一种所述污点分析方式对应的安全漏洞检测过程基于所述函数调用图实现。
106.本技术提供的联盟链智能合约的安全漏洞检测装置的实施例具体可以用于执行上述实施例中的联盟链智能合约的安全漏洞检测方法的实施例的处理流程,其功能在此不再赘述,可以参照上述联盟链智能合约的安全漏洞检测方法实施例的详细描述。
107.所述联盟链智能合约的安全漏洞检测装置进行联盟链智能合约的安全漏洞检测的部分可以在服务器中执行,而在另一种实际应用情形中,也可以所有的操作都在客户端设备中完成。具体可以根据所述客户端设备的处理能力,以及用户使用场景的限制等进行选择。本技术对此不作限定。若所有的操作都在所述客户端设备中完成,所述客户端设备还可以包括处理器,用于联盟链智能合约的安全漏洞检测的具体处理。
108.上述的客户端设备可以具有通信模块(即通信单元),可以与远程的服务器进行通信连接,实现与所述服务器的数据传输。所述服务器可以包括任务调度中心一侧的服务器,其他的实施场景中也可以包括中间平台的服务器,例如与任务调度中心服务器有通信链接的第三方服务器平台的服务器。所述的服务器可以包括单台计算机设备,也可以包括多个服务器组成的服务器集群,或者分布式装置的服务器结构。
109.上述服务器与所述客户端设备端之间可以使用任何合适的网络协议进行通信,包括在本技术提交日尚未开发出的网络协议。所述网络协议例如可以包括tcp/ip协议、udp/ip协议、http协议、https协议等。当然,所述网络协议例如还可以包括在上述协议之上使用的rpc协议(remote procedure call protocol,远程过程调用协议)、rest协议(representational state transfer,表述性状态转移协议)等。
110.从上述描述可知,本技术实施例提供的联盟链智能合约的安全漏洞检测装置,具有良好的专用性,是为hyperledger fabric联盟链智能合约专门构建的;通过联盟链智能合约的源代码转化为ssa表示形式,由于每个ssa变量都会保存其相关的指令语句,因此只需要将待进行安全漏洞检测的目标数据中的source点变量相关的指令语句得到的新变量进行污点传播即可,尤其在函数内无害指令语句较多时,可以大幅度减少污点传播分析的时间,提高分析效率;通过收集控制流信息、函数调用信息等多个要素用于静态污点分析,结合为每项安全漏洞的检测分别设计了各自的检测规则,提高了安全漏洞检测的精度,使得联盟链智能合约安全漏洞检测过程覆盖的漏洞种类更多,检测效果更好。
111.为了进一步说明本方案,本技术还提供一种基于静态污点分析的hyperledger fabric联盟链智能合约安全漏洞检测方法的具体应用实例。分别提供了下述改进:
112.1)hyperledger fabric联盟链智能合约专用的检测方法;
113.2)将智能合约源文件转换成ssa中间语言的方法;
114.3)根据ssa中间语言语句进行数据流分析,构建控制流图和函数调用图;
115.4)构建污点分析框架,实现污点传播规则和污点检测规则;
116.5)通过数据流分析,对source点的相关变量进行污点传播;
117.6)检查sink点处参数,判断与source点的相关变量是否存在交集,实现漏洞检测。
118.基于此,基于静态污点分析的hyperledger fabric联盟链智能合约安全漏洞检测方法的具体说明如下:
119.首先,基于静态污点分析的hyperledger fabric联盟链智能合约安全漏洞检测方法的系统模块的逻辑架构如图5所示,整体又分为配置模块、静态单赋值ssa中间语言转换模块、过程间数据流图icfg分析模块、污点传播分析模块、污点检测模块及安全漏洞检测规则匹配模块。
120.(1)配置模块01:该模块主要用于向用户提供配置污点分析的相关参数,包括可能会引发安全问题的数据点(source点)以及污点汇聚点(sink点)等;
121.(2)ssa中间语言转换模块10:该模块利用输入的智能合约源代码文件,使用go语言的ssa转换工具,对其进行中间语言转换,将智能合约源代码转换成一种ssa中间语言进行表示,在转换过程中,可以将每个变量涉及到的指令语句(referrers)进行保存,并获取智能合约的函数入口,为后续分析提供基础支撑。
122.(3)数据流分析模块20(也可称之为:过程间数据流图icfg分析模块):该模块主要作用是:
123.1)构建函数的数据流图icfg、控制流图cfg(control flow graph)和函数调用图(callgraph)用于后续分析过程。
124.2)利用ssa中间语言转换模块得出的中间语言,遍历cfg中每一条中间语言语句,对函数调用指令语句和返回指令语句定义了分析逻辑。
125.对函数调用执行语句,会判断是否存在source点、sink点和未分析函数调用。如果存在source点、未分析函数调用指令,则会调用下述的污点传播分析模块进行污点传播分析;如果存在sink点,则会调用下述的污点检测模块进行污点检测分析。
126.对函数返回指令语句,则会调用下述的污点传播分析模块进行污点传播分析。
127.(4)污点传播分析模块31:该模块主要定义了污点数据的表示以及污点数据的标签,并且定义了污点数据的传播规则。此外,该模块将对数据流分析模块分析过程中所发现的source点的污点传播路径进行污点传播分析,以及对未分析函数调用的函数参数与函数签名、调用者变量和被调用函数返回值等进行污点传播分析。
128.(5)污点检测模块32:该模块通过检测污点传播分析过程中被污染的参数与数据流分析过程中的sink点的参数是否存在交集,判断是否。如果存在污染路径,该模块将污染路径及污点标签等进行输出。
129.(6)安全漏洞检测规则匹配模块4:该模块主要定义了hyperledger fabric智能合约常见的安全漏洞以及对应的在框架中的检测规则,结合污点检测模块得到的污点标签,输出漏洞检测结果。
130.其次,基于上述系统模型,参见图6,本技术应用实例提供的基于静态污点分析的
hyperledger fabric联盟链智能合约安全漏洞检测方法的处理流程如下:
131.(1)配置:读取用户配置文件,通过配置模块记录定义source点、sink点及对应的污点标签;
132.(2)ssa中间语言转换:读取智能合约源码文件,通过ssa中间语言转换模块将源代码构建成ssa中间表示,并找出智能合约入口函数;
133.(3)数据流构建:从智能合约函数入口开始,通过数据流分析模块构建函数控制流图cfg和函数调用图(callgraph)信息并进行函数内的数据流分析;
134.(4)数据流分析:根据cfg信息,遍历cfg中每一条中间语言语句,判断函数调用执行语句是否存在source点、sink点、未分析函数调用。
135.(5)污点传播分析:
136.如果存在source点,就通过污点传播分析模块进行污点传播分析,以确定被污染的参数;
137.如果函数调用指令语句表示的函数是未分析函数,将会通过污点传播分析模块对该函数调用参数进行污点传播分析,从callgraph中找到该未分析函数的入口,将函数调用参数的污点情况传播到函数签名处;
138.如果是返回指令语句,则会从callgraph中取出本函数的调用方,将返回值的污点情况传递给调用方的变量。
139.(6)污点检测分析:
140.如果存在sink点,就通过污点检测模块检测是否存在从source到sink点的污点路径。
141.(7)当调用指令语句和返回指令语句的污点传播分析完毕后,如果本函数内的污点情况有所更新,则再次进行本函数内的数据流分析过程。
142.(8)执行完毕后,输出根据污点检测模块的结果,输出结果。
143.参见图7提供的传统污点分析过程可知,本技术针对目前已有的漏洞,构建了污点分析source点涉及到的关键函数api和基本变量分析;在后续hyperledger fabric平台更新后,如果发现有新的安全漏洞出现,可以根据安全漏洞出现的规则自行添加source点到配置文件中,体现良好的拓展性。
144.同时,传统的静态分析手段都需要基于抽象语法树和中间语言进行,通过收集各种信息提高检测的准确率和降低误报率。由于目前缺乏对go语言转换成中间语言的技术方法,所以大部分对go语言进行静态分析的工具都是基于抽象语法树匹配进行的,因此目前对hyperledger fabric智能合约进行安全检测的工具也采用同样的手段,通过go语言收集更多信息用于安全检测是一大难点。本技术通过利用go语言的ssa中间语言表示库,将智能合约源文件转换成ssa中间语言表示分析,相比抽象语法树分析,能够更好地涵盖源文件的控制流信息、函数调用信息等,从而实现上下文敏感的静态污点分析,减少误报率和漏报率。
145.综上,本技术构建的用于联盟链hyperledger fabric的静态污点分析框架;对智能合约源文件转化成ssa中间语言的构建过程;对ssa中间语言语句进行的数据流分析、构建控制流图和函数调用图的方法;通过上述静态污点分析框架定义的污点传播规则;对上述静态污点分析框架中sink点的污点检测方法;分别对联盟链hyperledger fabric各个安
全漏洞的类别所制定的适用于本框架的漏洞检测规则。使得本技术具有如下有益效果:
146.1.本技术方案具有良好的专用性,本技术方案是为hyperledger fabric联盟链智能合约专门构建的,而目前其他方案都是为以太坊公有链智能合约构建的。如上述所言,由于二者在智能合约开发语言和区块链平台交易流程两大方面存在差异,因此两种检测工具无法通用。
147.2.本技术方案采用上下文敏感的静态污点分析的检测方式,与现有技术方案相比,本方案通过将源文件转化成中间语言后,优点有:1)收集控制流信息、函数调用信息等多个要素用于静态污点分析,结合为每项安全漏洞的检测分别设计了各自的检测规则,提高了检测的精度,使得本方案覆盖的漏洞种类更多,检测效果更好;2)传统的静态污点分析方法在发现source点后,对source点相关的变量进行污点传播分析时,需要再次遍历函数内所有的指令语句,通过枚举各个语句的指令类别分别进行不同的污点传播分析逻辑。而本方案中由于将go语言转化为ssa表示形式时,每个ssa变量都会保存其相关的指令语句,因此只需要将source点变量相关的指令语句得到的新变量进行污点传播即可。该方式在函数内无害指令语句较多时,可以大幅度减少污点传播分析的时间,提高分析效率。
148.3.本技术方案具有良好的拓展性,提供了污点分析配置文件,可以随着hyperledger fabric智能合约api变化,通过更改污点分析配置文件来进行修改和扩展。另外,本框架亦可通过配置文件配置其他敏感api,进行敏感数据泄漏等隐私性安全检测。
149.4.为避免上下文敏感的静态污点分析由于函数间调用过多可能导致的路径爆炸问题,本方案对go语言标准库中的大量相关api进行了人工分析,确定其调用前后的污点变化情况,将其纳入标准库调用结果中,减少检测过程的调用分析,对检测路径进行了剪枝,提高了分析性能。
150.本技术实施例还提供了一种计算机设备(也即电子设备),该计算机设备可以包括处理器、存储器、接收器及发送器,处理器用于执行上述实施例提及的联盟链智能合约的安全漏洞检测方法,其中处理器和存储器可以通过总线或者其他方式连接,以通过总线连接为例。该接收器可通过有线或无线方式与处理器、存储器连接。所述计算机设备与联盟链智能合约的安全漏洞检测装置或者联盟链智能合约的安全漏洞检测装置之间通信连接,以自所述无线多媒体传感器网络中的传感器接收实时运动数据,并自所述视频采集装置接收原始视频序列。
151.处理器可以为中央处理器(central processing unit,cpu)。处理器还可以为其他通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等芯片,或者上述各类芯片的组合。
152.存储器作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序、非暂态计算机可执行程序以及模块,如本技术实施例中的联盟链智能合约的安全漏洞检测方法对应的程序指令/模块。处理器通过运行存储在存储器中的非暂态软件程序、指令以及模块,从而执行处理器的各种功能应用以及数据处理,即实现上述方法实施例中的联盟链智能合约的安全漏洞检测方法。
153.存储器可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至
少一个功能所需要的应用程序;存储数据区可存储处理器所创建的数据等。此外,存储器可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施例中,存储器可选包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至处理器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
154.所述一个或者多个模块存储在所述存储器中,当被所述处理器执行时,执行实施例中的联盟链智能合约的安全漏洞检测方法。
155.在本技术的一些实施例中,用户设备可以包括处理器、存储器和收发单元,该收发单元可包括接收器和发送器,处理器、存储器、接收器和发送器可通过总线系统连接,存储器用于存储计算机指令,处理器用于执行存储器中存储的计算机指令,以控制收发单元收发信号。
156.作为一种实现方式,本技术中接收器和发送器的功能可以考虑通过收发电路或者收发的专用芯片来实现,处理器可以考虑通过专用处理芯片、处理电路或通用芯片实现。
157.作为另一种实现方式,可以考虑使用通用计算机的方式来实现本技术实施例提供的服务器。即将实现处理器,接收器和发送器功能的程序代码存储在存储器中,通用处理器通过执行存储器中的代码来实现处理器,接收器和发送器的功能。
158.本技术实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时以实现前述联盟链智能合约的安全漏洞检测方法的步骤。该计算机可读存储介质可以是有形存储介质,诸如随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、软盘、硬盘、可移动存储盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质。
159.本领域普通技术人员应该可以明白,结合本文中所公开的实施方式描述的各示例性的组成部分、系统和方法,能够以硬件、软件或者二者的结合来实现。具体究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本技术的范围。当以硬件方式实现时,其可以例如是电子电路、专用集成电路(asic)、适当的固件、插件、功能卡等等。当以软件方式实现时,本技术的元素是被用于执行所需任务的程序或者代码段。程序或者代码段可以存储在机器可读介质中,或者通过载波中携带的数据信号在传输介质或者通信链路上传送。
160.需要明确的是,本技术并不局限于上文所描述并在图中示出的特定配置和处理。为了简明起见,这里省略了对已知方法的详细描述。在上述实施例中,描述和示出了若干具体的步骤作为示例。但是,本技术的方法过程并不限于所描述和示出的具体步骤,本领域的技术人员可以在领会本技术的精神后,作出各种改变、修改和添加,或者改变步骤之间的顺序。
161.本技术中,针对一个实施方式描述和/或例示的特征,可以在一个或更多个其它实施方式中以相同方式或以类似方式使用,和/或与其他实施方式的特征相结合或代替其他实施方式的特征。
162.以上所述仅为本技术的优选实施例,并不用于限制本技术,对于本领域的技术人员来说,本技术实施例可以有各种更改和变化。凡在本技术的精神和原则之内,所作的任何
修改、等同替换、改进等,均应包含在本技术的保护范围之内。
再多了解一些

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

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

相关文献