智能合约安全漏洞检测方法、检测系统、计算机系统及存储介质

摘要: 本申请涉及计算机,尤其涉及一种智能合约安全漏洞检测方法、检测系统、计算机系统及存储介质。背景技术:1、随着区块链技术的快速发展和广泛应用,智能合约作为区块链应用...
智能合约安全漏洞检测方法、检测系统、计算机系统及存储介质

本申请涉及计算机,尤其涉及一种智能合约安全漏洞检测方法、检测系统、计算机系统及存储介质。

背景技术:

1、随着区块链技术的快速发展和广泛应用,智能合约作为区块链应用的核心组件,其安全性问题日益突出。智能合约作为区块链生态的核心资产管理组件,其部署后不可篡改、执行结果不可逆的特性,使其漏洞风险远高于传统软件,这些漏洞直接关联源代码中复杂的语义依赖关系,对验证方法的深度提出了更高要求,

2、相关技术方案中,目前常用的采用算法进行智能合约验证方法,主要包括静态分析和动态分析。静态分析通过预设规则库扫描语法与数据流,识别已知的语法层面问题,但无法捕捉预设规则库中设置以外的问题;动态分析如模糊测试等能够在一定程度上覆盖语义层面的漏洞,但其识别可靠性还需要进一步改进。

3、鉴于此,本申请提出一种新的智能合约漏洞验证方法,旨在实现对智能合约在语义层面的可靠检测。

技术实现思路

1、本申请的主要目的在于提供一种智能合约安全漏洞检测方法,旨在解决如何对智能合约在语义层面进行可靠检测的问题。

2、为实现上述目的,本申请提供的一种智能合约安全漏洞检测方法,所述方法包括:

3、s10,将待测智能合约源代码编译为抽象语法树,根据所述抽象语法树构建控制流图,根据所述抽象语法树和所述控制流图构建程序依赖图;

4、s20,提取所述程序依赖图中与预设特定变量相关的第一代码片段,与预设特定控制流相关的第二代码片段,以及第一代码片段和第二代码片段的并集构成的第三代码片段;

5、s30,基于所述第一代码片段、所述第二代码片段和所述第三代码片段构成优化程序依赖图,将所述优化程序依赖图中的节点和边转换为datalog事实;

6、s40,基于所述datalog事实对所述待测智能合约源代码进行检测,生成检测结果并输出。

7、可选地,所述s10包括:

8、s11,将所述待测智能合约源代码编译为六元组表示的抽象语法树:

9、

10、式中,是非终端节点的有限集;是终端节点的有限集;m表示表示抽象语法树中全部节点的有限集;是节点属性的有限集;是根节点;是一个映射函数;是一个映射函数;

11、s12,选取所述抽象语法树中的非终端节点的有限集n和终端节点的有限集e,构建得到有向图形式的控制流图:

12、

13、s13,根据所述抽象语法树中的节点之间的使用信息,确定数据依赖边集合,以及基于所述控制流图中语句之间的执行顺序约束,确定控制依赖边集合:

14、s14根据控制依赖边集合和程序依赖边集合的并集,构建程序依赖图:

15、。

16、可选地,所述预设特定变量包括外部输入和/或不可信数据源,所述预设特定控制流包括调用敏感操作函数和/或调用安全关键函数。

17、可选地,所述s20之前,还包括:

18、s50,确定所述第一代码片段、所述第二代码片段和所述第三代码片段对应的切片缩减率和/或关键信息保留率;

19、s60,当各个代码片段的切片缩减率均大于预设切片缩减率阈值,和/或各个代码片段的关键信息保留率均大于预设关键信息保留率阈值时,执行步骤s20。

20、可选地,所述s40包括:

21、s41,确定datalog事实中,满足预设datalog规则的目标语义特征和目标依赖关系,根据所述目标语义特征和所述目标依赖关系确定目标漏洞类型;

22、s42,调用所述目标漏洞类型对应的目标切片策略,基于所述目标切片策略提取所述datalog事实中的漏洞代码片段。

23、可选地,所述目标漏洞类型包括重入漏洞和整数溢出漏洞,目标切片策略包括数据依赖切片策略、控制依赖切片策略和混合切片策略,所述s42包括:

24、s421,当所述目标漏洞类型为重入漏洞时,调用所述控制依赖切片策略作为目标切片策略,以提取所述程序依赖图中满足所述控制依赖切片策略的切片片段作为所述漏洞代码片段;

25、s422,当所述目标漏洞类型为整数溢出漏洞时,调用所述数据依赖切片策略作为目标切片策略,以提取所述程序依赖图中满足所述数据依赖切片策略的切片片段作为所述漏洞代码片段;

26、s423,当所述目标漏洞类型为重入漏洞和/或整数溢出漏洞时,调用所述混合切片策略作为目标切片策略,以提取所述程序依赖图中满足所述混合切片策略的切片片段作为所述漏洞代码片段。

27、此外,为实现上述目的,本申请还提供一种智能合约安全漏洞检测系统,所述智能合约安全漏洞检测系统包括:

28、语义依赖模型,用于将待测智能合约源代码编译为抽象语法树,根据所述抽象语法树构建控制流图,根据所述抽象语法树和所述控制流图构建程序依赖图;

29、漏洞检测模型,用于提取所述程序依赖图中与预设特定变量相关的第一代码片段,与预设特定控制流相关的第二代码片段,以及第一代码片段和第二代码片段的并集构成的第三代码片段;基于所述第一代码片段、所述第二代码片段和所述第三代码片段构成优化程序依赖图,将所述优化程序依赖图中的节点和边转换为datalog事实;基于所述datalog事实对所述待测智能合约源代码进行检测,生成检测结果并输出。

30、此外,为实现上述目的,本申请还提供一种计算机系统,所述计算机系统包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如上任一项所述的智能合约安全漏洞检测方法的步骤。

31、此外,为实现上述目的,本申请还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上任一项所述的智能合约安全漏洞检测方法的步骤。

32、本申请至少具备以下有益效果:

33、将智能合约源代码解析为抽象语法树并构建成表示合约中的数据依赖和控制依赖关系的程序依赖图,基于程序依赖图的边和节点转换为datalog事实,从而定义形式化的安全漏洞检测对象,基于datalog事实执行形式化的安全监测,识别满足漏洞规则的检测结果,生成可验证的安全证明或漏洞证据,实现对智能合约在语义层面的可靠检测。

1.一种智能合约安全漏洞检测方法,其特征在于,所述智能合约安全漏洞检测方法包括以下步骤:

2.如权利要求1所述的智能合约安全漏洞检测方法,其特征在于,所述s10包括:

3.如权利要求1所述的智能合约安全漏洞检测方法,其特征在于,所述预设特定变量包括外部输入和/或不可信数据源,所述预设特定控制流包括调用敏感操作函数和/或调用安全关键函数。

4.如权利要求1所述的智能合约安全漏洞检测方法,其特征在于,所述s20之前,还包括:

5.如权利要求1所述的智能合约安全漏洞检测方法,其特征在于,所述s40包括:

6.如权利要求5所述的智能合约安全漏洞检测方法,其特征在于,所述目标漏洞类型包括重入漏洞和整数溢出漏洞,目标切片策略包括数据依赖切片策略、控制依赖切片策略和混合切片策略,所述s42包括:

7.一种智能合约安全漏洞检测系统,其特征在于,所述智能合约安全漏洞检测系统包括:

8.一种计算机系统,其特征在于,所述计算机系统包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如权利要求1至6中任一项所述的智能合约安全漏洞检测方法的步骤。

9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至6中任一项所述的智能合约安全漏洞检测方法的步骤。