System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及计算机网络安全领域,具体涉及一种针对move智能合约的漏洞检测方法及系统。
技术介绍
1、智能合约是一种运行在区块链上的自动化合约,它可以实现多方之间的交易和数据共享。然而,由于智能合约的复杂性和不可逆性,它们容易受到各种漏洞和攻击。因此,智能合约缺陷检测成为了一个关键的研究领域。move语言是一种用于智能合约编程的新型语言,move语言中的智能合约module的源代码通常用高级编程语言编写,这些module经过编译后会生成move字节码,在move虚拟机中执行。区块链用户可以通过发起交易调用已部署的module。
2、针对move智能合约安全分析方法可以分为三大类:形式化方法、静态分析和动态分析。形式化方法主要由move prover代表,它与move语言一同发布,通过规范提取、字节码编译和smt公式生成的多步骤过程验证项目源代码的正确性。第二种方法是movelint,它是唯一可用的静态分析工具,通过将源代码转换为ast并使用预定义的规则识别缺陷。第三种方法是move verifier,它作为move vm的一部分,在执行前检查字节码。
3、中间表示是一种计算机程序的中间形式,用于在不同阶段的编译或分析过程中传递和处理信息,它是源代码和目标代码之间的桥梁,可以帮助编译器和分析工具进行优化、转换和检查。静态代码分析是一种在不执行程序的情况下对代码进行分析的技术,它通过检查代码的结构、语义和属性来发现潜在的问题,如错误、漏洞或不良实践。静态分析通常基于代码的中间表示进行,可以应用于不同层次的程
4、然而,每种方法都存在其各自的优势和局限性,例如形式化方法对规范理解的限制,静态分析工具movelint面临的字节码不兼容和仅本地支持等挑战,以及动态分析方法需要修改虚拟机以支持新缺陷且仅支持已部署module的检查。
技术实现思路
1、本专利技术的目的在于克服现有技术的不足,提供一种针对move智能合约的漏洞检测方法及系统,以实现自动化、支持字节码、支持更多缺陷类型以及高精度的检测。
2、本专利技术的目的是通过以下技术方案来实现的:
3、一种针对move智能合约的漏洞检测方法,包括以下步骤:
4、s1:将move智能合约从基于栈的字节码形式转换成无栈字节码形式,得到move智能合约的中间表示;
5、s2:对move智能合约的中间表示进行代码分析,包括构建控制流图、生成跨智能合约的调用图、构建数据依赖树以及变量范围分析;
6、s3:定义缺陷及缺陷的检测规则,然后基于代码分析提供的元数据接口设计检测器实现缺陷检测,最后生成检测报告。
7、进一步地,所述步骤s1具体包括:
8、s11:对输入的move源代码,使用move编译器进行编译,生成字节码;
9、s12:使用move编译器的字节码解析功能将所有字节码格式的move智能合约解析生成 compiledmodule,每个compiledmodule包括move智能合约的全局变量、结构体定义、函数定义,以及部分源代码的字符串信息;
10、s13:针对compiledmodule中的所有函数,逐个进行中间表示转换,具体过程为:将函数中基于栈的字节码,使用一个临时的栈模拟字节码的运行情况,并定义临时变量记录中间结果,实现基于栈的字节码到无栈字节码的转换。
11、进一步地,所述源代码的字符串信息包括函数名和智能合约名。
12、进一步地,所述构建控制流图具体包括:按照控制流图的定义将move智能合约的中间表示代码划分为多个基本块,每个基本块以第一条指令或跳转指令的目标地址开头,以跳转指令或程序结束指令结尾,生成控制流图。
13、进一步地,所述生成跨智能合约的调用图具体包括:
14、识别中间表示中的所有函数调用指令,根据被调用函数的智能合约是否属于当前智能合约,将函数调用划分为智能合约内函数调用和跨智能合约函数调用;
15、为每个函数创建节点并建立从函数指向被调用函数的有向边来构造智能合约的调用图;
16、将多个智能合约进行关联生成跨智能合约的调用图。
17、进一步地,所述构建数据依赖树具体包括:识别所述move智能合约的中间表示中的变量赋值语句,提取赋值语句左值对赋值语句右值的依赖关系,将每个变量作为一个树节点,节点之间的连线代表依赖关系,从而构建数据依赖树。
18、进一步地,所述变量范围分析具体包括:
19、从所述move智能合约的中间表示中收集所有变量及变量类型,根据变量的类型设置变量的初始合法范围;
20、遍历所述数据依赖树,针对变量间的算数运算关系对变量的范围进一步添加约束条件,所述算数运算关系包括加、减、乘、除、取模、位运算和类型转换。
21、进一步地,所述定义缺陷及缺陷的检测规则具体包括:
22、根据代码质量标准、常见错误模式和项目特定需求三个维度对缺陷进行形式化定义;
23、人工提取已定义的缺陷代码的特征,根据缺陷代码的特征设计缺陷的检测规则,检测规则包括声明使用规则、操作有效性规则、结构条件规则、运算结果规则和函数返回值规则。
24、进一步地,所述基于代码分析提供的元数据接口设计检测器实现缺陷检测,最后生成检测报告,具体包括:
25、遍历代码分析后的代码,提取代码的特征数据;
26、记录特征数据的使用情况;
27、根据预定义的缺陷及缺陷的检测规则分析代码的特征数据,结合特征数据的使用情况识别缺陷;
28、从中间表示层面报告缺陷的位置,并定位缺陷代码在字节码对应的函数。
29、本专利技术还提供一种针对move智能合约的漏洞检测系统,包括:
30、中间表示模块,用于将move智能合约从基于栈的字节码形式转换成无栈字节码形式,得到move智能合约的中间表示;
31、代码分析模块,用于对move智能合约的中间表示进行代码分析,包括构建控制流图、生成跨智能合约的调用图、构建数据依赖树以及变量范围分析;
32、缺陷检测模块,用于定义缺陷及缺陷的检测规则,然后基于代码分析提供的元数据接口设计检测器实现缺陷检测,最后生成检测报告。
33、本专利技术的有益效果是:
34、本专利技术实施例在第一阶段将字节码转换为中间表示,便于有效地提取move智能合约元数据,在第二阶段,构建控制流图和跨智能合约调用图,以便更好地分析涉及跨智能合约调用的缺陷,然后根据构建的数据依赖树及变量范围约束收集检测缺陷所需的元数据,第三阶段,通过设计检测器识别缺陷,生成检测报告。本专利技术支持多种缺陷类型的识别,通过自动化检测方法和设计高精度的检测器,可有效减少智能合约中潜在的漏洞和错误,提高move智能合约安全性分析的效率和准确性,节省人力资源并减少误报率和漏报率。本文档来自技高网...
【技术保护点】
1.一种针对Move智能合约的漏洞检测方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的一种针对Move智能合约的漏洞检测方法,其特征在于:所述步骤S1具体包括:
3.根据权利要求2所述的一种针对Move智能合约的漏洞检测方法,其特征在于:所述源代码的字符串信息包括函数名和智能合约名。
4.根据权利要求1所述的一种针对Move智能合约的漏洞检测方法,其特征在于:所述构建控制流图具体包括:按照控制流图的定义将Move智能合约的中间表示代码划分为多个基本块,每个基本块以第一条指令或跳转指令的目标地址开头,以跳转指令或程序结束指令结尾,生成控制流图。
5.根据权利要求1所述的一种针对Move智能合约的漏洞检测方法,其特征在于:所述生成跨智能合约的调用图具体包括:
6.根据权利要求1所述的一种针对Move智能合约的漏洞检测方法,其特征在于:所述构建数据依赖树具体包括:识别所述Move智能合约的中间表示中的变量赋值语句,提取赋值语句左值对赋值语句右值的依赖关系,将每个变量作为一个树节点,节点之间的连线代表依赖关系,从而构建
7.根据权利要求6所述的一种针对Move智能合约的漏洞检测方法,其特征在于:所述变量范围分析具体包括:
8.根据权利要求1所述的一种针对Move智能合约的漏洞检测方法,其特征在于:所述定义缺陷及缺陷的检测规则具体包括:
9.根据权利要求8所述的一种针对Move智能合约的漏洞检测方法,其特征在于:所述基于代码分析提供的元数据接口设计检测器实现缺陷检测,最后生成检测报告,具体包括:
10.一种针对Move智能合约的漏洞检测系统,其特征在于:包括:
...【技术特征摘要】
1.一种针对move智能合约的漏洞检测方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的一种针对move智能合约的漏洞检测方法,其特征在于:所述步骤s1具体包括:
3.根据权利要求2所述的一种针对move智能合约的漏洞检测方法,其特征在于:所述源代码的字符串信息包括函数名和智能合约名。
4.根据权利要求1所述的一种针对move智能合约的漏洞检测方法,其特征在于:所述构建控制流图具体包括:按照控制流图的定义将move智能合约的中间表示代码划分为多个基本块,每个基本块以第一条指令或跳转指令的目标地址开头,以跳转指令或程序结束指令结尾,生成控制流图。
5.根据权利要求1所述的一种针对move智能合约的漏洞检测方法,其特征在于:所述生成跨智能合约的调用图具体包括:
6.根据权利要求1...
【专利技术属性】
技术研发人员:陈厅,李腾,宋书玮,李经纬,何嘉昊,
申请(专利权)人:电子科技大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。