一种提高智能合约检测覆盖率的方法、电子设备及存储介质

文档序号:32055871发布日期:2022-11-04 21:22阅读:59来源:国知局
一种提高智能合约检测覆盖率的方法、电子设备及存储介质

1.本发明属于以太坊智能合约安全技术领域,具体涉及一种提高智能合约检测覆盖率的方法、电子设备及存储介质。


背景技术:

2.近年来,以太坊因创造性地将智能合约部署到区块链而迅速发展,其总市值成为仅次于比特币的第二大加密货币。智能合约是可以在区块链上执行的图灵完备程序。它允许在不同的匿名方之间执行受信任的事务和协议,而不需要第三方。这些交易和协议是可追溯的、不可逆的、透明的。因此,智能合约被广泛的用来管理有价值的数字资产。
3.然而,由于图灵完备性,solidity发展时间较短,相对于传统的编程语言而言更容易出错,这使得智能合约成为区块链安全中最薄弱的环节之一。另外,在区块链中引入智能合约的目的是利用区块链特征来保证智能合约的可信性,但由于智能合约存在漏洞,会违反这些特征,使其失去意义。为了解决这个问题,以太坊发生了硬分叉,不仅造成了经济上的损失,还引发了关于区块链不可变性的巨大争议。因此,在智能合约部署上链之前,安全检测尤其必要。
4.目前已经提出了一些用于测试智能合约漏洞的工具,在这些工具中使用的一种重要方法是模糊测试。与符号执行相比,模糊测试可扩展且高效。模糊测试依赖于运行时信息,目前先进的工具如contractfuzzer、sfuzz等均使用了模糊测试技术,其以发展成为智能合约测试和漏洞检测的主流技术。虽然现有的智能合约模糊测试器在漏洞检测方面取得了很大进展,但是没有考虑程序中的数据流,随机的改变输入参数,不能有效地满足深度嵌套约束等难以覆盖的条件语句,这导致了较低的检测效率和分支覆盖率,使得深层次的条件分支难以覆盖。更严重的是,如果智能合约模糊测试器不能检查这些难以覆盖的条件语句,它们可能为对手提供机会注入漏洞,然后在智能合约部署后发起攻击


技术实现要素:

