System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及智能合约,尤其涉及一种许可链智能合约漏洞的检测方法、装置、设备及存储介质。
技术介绍
1、为满足企业级区块链应用对通信私密性和数据私密性的需求,许可链被提出并广泛应用,这也标志着区块链 3.0时代的到来。许可链智能合约是一种特殊类型的智能合约,它在区块链网络中使用,并受到预先设定的权限和许可机制的约束,具有高度可控制性、可扩展性、隐私保护和定制化等特性。许可链智能合约与公共区块链上的智能合约不同,许可链智能合约在权限控制方面更加严格,只允许特定的参与者执行、查看或修改合约。
2、目前智能合约的漏洞检测主流方法之一是符号执行技术,通过将符号化变量作为程序的输入,探索程序执行路径并收集路径约束,最后利用约束求解器得到新的测试输入,以测试符号值是否能产生漏洞。符号执行技术能根据程序代码的路径条件为每条可行的路径生成相应的测试用例。因此这种方法面临着复杂路径求解困难、状态爆炸的问题,缺乏针对许可链智能合约的高效专用检测手段。
技术实现思路
1、本申请实施例通过提供一种许可链智能合约漏洞的检测方法、装置、设备及存储介质,解决了现有技术中检测许可链智能合约漏洞的方法存在复杂路径求解困难、状态爆炸的技术问题,实现了提高许可链智能合约漏洞的检测效率,有效缓解路径爆炸问题等技术效果。
2、第一方面,本专利技术实施例提供一种许可链智能合约漏洞的检测方法,包括:
3、获取许可链智能合约的源代码,并根据所述源代码构建程序依赖图;
4、对所述程序
5、对所述切片集进行符号执行处理,得到所述许可链智能合约的漏洞信息。
6、优选的,所述对所述程序依赖图进行切片处理,得到切片集,包括:
7、定义所述程序依赖图的多个关注点,其中,所述多个关注点包括多个第一类关注点、多个第二类关注点和多个第三类关注点,所述多个第一类关注点包括状态变量修改类关注点和指针使用类关注点,所述多个第二类关注点包括事件触发类关注点、资产管理类关注点和函数调用类关注点,所述多个第三类关注点包括权限控制类关注点、核心业务逻辑类关注点和异常处理类关注点;
8、根据每个关注点,对所述程序依赖图建立切点,形成多个切片,进而得到所述切片集,其中,每个切片为仅包含与关注点相关的代码。
9、优选的,所述根据每个关注点,对所述程序依赖图建立切点,形成多个切片,进而得到所述切片集,包括:
10、针对每个第一类关注点,搜索到多个第一目标函数,其中,每个第一目标函数均为出现第一类关注点的语句的函数;
11、在所述每个第一目标函数中,在所述第一目标函数里的第一类关注点首次出现位置建立入口切点,将预先构造的断点函数插入在所述第一目标函数的末尾及所述第一目标函数的return语句之前,得到所述第一目标函数对应的一个第一类切片,进而得到所述每个第一目标函数对应的第一类切片,其中,每个第一类切片为将对应的第一目标函数的中的第一类关注点首次出现位置作为入口,所述对应的第一目标函数的断点函数作为出口的切片;
12、对所述每个第一类关注点进行插入所述断点函数的操作,得到多个第一类切片;
13、针对每个第二类关注点,搜索到第二类关注点的使用位置和所述第二类关注点的语句所在的每个第二目标函数;
14、在所述每个第二目标函数中,将所述第二目标函数的函数头作为入口,所述第二目标函数的return语句为出口,生成一个第二类切片,进而得到所述每个第二目标函数对应的第二类切片;
15、对所述每个第二类关注点进行搜索所述每个第二类关注点的使用位置并切片的操作,得到多个第二类切片;
16、针对每个第三类关注点,搜索到第三类关注点的使用位置和所述第三类关注点的语句所在的每个第三目标函数;
17、在所述每个第三目标函数中,将所述第三目标函数的函数头作为入口,所述第三目标函数的return语句为出口,生成一个第三类切片,进而得到所述每个第三目标函数对应的第三类切片;
18、对所述每个第三类关注点进行搜索所述每个第三类关注点的使用位置并切片的操作,得到多个第三类切片;
19、对每个第一类切片、每个第二类切片和每个第三类切片添加引用函数和模拟函数,得到多个完整可执行切片,进而得到所述切片集。
20、优选的,所述对所述切片集进行符号执行处理,得到所述许可链智能合约的漏洞信息,包括:
21、初始化一个空栈r;
22、将每个切片的根节点压入栈r中;
23、对所述每个切片进行路径探索,得到所述每个切片的探索结果;
24、将所述每个切片的探索结果中的切片路径约束表达式与预设的漏洞路径约束表达式进行对比分析,得到所述每个切片的漏洞信息,进而得到所述许可链智能合约的漏洞信息。
25、优选的,所述对所述每个切片进行路径探索,直到所述栈r的指针为空,得到所述每个切片的探索结果,包括:
26、在每个切片中,通过执行r.pop()函数,得到切片的第一个语句,并开始求解所述切片;
27、在求解所述切片的过程中,在每次遇到所述切片的一个分支点时,通过约束求解器对该分支点的每条分支路径进行探索,得到该分支点对应的两个切片路径约束表达式;
28、如果所述切片的每条分支路径的执行结果为完全执行结果,则输出所述切片中的每个分支点的两个切片路径约束表达式,并将所述切片的每个分支点的两个切片路径约束表达式作为所述切片的探索结果;
29、如果所述切片的某条分支路径的执行结果为执行失败结果,则保存除该路径之外的路径的切片路径约束表达式,并将所述切片中除该路径之外的路径的切片路径约束表达式作为所述切片的探索结果。
30、优选的,合约编译模块201,用于所述根据所述源代码构建程序依赖图,包括:
31、将所述源代码编译为抽象语法树ast=(v,e),其中,v为所述抽象语法树的所有节点的集合,e为所述抽象语法树的所有边的集合;
32、将所述抽象语法树转换为线索语法树ast`=(v`,e`,e0`),v`为所述线索语法树的所有节点的集合,e`为所述线索语法树的所有边的集合,e0`为所述线索语法树根据设定的规则生成的线索边集合;
33、根据所述线索语法树生成所述程序依赖图pdg(vp,ep),vp为所述程序依赖图的所有节点的集合,ep为所述程序依赖图的所有边的集合。
34、优选的,所述根据所述线索语法树生成所述程序依赖图pdg(vp,ep),包括:
35、在获取所述vp中的每个语句节点n后,针对所述vp中的每个语句节点n,如果n为控制节点且n为循环节点,则将n的循环体中的所有语句节点设置为des_nodes;否则,n不是控制节点和循环节点,将n的k-1个子树{t2,...,tk}中的所有语句节点设置为des_nodes;
36、本文档来自技高网...
【技术保护点】
1.一种许可链智能合约漏洞的检测方法,其特征在于,包括:
2.如权利要求1所述的方法,其特征在于,所述对所述程序依赖图进行切片处理,得到切片集,包括:
3.如权利要求2所述的方法,其特征在于,所述根据每个关注点,对所述程序依赖图建立切点,形成多个切片,进而得到所述切片集,包括:
4.如权利要求1所述的方法,其特征在于,所述对所述切片集进行符号执行处理,得到所述许可链智能合约的漏洞信息,包括:
5.如权利要求4所述的方法,其特征在于,所述对所述每个切片进行路径探索,得到所述每个切片的探索结果,包括:
6.如权利要求1所述的方法,其特征在于,所述根据所述源代码构建程序依赖图,包括:
7.如权利要求6所述的方法,其特征在于,所述根据所述线索语法树生成所述程序依赖图PDG(Vp,Ep),包括:
8.一种许可链智能合约漏洞的检测装置,其特征在于,包括:
9.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1-7中
10.一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-7中任一权利要求所述的许可链智能合约漏洞的检测方法步骤。
...【技术特征摘要】
1.一种许可链智能合约漏洞的检测方法,其特征在于,包括:
2.如权利要求1所述的方法,其特征在于,所述对所述程序依赖图进行切片处理,得到切片集,包括:
3.如权利要求2所述的方法,其特征在于,所述根据每个关注点,对所述程序依赖图建立切点,形成多个切片,进而得到所述切片集,包括:
4.如权利要求1所述的方法,其特征在于,所述对所述切片集进行符号执行处理,得到所述许可链智能合约的漏洞信息,包括:
5.如权利要求4所述的方法,其特征在于,所述对所述每个切片进行路径探索,得到所述每个切片的探索结果,包括:
6.如权利要求1所述的方法,其特征在于,所述根据所述源代...
【专利技术属性】
技术研发人员:高建彬,田雯,段立新,李文,夏琦,夏虎,黄野,
申请(专利权)人:电子科技大学深圳高等研究院,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。