5.本发明要解决的问题是现有智能合约检测工具分支覆盖率低的问题,本发明提出一种提高智能合约检测覆盖率的方法、电子设备及存储介质,基于动态污点分析的高效的、有针对性的突变方法,解决分支覆盖率低的问题。
6.为实现上述目的,本发明通过以下技术方案实现:
7.一种提高智能合约检测覆盖率的方法,包括如下步骤:
8.s1、利用智能合约的字节码和abi作为输入;
9.s2、生成测试用例:根据步骤s1的abi生成多笔交易,每笔交易调用智能合约中的一个函数,其中交易涉及的函数的输入参数随机生成,将多笔交易组合,生成函数的调用序列,即为测试用例;
10.s3、执行智能合约的模糊测试:根据步骤s2生成的测试用例执行智能合约的字节码,设初始的种子集为空,一个测试用例执行到一个新的分支时将该测试用例添加到种子
集中,对于未被覆盖的分支,将距离未覆盖分支距离最近的测试用例添加到种子集中,其中距离的定义利用绝对距离,并执行步骤s4的动态污点分析;
11.s4、动态污点分析:采用智能合约中calldataload指令作为污点源,识别步骤s2中包括的函数的输入参数,将每个函数的输入参数标记为污点,并存储污点信息;定义污点的传播策略,并在执行智能合约的模糊测试过程中跟踪污点的传播,并记录执行路径上遇到的分支语句中包含的污点信息;对于执行智能合约的模糊测试过程中未覆盖的分支语句设为污点汇识别并记录语句中包含的污点信息;
12.s5、选择被突变的输入参数:定义智能合约模糊测试过程中被突变输入参数的选择策略,并根据步骤s4动态污点分析的结果寻找被突变的输入参数集合,若存在,则该输入参数集合被突变,若不存在突变的输入参数集合,则根据记录的执行路径上所遇到的分支语句中包含的污点信息以及未覆盖分支中包含的污点信息,将分支中涉及的污点中包括的输入参数取并集,作为被突变的输入参数集合;
13.s6、根据步骤s5得到的被突变的输入参数集合突变种子集中对应该分支所保存的测试用例中涉及的函数输入参数,固定其他的输入参数,减少无效突变,突变种子集中的测试用例,突变的策略遵循afl设定;
14.s7、根据步骤s6得到的突变的测试用例集执行智能合约,进行模糊测试;
15.s8、重复步骤s4到s7的过程,直到模糊测试过程达到预设的时间或满足所有的分支。
16.进一步的,步骤s1中若提供了智能合约的源代码,则将智能合约的源代码编译为字节码和abi。
17.进一步的,步骤s4中calldataload指令从交易的数据部分读取函数的参数并压入堆栈的顶部,其操作数为该参数在数据中的偏移量,将该指令作为污点源,当程序执行到该指令时,向程序中引入污点,采用key-value的形式存储污点信息,key为堆栈顶部的位置,value为输入参数的偏移量,使用value来区分不同的输入参数。
18.进一步的,步骤s4中定义污点的传播策略的具体实现方法包括如下步骤:
19.s4.1、根据以太坊虚拟机中stack、memory和storage不同的数据存储类型,将其命名为污点信息1,污点信息2,污点信息3,为了描述污点的传播过程,考虑污点在不同的数据存储类型中的传播,对三个不同键-值对结构存储污点信息进行维护;
20.s4.2、采用过污染的污点传播策略,当指令的操作数中存在污点数据时,将操作结果标记为污点数据,污点标记为操作数拥有的标记;
21.s4.3、当调用pop指令,污点数据从stack中移除出去,则污点数据对应的污点信息删除。
22.进一步的,步骤s4中动态污点分析具体实现方法包括如下步骤:
23.s4.4、将jumpi指令定义为污点汇;
24.s4.5、检测流入条件的污点信息,然后将涉及的输入参数的污点信息存储到键-值对的数据结构中,命名为jumpi污点信息,该数据结构的键是jumpi指令对应的程序计数器,值是流入该分支条件中涉及的污点集合;
25.s4.6、保存位于同一函数中的分支语句的依赖关系,用来对需要突变的输入参数进行筛选,命名为支配污点信息,该数据结构的键是jumpi指令对应的程序计数器,值是执
行路径上涉及的程序计数器的集合。
26.进一步的,步骤s5定义智能合约模糊测试过程中被突变输入参数的选择策略的具体实现方法包括如下步骤:
27.s5.1、根据步骤s4动态污点分析的结果,找到未覆盖分支语句中包含的输入参数集合,记为q,即q为以当前指令的程序计数器为键所对应的jumpi污点信息中的值;
28.s5.2、根据步骤s4动态污点分析的结果,找到执行路径上涉及的全部条件语句,记为p,即p为以当前指令的程序计数器为键所对应的支配污点信息中的值,并对p中包括的语句中包含的输入参数取并集,记为n,即n为以p中包括的程序计数器为键所对应的jumpi污点信息中值的并集;
29.s5.3、定义输入参数选择的突变策略为选择突变的输入参数集合为q\n,改变不在n中的输入参数并固定在n中的输入参数,减少无效的突变。
30.进一步的,步骤s5中被突变的输入参数集合为q∪n。
31.电子设备,包括存储器和处理器,存储器存储有计算机程序,所述的处理器执行所述计算机程序时实现所述的一种提高智能合约检测覆盖率的方法的步骤。
32.计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现所述的一种提高智能合约检测覆盖率的方法。
33.本发明的有益效果:
34.本发明所述的一种提高智能合约检测覆盖率的方法,提出一种结合以太坊虚拟机特征的动态污点分析方法,并以此根据提出的输入参数选择策略实现对智能合约函数的输入参数选择,通过覆盖更多的难以满足的分支约束,执行更多的合约代码来降低现有模糊测试器的误报率。本发明的检测基于智能合约的字节码层面,因此既可以检测提供源码的智能合约又可以检测提供字节码的智能合约。本发明能够被应用在智能合约安全审计领域,针对现有智能合约开发不规范容易发生漏洞的情况,为开发和测试人员提供一种指导,检测编写的合约是否存在安全风险,对提高智能合约以至于区块链的安全性有着至关重要的作用。
附图说明
35.图1为本发明所述的一种提高智能合约检测覆盖率的方法的流程示意图。
具体实施方式
36.为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及具体实施方式,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施方式仅用以解释本发明,并不用于限定本发明,即所描述的具体实施方式仅仅是本发明一部分实施方式,而不是全部的具体实施方式。通常在此处附图中描述和展示的本发明具体实施方式的组件可以以各种不同的配置来布置和设计,本发明还可以具有其他实施方式。
37.因此,以下对在附图中提供的本发明的具体实施方式的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定具体实施方式。基于本发明的具体实施方式,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他具体实施方式,都属于本发明保护的范围。
38.为能进一步了解本发明的发明内容、特点及功效,兹例举以下具体实施方式,并配合附图1详细说明如下:
39.具体实施方式一:
40.一种提高智能合约检测覆盖率的方法,包括如下步骤:
41.s1、利用智能合约的字节码和abi作为输入;
42.进一步的,步骤s1中若提供了智能合约的源代码,则将智能合约的源代码编译为字节码和abi;
43.s2、生成测试用例:根据步骤s1的abi生成多笔交易,每笔交易调用智能合约中的一个函数,其中交易涉及的函数的输入参数随机生成,将多笔交易组合,生成函数的调用序列,即为测试用例;
44.s3、执行智能合约的模糊测试:根据步骤s2生成的测试用例执行智能合约的字节码,设初始的种子集为空,一个测试用例执行到一个新的分支时将该测试用例添加到种子集中,对于未被覆盖的分支,将距离未覆盖分支距离最近的测试用例添加到种子集中,其中距离的定义利用绝对距离,并执行步骤s4的动态污点分析;
45.s4、动态污点分析:采用智能合约中calldataload指令作为污点源,识别步骤s2中包括的函数的输入参数,将每个函数的输入参数标记为污点,并存储污点信息;定义污点的传播策略,并在执行智能合约的模糊测试过程中跟踪污点的传播,并记录执行路径上遇到的分支语句中包含的污点信息;对于执行智能合约的模糊测试过程中未覆盖的分支语句设为污点汇识别并记录语句中包含的污点信息;
46.进一步的,步骤s4中calldataload指令从交易的数据部分读取函数的参数并压入堆栈的顶部,其操作数为该参数在数据中的偏移量,将该指令作为污点源,当程序执行到该指令时,向程序中引入污点,采用key-value的形式存储污点信息,key为堆栈顶部的位置,value为输入参数的偏移量,使用value来区分不同的输入参数;
47.进一步的,步骤s4中定义污点的传播策略的具体实现方法包括如下步骤:
48.s4.1、根据以太坊虚拟机中stack、memory和storage不同的数据存储类型,将其命名为污点信息1,污点信息2,污点信息3,为了描述污点的传播过程,考虑污点在不同的数据存储类型中的传播,对三个不同键-值对结构存储污点信息进行维护;
49.s4.2、采用过污染的污点传播策略,当指令的操作数中存在污点数据时,将操作结果标记为污点数据,污点标记为操作数拥有的标记;
50.s4.3、当调用pop指令,污点数据从stack中移除出去,则污点数据对应的污点信息删除;
51.污点信息的数据结构如表1所示:
52.表1污点信息的数据结构
[0053][0054]
进一步的,以太坊虚拟机(evm)为智能合约程序提供了三种不同类型的存储,即stack、memory和storage。stack存储函数的局部变量;memory主要用于执行过程中较大数据的临时内存;storage是唯一持久性的存储,它将状态变量存储在智能合约中。由于evm存储的特性,动态污点分析需要考虑污点信息跨stack、memory和storage的问题。为了精确描述污点的传播过程,需考虑污点在不同类型存储中的传播,为此,需维护三个不同键-值对结构存储污点信息。evm定义了约142个字节码,每个字节码拥有各自不同的操作,在污点传播的过程中使用一种过污染的污点传播策略,即当指令的操作数中存在污点数据时,将操作结果也标记为污点数据,污点标记为操作数拥有的标记。注意,由于指令的操作数可能不止一个,每个污点操作数的污点标记也可能互不相同,结果的污点标记可以累积(拥有多个污点标记);
[0055]
进一步的,步骤s4中动态污点分析具体实现方法包括如下步骤:
[0056]
s4.4、将jumpi指令定义为污点汇;
[0057]
s4.5、检测流入条件的污点信息,然后将涉及的输入参数的污点信息存储到键-值对的数据结构中,命名为jumpi污点信息,该数据结构的键是jumpi指令对应的程序计数器,值是流入该分支条件中涉及的污点集合;
[0058]
s4.6、保存位于同一函数中的分支语句的依赖关系,用来对需要突变的输入参数进行筛选,命名为支配污点信息,该数据结构的键是jumpi指令对应的程序计数器,值是执行路径上涉及的程序计数器的集合;
[0059]
表2存储选择参数时所需污点信息的数据结构
[0060][0061]
进一步的,在evm字节码中,jumpi指令用于执行条件的判断,因此一旦调用了jumpi指令,这意味着当前程序将执行到条件语句,故将此指令定义为污点汇;
[0062]
s5、选择被突变的输入参数:定义智能合约模糊测试过程中被突变输入参数的选择策略,并根据步骤s4动态污点分析的结果寻找被突变的输入参数集合,若存在,则该输入参数集合被突变,若不存在突变的输入参数集合,则根据记录的执行路径上所遇到的分支语句中包含的污点信息以及未覆盖分支中包含的污点信息,将分支中涉及的污点中包括的输入参数取并集,作为被突变的输入参数集合;
[0063]
进一步的,步骤s5定义智能合约模糊测试过程中被突变输入参数的选择策略的具
体实现方法包括如下步骤:
[0064]
s5.1、根据步骤s4动态污点分析的结果,找到未覆盖分支语句中包含的输入参数集合,记为q,即q为以当前指令的程序计数器为键所对应的jumpi污点信息中的值;
[0065]
s5.2、根据步骤s4动态污点分析的结果,找到执行路径上涉及的全部条件语句,记为p,即p为以当前指令的程序计数器为键所对应的支配污点信息中的值,并对p中包括的语句中包含的输入参数取并集,记为n,即n为以p中包括的程序计数器为键所对应的jumpi污点信息中值的并集;
[0066]
s5.3、定义输入参数选择的突变策略为选择突变的输入参数集合为q\n,改变不在n中的输入参数并固定在n中的输入参数,减少无效的突变;
[0067]
进一步的,步骤s5中被突变的输入参数集合为q∪n;
[0068]
s6、根据步骤s5得到的被突变的输入参数集合突变种子集中对应该分支所保存的测试用例中涉及的函数输入参数,固定其他的输入参数,减少无效突变,突变种子集中的测试用例,突变的策略遵循afl设定;
[0069]
s7、根据步骤s6得到的突变的测试用例集执行智能合约,进行模糊测试;
[0070]
s8、重复步骤s4到s7的过程,直到模糊测试过程达到预设的时间或满足所有的分支。
[0071]
本发明提出一种结合以太坊虚拟机特征的动态污点分析方法,并以此根据提出的输入参数选择策略实现对智能合约函数的输入参数选择,通过覆盖更多的难以满足的分支约束,执行更多的合约代码来降低现有模糊测试器的误报率。本发明的检测基于智能合约的字节码层面,因此既可以检测提供源码的智能合约又可以检测提供字节码的智能合约。本发明能够被应用在智能合约安全审计领域,针对现有智能合约开发不规范容易发生漏洞的情况,为开发和测试人员提供一种指导,检测编写的合约是否存在安全风险,对提高智能合约以至于区块链的安全性有着至关重要的作用。
[0072]
具体实施方式二:
[0073]
电子设备,其特征在于,包括存储器和处理器,存储器存储有计算机程序,所述的处理器执行所述计算机程序时实现具体实施方式一所述的一种提高智能合约检测覆盖率的方法的步骤。
[0074]
本发明的计算机装置可以是包括有处理器以及存储器等装置,例如包含中央处理器的单片机等。并且,处理器用于执行存储器中存储的计算机程序时实现上述的基于creo软件的可修改由关系驱动的推荐数据的推荐方法的步骤。
[0075]
所称处理器可以是中央处理单元(central processing unit,cpu),还可以是其他通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现成可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
[0076]
所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器可以包括
高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(smart media card,smc),安全数字(secure digital,sd)卡,闪存卡(flash card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
[0077]
具体实施方式三:
[0078]
计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现具体实施方式一所述的一种提高智能合约检测覆盖率的方法。
[0079]
本发明的计算机可读存储介质可以是被计算机装置的处理器所读取的任何形式的存储介质,包括但不限于非易失性存储器、易失性存储器、铁电存储器等,计算机可读存储介质上存储有计算机程序,当计算机装置的处理器读取并执行存储器中所存储的计算机程序时,可以实现上述的基于creo软件的可修改由关系驱动的建模数据的建模方法的步骤。
[0080]
所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
[0081]
需要说明的是,术语“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0082]
虽然在上文中已经参考具体实施方式对本技术进行了描述,然而在不脱离本技术的范围的情况下,可以对其进行各种改进并且可以用等效物替换其中的部件。尤其是,只要不存在结构冲突,本技术所披露的具体实施方式中的各项特征均可通过任意方式相互结合起来使用,在本说明书中未对这些组合的情况进行穷举性的描述仅仅是出于省略篇幅和节约资源的考虑。因此,本技术并不局限于文中公开的特定具体实施方式,而是包括落入权利要求的范围内的所有技术方案。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1