CN115062312A - 智能合约漏洞检测方法、装置、设备和存储介质 - Google Patents
智能合约漏洞检测方法、装置、设备和存储介质 Download PDFInfo
- Publication number
- CN115062312A CN115062312A CN202210736683.1A CN202210736683A CN115062312A CN 115062312 A CN115062312 A CN 115062312A CN 202210736683 A CN202210736683 A CN 202210736683A CN 115062312 A CN115062312 A CN 115062312A
- Authority
- CN
- China
- Prior art keywords
- function
- intelligent contract
- logic
- virtual machine
- vulnerability detection
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 129
- 230000006870 function Effects 0.000 claims abstract description 310
- 238000000034 method Methods 0.000 claims description 54
- 238000012795 verification Methods 0.000 claims description 36
- 230000008569 process Effects 0.000 claims description 22
- 238000012545 processing Methods 0.000 claims description 15
- 238000004590 computer program Methods 0.000 claims description 14
- 238000004458 analytical method Methods 0.000 claims description 4
- 230000004048 modification Effects 0.000 claims description 3
- 238000012986 modification Methods 0.000 claims description 3
- 238000012546 transfer Methods 0.000 description 34
- 238000004891 communication Methods 0.000 description 11
- 230000007246 mechanism Effects 0.000 description 6
- 230000009471 action Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 5
- 238000012512 characterization method Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 230000002427 irreversible effect Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000006798 recombination Effects 0.000 description 1
- 238000005215 recombination Methods 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/14—Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/566—Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
Abstract
本申请公开了一种智能合约漏洞检测方法、装置、设备和存储介质,涉及区块链领域,该智能合约漏洞检测方法包括:解析智能合约的源代码,得到智能合约的源代码中各个函数的运行逻辑和函数间调用关系;智能合约的源代码包括多个函数;根据虚拟机的函数运行规则,调整函数的运行逻辑,得到函数的新的运行逻辑;根据函数的新的运行逻辑和函数间调用关系生成形式化规则;根据形式化规则进行智能合约的漏洞检测,得到漏洞检测结果;解决了现有智能合约漏洞检测方法的检测精度较低的问题。
Description
技术领域
本申请涉及区块链技术领域,尤其涉及智能合约漏洞检测方法、装置、设备和存储介质。
背景技术
区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链是使用去中心化共识机制去维护一个完整的、分布式的、不可篡改的账本数据库的技术,它能够让区块链中的参与者在无需建立信任关系的前提下实现一个统一的账本系统。在区块链中,以数字化的形式写入智能合约,一个智能合约是一套以数字形式定义的承诺,包括合约参与方可以在上面执行这些承诺的协议。结合智能合约以及区块链技术的特性保障存储、读取、执行整个过程透明可追踪、不可篡改。同时,由区块链自带的共识算法构建出一套状态机系统,使得智能合约能够高效地运行。
由于区块链不可篡改特性,一旦因为程序自身设计的问题,导致智能合约的漏洞,或将产生不可逆转的重大损失。因此,智能合约的漏洞检测至关重要。目前智能合约漏洞检测方法主要采用的是将已出现的漏洞的固有规则编写到软件中,使用软件中的固有规则进行智能合约检测。这种检测方法只能检测已发现的漏洞,检测精度较低。
发明内容
本申请实施例提供智能合约漏洞检测方法、装置、设备和存储介质,解决了现有智能合约漏洞检测方法的检测精度较低的问题。
为实现上述技术目的,本申请实施例采用如下技术方案:
第一方面,本申请实施例提供一种智能合约漏洞检测方法,包括:
解析智能合约的源代码,得到智能合约包括的函数的运行逻辑和函数间调用关系;智能合约的源代码包括多个函数;
根据虚拟机的函数运行规则,调整函数的运行逻辑,得到函数的新的运行逻辑;其中,函数运行规则包括对虚拟机特征进行形式化处理得到的运行规则;虚拟机特征为虚拟机运行函数的过程中影响函数的运行逻辑的特征;函数的新的运行逻辑与函数在虚拟机上的实际运行逻辑相匹配;
根据函数的新的运行逻辑和函数间调用关系生成形式化规则;其中,形式化规则用于规定基于函数的新的运行逻辑运行函数时应满足的运行规则;
根据形式化规则进行智能合约的漏洞检测,得到漏洞检测结果。
本申请实施例中,解析智能合约的源代码中各个函数的运行逻辑和函数间调用关系,并根据虚拟机的函数运行规则,调整函数的运行逻辑,得到函数的新的运行逻辑,使得得到的新的运行逻辑能够符合在虚拟机中的运行实际情况,再基于函数的新的运行逻辑和函数间调用关系生成形式化规则,基于该形式化规则能够模拟智能合约运行,进而实现智能合约的漏洞检测,得到漏洞检测结果,该漏洞检测结果能够表征智能合约在实际运行时是否存在漏洞,无论是已知漏洞类型还是未知漏洞类型均可以检测出,智能合约的漏洞检测精度较高。
在一种实施例中,形式化规则包括形式化逻辑描述和形式化规范描述;形式化逻辑描述表征智能合约包括的函数在虚拟机的运行逻辑,形式化规范描述表征智能合约包括的函数在运行过程中应满足的运行规则;根据形式化规则进行智能合约的漏洞检测,得到漏洞检测结果,包括:
将形式化逻辑描述转换为形式化逻辑代码,以及将形式化规范描述转换为形式化验证规范;
执行形式化逻辑代码,得到执行结果;
根据执行结果以及形式化验证规范,生成漏洞检测结果,漏洞检测结果表征执行结果是否符合形式化验证规范。
在一种实施例中,漏洞检测结果包括智能合约不符合形式化验证规范时对应的漏洞描述;方法还包括:根据漏洞描述修改智能合约的源代码。
在一种实施例中,在根据虚拟机的函数运行规则,调整函数的运行逻辑,得到函数的新的运行逻辑之前,方法还包括:
获取虚拟机特征;
将虚拟机特征进行形式化处理,得到虚拟机的函数运行规则;
将函数运行规则存储到虚拟机形式化特征库。
在一种实施例中,函数对应多个运行逻辑;根据虚拟机的函数运行规则,调整函数的运行逻辑,得到函数的新的运行逻辑,包括:
查询虚拟机形式化特征库,得到函数对应的函数运行规则;
根据函数运行规则对函数的运行逻辑进行拆分和重组,得到函数的新的运行逻辑。
第二方面,本申请实施例提供一种智能合约漏洞检测装置,包括:
解析模块,用于解析智能合约的源代码,得到智能合约包括的函数的运行逻辑和函数间调用关系;智能合约的源代码包括多个函数;
调整模块,用于根据虚拟机的函数运行规则,调整函数的运行逻辑,得到函数的新的运行逻辑;其中,函数运行规则包括对虚拟机特征进行形式化处理得到的运行规则;虚拟机特征为虚拟机运行函数的过程中影响函数的运行逻辑的特征;函数的新的运行逻辑与函数在虚拟机上的实际运行逻辑相匹配;
生成模块,用于根据函数的新的运行逻辑和函数间调用关系生成形式化规则;其中,形式化规则用于规定基于函数的新的运行逻辑运行函数时应满足的运行规则;
检测模块,用于根据形式化规则进行智能合约的漏洞检测,得到漏洞检测结果。
在一种实施例中,形式化规则包括形式化逻辑描述和形式化规范描述;形式化逻辑描述表征智能合约包括的函数在虚拟机的运行逻辑,形式化规范描述表征智能合约包括的函数在运行过程中应满足的运行规则;检测模块,具体用于:
将形式化逻辑描述转换为形式化逻辑代码,以及将形式化规范描述转换为形式化验证规范;
执行形式化逻辑代码,得到执行结果;
根据执行结果以及形式化验证规范,生成漏洞检测结果,漏洞检测结果表征执行结果是否符合形式化验证规范。
在一种实施例中,漏洞检测结果包括智能合约不符合形式化验证规范时对应的漏洞描述;装置还包括修改模块;
修改模块,用于根据漏洞描述修改智能合约的源代码。
在一种实施例中,装置还包括获取模块、处理模块和存储模块;
获取模块,用于在根据虚拟机的函数运行规则,调整函数的运行逻辑,得到函数的新的运行逻辑之前,获取虚拟机特征;
处理模块,用于将虚拟机特征进行形式化处理,得到虚拟机的函数运行规则;
存储模块,用于将函数运行规则存储到虚拟机形式化特征库。
在一种实施例中,函数对应多个运行逻辑;调整模块,具体用于:
查询虚拟机形式化特征库,得到函数对应的函数运行规则;
根据函数运行规则对函数的运行逻辑进行拆分和重组,得到函数的新的运行逻辑。
第三方面,本申请实施例提供一种电子设备,包括:存储器,处理器及存储在存储器上并可在处理器上运行的计算机程序,计算机程序被处理器执行时实现如第一方面的智能合约漏洞检测方法。
第四方面,本申请实施例提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现如第一方面的智能合约漏洞检测方法。
第五方面,本申请提供一种计算机程序产品,当计算机程序产品在计算机上运行时,使得计算机执行如上述第一方面提供的方法。
本申请中第二方面、第三方面、第四方面和第五方面描述的有益效果,可以参考第一方面的有益效果解析,此处不再赘述。
附图说明
图1为本申请实施例提供的一种智能合约漏洞检测方法的应用场景示意图;
图2为本申请实施例提供的一种智能合约漏洞检测方法的流程示意图;
图3为本申请实施例提供的一种函数间调用关系示意图;
图4为本申请实施例提供的另一种智能合约漏洞检测方法的流程示意图;
图5为本申请实施例提供的另一种智能合约漏洞检测方法的流程示意图;
图6为本申请实施例提供的一种智能合约漏洞检测装置的结构示意图;
图7为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将详细描述本申请的各个方面的特征和示例性实施例,为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及具体实施例,对本申请进行进一步详细描述。应理解,此处所描述的具体实施例仅被配置为解释本申请,并不被配置为限定本申请。对于本领域技术人员来说,本申请可以在不需要这些具体细节中的一些细节的情况下实施。下面对实施例的描述仅仅是为了通过示出本申请的示例来提供对本申请更好的理解。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序;也不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本实施例的描述中,除非另有说明,“多个”的含义是两个或两个以上。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
目前主要采用的智能合约漏洞检测方法有两种,一种是将已出现的漏洞提取出固有的运行规则编写到软件中,使用软件进行智能合约漏洞检测,另一种是人工检测,通过人工查看智能合约逻辑,判断是否存在漏洞。但是第一种方法只能检测已发现的漏洞,检测能力有限,检测精度较低。第二种方法效率很低,且检测精度受限于检测人员能力。
综上所述,现有的智能合约漏洞检测方法精度较低。
为了解决上述技术问题,本申请实施例考虑到智能合约运行在虚拟机中时,会根据虚拟机的自身规则改变智能合约的运行逻辑,导致出现意料外的漏洞,提供一种智能合约漏洞检测方法,该方法包括:解析智能合约的源代码中各个函数的运行逻辑和函数间调用关系,并根据虚拟机的函数运行规则,调整函数的运行逻辑,得到函数的新的运行逻辑,使得得到的新的运行逻辑能够符合在虚拟机中的运行实际情况,再基于函数的新的运行逻辑和函数间调用关系生成形式化规则,基于该形式化规则能够模拟智能合约运行,进而实现智能合约的漏洞检测,得到漏洞检测结果,该漏洞检测结果能够表征智能合约在实际运行时是否存在漏洞,无论是已知漏洞类型还是未知漏洞类型均可以检测出,智能合约的漏洞检测精度较高。
本申请所述的智能合约漏洞检测方法将形式化验证方法运用到智能合约漏洞检测中。其中形式化验证方法是使用数学的公式、定理和系统来验证一个系统的功能正确性和安全属性,与传统检测方法相比,形式化验证方法可以发现目标与系统描述的不一致性问题,因此使用形式化验证方法来验证智能合约,可以有效的检验智能合约的安全性,检测智能合约是否存在漏洞。
本申请实施例提供的智能合约漏洞检测方法的执行主体可以是计算机、服务器等具有数据处理能力的电子设备。其中,服务器可以是单独的一个服务器,或者,也可以是由多个服务器构成的服务器集群。部分实施方式中,服务器集群还可以是分布式集群。本申请对该智能合约漏洞检测方法的执行主体不作限制。下面以执行主体为服务器为例进行介绍。
参照图1,为本申请实施例提供的一种智能合约漏洞检测方法的应用场景示意图,如图1所示,本申请实施例提供的智能合约漏洞检测方法的服务器与虚拟机集群通信连接,该虚拟机集群包括至少一台虚拟机。该服务器能够基于上述通信连接从虚拟机集群中获取到虚拟机特征。并且该服务器中存储有智能合约的源代码(或者称为智能合约或者智能合约代码)。示例性的,该智能合约的源代码可以包括用于实现账户A和账户B之间交易的函数(比如转账函数)以及约定账户A和账户B之间的交易规则。该服务器可以结合虚拟机特征对智能合约包括的函数的运作逻辑进行检查,并根据检测结果更新/调整智能合约(比如更新/调整智能合约中函数的运行逻辑),使得更新后的智能合约中函数的运行逻辑与函数在虚拟机上的实际运行逻辑相匹配,利用更新后的智能合约实现本申请实施例提供的智能合约漏洞检测方法。
图2示出了本申请一个实施例提供的智能合约漏洞检测方法的流程示意图。如图2所示,该方法可以包括以下步骤:
S210,解析智能合约的源代码,得到智能合约的源代码中各个函数的运行逻辑和函数间调用关系。
其中,智能合约是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约的源代码包括多个函数。通过解析智能合约的源代码,能够得到智能合约的源代码中各个函数的运行逻辑和函数间调用关系。
其中函数的运行逻辑可以指函数运行时按照时序应执行的过程/步骤,函数间调用关系可以用于表征函数间的先后调用顺序等,如果两个函数之间存在先后调用关系,则表征一个函数需要调用另一个函数才能正常执行。如图3所示,函数间调用关系可以用函数调用关系图标识,智能合约包括A、B和C三个函数,A和C之间存在调用关系,表征在运行函数C时需要调用函数A,即函数C的运行依赖函数A。B和C之间存在调用关系,表征在运行函数C时需要调用函数B,即函数C的运行依赖函数B。A和B之间不存在调用关系,表征函数B与函数A独立运行,互不依赖。
S220,根据虚拟机的函数运行规则,调整函数的运行逻辑,得到函数的新的运行逻辑。
其中,函数运行规则包括对虚拟机特征进行形式化处理得到的运行规则。虚拟机特征是指在虚拟机运行智能合约的运行过程中,会影响智能合约运行逻辑的特征。需要说明的是,本申请实施例中,虚拟机运作智能合约可以理解为虚拟机运行智能合约的源代码包括的函数,智能合约运行逻辑可以指智能合约的源代码包括的函数的运行逻辑。
进一步地,函数运行规则包含了函数特征以及函数特征对应的调整规则,当智能合约中的函数符合上述函数特征时,则按照该函数特征对应的调整规则调整函数的运行逻辑。
例如,假设虚拟机为太坊虚拟机(Embedded Virtual Machine,EVM),智能合约包括的函数为转账函数,转账函数的运行逻辑为转账操作,EVM在执行智能合约的转账函数进行转账操作时,触发智能合约的回调(fallback)机制,又称回调函数,导致智能合约的转账函数的运行逻辑发生变化,在转账的同时还执行回调操作,这种情况下,fallback机制即可以是一种虚拟机特征。
在一种实施例中,可以预先通过对虚拟机特征进行形式化处理,得到函数运行规则,并将函数运行规则集中存储到虚拟机形式化数据库中,得到虚拟机形式化特征库。基于该虚拟机形式化特征库,可以实现函数运行规则的高效获取。函数运行规则的生成过程可以参照下述图5对应的实施例中所述。
其中,根据函数运行规则调整函数的运行逻辑,得到函数的新的运行逻辑能与智能合约在虚拟机中的实际运行逻辑相匹配,比如二者是一致的/相同的。如此,使得虚拟机在基于该新的运行逻辑进行智能合约的漏洞检测,的过程中,不会对智能合约的运行逻辑造成影响,检测精度较高。
示例性的,根据虚拟机的函数运行规则调整函数的运行逻辑可以通过对函数的原有运行逻辑拆分和重组,或者新增运行逻辑等方式实现。
例如,EVM有一个漏洞叫重入攻击漏洞,是指当第一智能合约向第二智能合约转账的时候,第二智能合约通过回调第一智能合约的函数进行二次转账。现在假设第一智能合约包括一个转账函数,用于账户M向账户N转账。该转账函数分3步:第一步判断转账金额是否大于账户M的余额;第二步调用系统函数给账户N转账(账户N为第二智能合约对应的账户);第三步从账户M余额扣除转账金额。进一步地,查询EVM形式化特征库,发现EVM有个特性:当智能合约账户收到款时,会自动触发该智能合约的回调函数,因此在这个例子中,当账户M通过第一智能合约转账给第二智能合约对应的账户N的时候,EVM会触发第二智能合约的回调函数,该回调函数可以调用第一智能合约的转账函数,导致二次转账。这种情况下的函数运行规则包含了一个转账特征以及对应的调整规则,也就是当第一智能合约包括转账操作,与函数运行规则中的转账特征匹配,这时需要对第一智能合约的转账逻辑进行拆分和重组。在这个例子中,拆分就是将第一步、第二步操作与第三步拆开,重组就是加入了第二智能合约回调的功能,重组后第一智能合约的转账过程就变成了第一步,第二步,第一步,第二步,第三步,第三步的情况。如果第一步,第二步,第三步对应的函数为第一函数,则重组后转账函数的执行过程变成第一步,第二步,第一函数,第三步。
这个例子中,虚拟机形式化特征库的作用是用来调整智能合约的函数的运行逻辑。调整函数的运行逻辑得到的函数新的运行逻辑,更加符合智能合约在虚拟机里运行的情况。基于该新的运行逻辑进行智能合约的漏洞检测,检测精度较高。
S230,根据函数的新的运行逻辑和函数间调用关系生成形式化规则。
其中,智能合约的两个组成部分包括各个函数的运行逻辑和函数间调用关系。基于函数的新的运行逻辑和函数间调用关系能够生成新的智能合约,将该新的智能合约进行形式化处理,即可生成形式化规则。
进一步地,形式化规则包括形式化逻辑描述和形式化规范描述;形式化逻辑描述表征智能合约在虚拟机的运行逻辑,例如表征EVM的合约转账操作引起的fallback调用逻辑插入原有的合约逻辑中后形成的运行逻辑。基于该形式化逻辑描述,在后续进行形式化验证时即可发现合约转账操作是否存在错误。形式化规范描述表征智能合约在运行过程中应满足的运行规则,例如,合约在运行过程中总金额不变,单账户余额不能为零等。根据函数的新的运行逻辑和函数间调用关系能够生成形式化规则。
S240,根据形式化规则进行智能合约的漏洞检测,得到漏洞检测结果。
其中,基于该形式化规则能够模拟智能合约运行,进而实现智能合约的漏洞检测,得到漏洞检测结果,该漏洞检测结果能够表征智能合约在实际运行时是否存在漏洞。
进一步地,如图4所示,在一种实施例中,S240:根据形式化规则进行智能合约的漏洞检测,得到漏洞检测结果,可以包括:
S2401,将形式化逻辑描述转换为形式化逻辑代码,以及将形式化规范描述转换为形式化验证规范。
S2402,执行形式化逻辑代码,得到执行结果。
S2403,根据执行结果以及形式化验证规范,生成漏洞检测结果,漏洞检测结果表征执行结果是否符合形式化验证规范。
其中,可以将形式化逻辑描述转换为可以执行的形式化逻辑代码。将形式化规范描述转换为形式化验证规范。该形式化逻辑代码是基于数学的描述,能够在专有的形式化验证工具中运行。常用的形式化验证工具有TLA+、Scyther等。形式化验证规范是指形式化验证工具在执行形式化逻辑代码时的限定条件。基于该限定条件和形式化逻辑代码的执行结果的匹配情况,即可确定是否存在漏洞,以及漏洞具体情况。
比如如果形式化逻辑代码的执行结果满足限定条件,则不存在漏洞,表征形式化逻辑代码的执行结果符合形式化验证规范;反之,如果形式化逻辑代码的执行结果不满足限定条件,则存在漏洞,表征形式化逻辑代码的执行结果不符合形式化验证规范。
本申请实施例中,通过解析智能合约的源代码中各个函数的运行逻辑和函数间调用关系,并根据虚拟机的函数运行规则,调整函数的运行逻辑,得到函数的新的运行逻辑,使得得到的新的运行逻辑能够符合在虚拟机中的运行实际情况,再基于函数的新的运行逻辑和函数间调用关系生成形式化规则,基于该形式化规则能够模拟智能合约运行,进而实现智能合约的漏洞检测,得到漏洞检测结果,该漏洞检测结果能够表征智能合约在实际运行时是否存在漏洞,无论是已知漏洞类型还是未知漏洞类型均可以检测出,智能合约的漏洞检测精度较高。
在一种实施例中,如果漏洞检测结果包括智能合约不符合形式化验证规范时对应的漏洞描述;该方法还可以包括:根据漏洞描述修改智能合约的源代码。
其中,漏洞描述指明了智能合约的源代码产生漏洞的原因,基于该漏洞描述能够修改智能合约的源代码。本申请实施例中,修改智能合约的源代码可以指修改智能合约中执行结果与形式化规范不符合的函数的相关参数,比如修改该函数的初始化参数、行为列表中的行为参数等等。
例如,智能合约包括转账函数,该转账函数用于将从A转账给B、C,其中初始化参数为A有100元,B、C有0元,行为列表为:付款,参数有两个:目的账户,转账金额,转账金额类型为整数,整数取值范围为0到255。假设形式化规范为:总金额不变即总金额为100,账户余额不能为负,则形式化规范表示为A+B+C=100∩A>=0∩B>=0∩C>=0。在执行转账行为时,由于转账金额取值范围为0到255,转账函数会执行A给B或C转账0元,1元,…,255元。假设转账函数的执行结果为A为99,B为1,C为0,符合形式化验证规范A+B+C=100∩A>=0∩B>=0∩C>=0。假设转账函数的执行结果为A为99,B为1,C为1,A+B+C≠100,则检查结果不符合形式化规范;此时,则需要修改智能合约的源代码。
本申请实施例中,根据漏洞描述修改智能合约的源代码,能够消除智能合约的源代码漏洞,提升智能合约的源代码安全性。
在一种实施例中,如图5所示,在S220:根据虚拟机的函数运行规则,调整函数的运行逻辑,得到函数的新的运行逻辑之前,该方法还可以包括:
S250,获取虚拟机特征。
其中,可以通过与虚拟机服务器通信连接,基于该通信连接获取虚拟机特征。虚拟机是指智能合约的运行环境。不同的虚拟机具备不同的虚拟机特征。虚拟机特征是指在智能合约运行过程中会影响智能合约运行逻辑的特征,例如,EVM在执行合约转账操作时触发合约的fallback机制会导致合约的执行逻辑发生变化,这种情况下,fallback机制即可以是一种虚拟机特征。
S260,将虚拟机特征进行形式化处理,得到函数运行规则。
其中,可以通过形式化方法将虚拟机特征进行形式化处理,进而得到函数运行规则。形式化方法在逻辑科学中是指分析、研究思维形式结构的方法。它把各种具有不同内容的思维形式(主要是命题和推理)加以比较,找出其中各个部分相互联结的方式,如命题中包含概念彼此间的联结,推理中则是各个命题之间的联结,抽取出它们共同的形式结构;再引入表达形式结构的符号语言,用符号与符号之间的联系表达命题或推理的形式结构。通过形式化方法,能够将虚拟机特征转化为函数运行规则。
S270,将函数运行规则存储到虚拟机形式化特征库。
其中,将虚拟机特征进行形式化处理,既可得到函数运行规则。再将函数运行规则存储在函数运行规则的一类数据库,即虚拟机形式化特征库中。
本申请实施例中,预先生成函数运行规则,并可将函数运行规则存储到虚拟机形式化特征库,从虚拟机形式化特征库可以直接获取函数运行规则。函数运行规则可以用于调整智能合约中函数的运行逻辑,以使调整后得到的新的运行逻辑符合智能合约在虚拟机中运行的真实情况,进而提升智能合约的漏洞检测精度。
图1-图5描述了智能合约漏洞检测方法,下面结合附图6和附图7描述本申请实施例提供的装置。为了实现上述功能,智能合约漏洞检测装置包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
本申请实施例可以根据上述方法,示例性的对智能合约漏洞检测装置进行功能模块的划分。智能合约漏洞检测装置可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
图6示出了本申请一个实施例提供的智能合约漏洞检测装置的结构示意图,图6所示装置中各模块具有实现图2中各个步骤的功能,并能达到其相应技术效果。如图6所示,该装置可以包括:
解析模块610,用于解析智能合约的源代码,得到智能合约包括的函数的运行逻辑和函数间调用关系。智能合约的源代码包括多个函数。
调整模块620,用于根据虚拟机的函数运行规则,调整函数的运行逻辑,得到函数的新的运行逻辑。其中,函数运行规则包括对虚拟机特征进行形式化处理得到的运行规则。虚拟机特征为虚拟机运行函数的过程中影响函数的运行逻辑的特征。函数的新的运行逻辑与函数在虚拟机上的实际运行逻辑相匹配。
生成模块630,用于根据函数的新的运行逻辑和函数间调用关系生成形式化规则。其中,形式化规则用于规定基于函数的新的运行逻辑运行函数时应满足的运行规则。
检测模块640,用于根据形式化规则进行智能合约的漏洞检测,得到漏洞检测结果。
本申请实施例中,通过解析智能合约的源代码中各个函数的运行逻辑和函数间调用关系,并根据虚拟机的函数运行规则,调整函数的运行逻辑,得到函数的新的运行逻辑,使得得到的新的运行逻辑能够符合在虚拟机中的运行实际情况,再基于函数的新的运行逻辑和函数间调用关系生成形式化规则,基于该形式化规则能够模拟智能合约运行,进而实现智能合约的漏洞检测,得到漏洞检测结果,该漏洞检测结果能够表征智能合约在实际运行时是否存在漏洞,无论是已知漏洞类型还是未知漏洞类型均可以检测出,智能合约的漏洞检测精度较高。
在一种实施例中,形式化规则包括形式化逻辑描述和形式化规范描述。形式化逻辑描述表征智能合约包括的函数在虚拟机的运行逻辑,形式化规范描述表征智能合约包括的函数在运行过程中应满足的运行规则。检测模块640,具体用于:
将形式化逻辑描述转换为形式化逻辑代码,以及将形式化规范描述转换为形式化验证规范。
执行形式化逻辑代码,得到执行结果。
根据执行结果以及形式化验证规范,生成漏洞检测结果,漏洞检测结果表征执行结果是否符合形式化验证规范。
在一种实施例中,漏洞检测结果包括智能合约不符合形式化验证规范时对应的漏洞描述。装置还包括修改模块。
修改模块,用于根据漏洞描述修改智能合约的源代码。
在一种实施例中,装置还包括获取模块、处理模块和存储模块。
获取模块,用于在根据虚拟机的函数运行规则,调整函数的运行逻辑,得到函数的新的运行逻辑之前,获取虚拟机特征。
处理模块,用于将虚拟机特征进行形式化处理,得到虚拟机的函数运行规则。
存储模块,用于将函数运行规则存储到虚拟机形式化特征库。
在一种实施例中,函数对应多个运行逻辑。调整模块620,具体用于:
查询虚拟机形式化特征库,得到函数对应的函数运行规则。
根据函数运行规则对函数的运行逻辑进行拆分和重组,得到函数的新的运行逻辑。
本申请实施例中,通过解析智能合约的源代码中各个函数的运行逻辑和函数间调用关系,并根据虚拟机的函数运行规则,调整函数的运行逻辑,得到函数的新的运行逻辑,使得得到的新的运行逻辑能够符合在虚拟机中的运行实际情况,再基于函数的新的运行逻辑和函数间调用关系生成形式化规则,基于该形式化规则能够模拟智能合约运行,进而实现智能合约的漏洞检测,得到漏洞检测结果,该漏洞检测结果能够表征智能合约在实际运行时是否存在漏洞,无论是已知漏洞类型还是未知漏洞类型均可以检测出,智能合约的漏洞检测精度较高。
图7示出了本申请一个实施例提供的电子设备的结构示意图。如图7所示,该设备可以包括处理器701以及存储有计算机程序指令的存储器702。
具体地,上述处理器701可以包括中央处理器(Central Processing Unit,CPU),或者特定集成电路(Application Specific Integrated Circuit,ASIC),或者可以被配置成实施本申请实施例的一个或多个集成电路。
存储器702可以包括用于数据或指令的大容量存储器。举例来说而非限制,存储器702可包括硬盘驱动器(Hard Disk Drive,HDD)、软盘驱动器、闪存、光盘、磁光盘、磁带或通用串行总线(Universal Serial Bus,USB)驱动器或者两个或更多个以上这些的组合。在一个实例中,存储器702可以包括可移除或不可移除(或固定)的介质,或者存储器702是非易失性固态存储器。存储器702可在综合网关容灾设备的内部或外部。
在一个实例中,存储器702可以是只读存储器(Read Only Memory,ROM)。在一个实例中,该ROM可以是掩模编程的ROM、可编程ROM(PROM)、可擦除PROM(EPROM)、电可擦除PROM(EEPROM)、电可改写ROM(EAROM)或闪存或者两个或更多个以上这些的组合。
处理器701通过读取并执行存储器702中存储的计算机程序指令,以实现图2所示实施例中的方法,并达到图2所示实例执行其方法达到的相应技术效果,为简洁描述在此不再赘述。
在一个示例中,该电子设备还可包括通信接口703和总线710。其中,如图7所示,处理器701、存储器702、通信接口703通过总线710连接并完成相互间的通信。
通信接口703,主要用于实现本申请实施例中各模块、装置、单元和/或设备之间的通信。
总线710包括硬件、软件或两者,将在线数据流量计费设备的部件彼此耦接在一起。举例来说而非限制,总线可包括加速图形端口(Accelerated Graphics Port,AGP)或其他图形总线、增强工业标准架构(Extended Industry Standard Architecture,EISA)总线、前端总线(Front Side Bus,FSB)、超传输(Hyper Transport,HT)互连、工业标准架构(Industry Standard Architecture,ISA)总线、无限带宽互连、低引脚数(LPC)总线、存储器总线、微信道架构(MCA)总线、外围组件互连(PCI)总线、PCI-Express(PCI-X)总线、串行高级技术附件(SATA)总线、视频电子标准协会局部(VLB)总线或其他合适的总线或者两个或更多个以上这些的组合。在合适的情况下,总线710可包括一个或多个总线。尽管本申请实施例描述和示出了特定的总线,但本申请考虑任何合适的总线或互连。
该电子设备可以执行本申请实施例中的智能合约漏洞检测方法,从而实现图2描述的智能合约漏洞检测方法的相应技术效果。
另外,结合上述实施例中的智能合约漏洞检测方法,本申请实施例可提供一种计算机存储介质来实现。该计算机存储介质上存储有计算机程序指令;该计算机程序指令被处理器执行时实现上述实施例中的任意一种智能合约漏洞检测方法。
在示例性的实施例中,本申请实施例还提供了一种计算机程序产品,当计算机程序产品在计算机上运行时,使得计算机实现上述实施例中的智能合约漏洞检测方法。
通过以上实施方式的描述,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是一个物理单元或多个物理单元,即可以位于一个地方,或者也可以分布到多个不同地方。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上内容,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何在本申请揭露的技术范围内的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (12)
1.一种智能合约漏洞检测方法,其特征在于,包括:
解析智能合约的源代码,得到所述智能合约包括的函数的运行逻辑和函数间调用关系;所述智能合约的源代码包括多个函数;
根据虚拟机的函数运行规则,调整所述函数的运行逻辑,得到所述函数的新的运行逻辑;其中,所述函数运行规则包括对虚拟机特征进行形式化处理得到的运行规则;所述虚拟机特征为所述虚拟机运行所述函数的过程中影响所述函数的运行逻辑的特征;所述函数的新的运行逻辑与所述函数在所述虚拟机上的实际运行逻辑相匹配;
根据所述函数的新的运行逻辑和所述函数间调用关系生成形式化规则;其中,所述形式化规则用于规定基于所述函数的新的运行逻辑运行所述函数时应满足的运行规则;
根据所述形式化规则进行所述智能合约的漏洞检测,得到漏洞检测结果。
2.如权利要求1所述的智能合约漏洞检测方法,其特征在于,所述形式化规则包括形式化逻辑描述和形式化规范描述;所述形式化逻辑描述表征所述智能合约包括的函数在虚拟机的运行逻辑,所述形式化规范描述表征所述智能合约包括的函数在运行过程中应满足的运行规则;所述根据所述形式化规则进行智能合约的漏洞检测,得到漏洞检测结果,包括:
将所述形式化逻辑描述转换为形式化逻辑代码,以及将所述形式化规范描述转换为形式化验证规范;
执行所述形式化逻辑代码,得到执行结果;
根据所述执行结果以及所述形式化验证规范,生成漏洞检测结果,所述漏洞检测结果表征所述执行结果是否符合所述形式化验证规范。
3.如权利要求2所述的智能合约漏洞检测方法,其特征在于,所述漏洞检测结果包括所述智能合约不符合所述形式化验证规范时对应的漏洞描述;
所述方法还包括:根据所述漏洞描述修改所述智能合约的源代码。
4.如权利要求1-3任一项所述的智能合约漏洞检测方法,其特征在于,在根据虚拟机的函数运行规则,调整所述函数的运行逻辑,得到所述函数的新的运行逻辑之前,所述方法还包括:
获取所述虚拟机特征;
将所述虚拟机特征进行形式化处理,得到所述虚拟机的函数运行规则;
将所述函数运行规则存储到虚拟机形式化特征库。
5.如权利要求4所述的智能合约漏洞检测方法,其特征在于,所述函数对应多个运行逻辑;所述根据虚拟机的函数运行规则,调整所述函数的运行逻辑,得到所述函数的新的运行逻辑,包括:
查询所述虚拟机形式化特征库,得到所述函数对应的函数运行规则;
根据所述函数运行规则对所述函数的运行逻辑进行拆分和重组,得到所述函数的新的运行逻辑。
6.一种智能合约漏洞检测装置,其特征在于,包括:
解析模块,用于解析智能合约的源代码,得到所述智能合约包括的函数的运行逻辑和函数间调用关系;所述智能合约的源代码包括多个函数;
调整模块,用于根据虚拟机的函数运行规则,调整所述函数的运行逻辑,得到所述函数的新的运行逻辑;其中,所述函数运行规则包括对虚拟机特征进行形式化处理得到的运行规则;所述虚拟机特征为所述虚拟机运行所述函数的过程中影响所述函数的运行逻辑的特征;所述函数的新的运行逻辑与所述函数在所述虚拟机上的实际运行逻辑相匹配;
生成模块,用于根据所述函数的新的运行逻辑和所述函数间调用关系生成形式化规则;其中,所述形式化规则用于规定基于所述函数的新的运行逻辑运行所述函数时应满足的运行规则;
检测模块,用于根据所述形式化规则进行所述智能合约的漏洞检测,得到漏洞检测结果。
7.如权利要求6所述的智能合约漏洞检测装置,其特征在于,所述形式化规则包括形式化逻辑描述和形式化规范描述;所述形式化逻辑描述表征所述智能合约包括的函数在虚拟机的运行逻辑,所述形式化规范描述表征所述智能合约包括的函数在运行过程中应满足的运行规则;所述检测模块,具体用于:
将所述形式化逻辑描述转换为形式化逻辑代码,以及将所述形式化规范描述转换为形式化验证规范;
执行所述形式化逻辑代码,得到执行结果;
根据所述执行结果以及所述形式化验证规范,生成漏洞检测结果,所述漏洞检测结果表征所述执行结果是否符合所述形式化验证规范。
8.如权利要求7所述的智能合约漏洞检测装置,其特征在于,所述漏洞检测结果包括所述智能合约不符合所述形式化验证规范时对应的漏洞描述;所述装置还包括修改模块;
所述修改模块,用于根据所述漏洞描述修改所述智能合约的源代码。
9.如权利要求6-8任一项所述的智能合约漏洞检测装置,其特征在于,所述装置还包括获取模块、处理模块和存储模块;
所述获取模块,用于在根据虚拟机的函数运行规则,调整所述函数的运行逻辑,得到所述函数的新的运行逻辑之前,获取所述虚拟机特征;
所述处理模块,用于将所述虚拟机特征进行形式化处理,得到所述虚拟机的函数运行规则;
所述存储模块,用于将所述函数运行规则存储到虚拟机形式化特征库。
10.根据权利要求9所述的智能合约漏洞检测装置,其特征在于,所述函数对应多个运行逻辑;所述调整模块,具体用于:
查询所述虚拟机形式化特征库,得到所述函数对应的函数运行规则;
根据所述函数运行规则对所述函数的运行逻辑进行拆分和重组,得到所述函数的新的运行逻辑。
11.一种电子设备,其特征在于,包括:存储器,处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如权利要求1至5中任一项所述的智能合约漏洞检测方法。
12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至5中任一项所述的智能合约漏洞检测方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210736683.1A CN115062312A (zh) | 2022-06-27 | 2022-06-27 | 智能合约漏洞检测方法、装置、设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210736683.1A CN115062312A (zh) | 2022-06-27 | 2022-06-27 | 智能合约漏洞检测方法、装置、设备和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115062312A true CN115062312A (zh) | 2022-09-16 |
Family
ID=83202177
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210736683.1A Pending CN115062312A (zh) | 2022-06-27 | 2022-06-27 | 智能合约漏洞检测方法、装置、设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115062312A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116541852A (zh) * | 2023-06-26 | 2023-08-04 | 中国移动紫金(江苏)创新研究院有限公司 | 基于区块链的智能合约虚拟机安全加固方法及其系统 |
-
2022
- 2022-06-27 CN CN202210736683.1A patent/CN115062312A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116541852A (zh) * | 2023-06-26 | 2023-08-04 | 中国移动紫金(江苏)创新研究院有限公司 | 基于区块链的智能合约虚拟机安全加固方法及其系统 |
CN116541852B (zh) * | 2023-06-26 | 2023-09-12 | 中国移动紫金(江苏)创新研究院有限公司 | 基于区块链的智能合约虚拟机安全加固方法及其系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20190386834A1 (en) | Blockchain management apparatus, blockchain management method, and program | |
CN111311255A (zh) | 一种基于预言机的智能合约形式化验证和纠错方法 | |
CN111290958B (zh) | 一种调试智能合约的方法及装置 | |
CN111475355B (zh) | 高速链路信号完整性评估方法、系统、终端及存储介质 | |
CN110851352A (zh) | 一种模糊测试系统及终端设备 | |
CN115062312A (zh) | 智能合约漏洞检测方法、装置、设备和存储介质 | |
US20110225559A1 (en) | Logic verifying apparatus, logic verifying method, and medium | |
CN112948233A (zh) | 一种接口测试方法、装置、终端设备及介质 | |
CN111782526A (zh) | 一种接口测试方法、装置、电子设备及存储介质 | |
CN104603791A (zh) | 签名验证装置及签名验证方法和程序 | |
WO2024001929A1 (zh) | 智能合约漏洞检测方法、装置和设备 | |
CN112363939A (zh) | 快速生成模糊测试网络协议模板的方法及系统、设备 | |
Zhu et al. | Formal verification of solidity contracts in event-b | |
US11665165B2 (en) | Whitelist generator, whitelist evaluator, whitelist generator/evaluator, whitelist generation method, whitelist evaluation method, and whitelist generation/evaluation method | |
CN114282221B (zh) | 注入类漏洞检测方法、系统、终端及存储介质 | |
CN112015826B (zh) | 基于区块链的智能合约安全性检测方法及相关设备 | |
CN112380541A (zh) | 智能合约的漏洞的检测方法、装置及计算机设备 | |
CN114116337A (zh) | 基于pcie链路配置的硬盘测试方法、系统、终端及存储介质 | |
CN111639028A (zh) | 一种对账规则脚本测试方法、装置、引擎及存储介质 | |
CN112702737A (zh) | 基于云计算和5g互联的信息解析方法及信息解析系统 | |
CN110349025B (zh) | 一种基于未花费交易输出的合约资产防遗失方法及装置 | |
US9363276B2 (en) | Method and system for testing and validation of cryptographic algorithms | |
CN117931303A (zh) | 组件的状态管理方法、装置、设备及存储介质 | |
Höller et al. | Automatized high-level evaluation of security properties for RTL hardware designs | |
CN115033882A (zh) | 补丁程序的风险确定方法及装置、存储介质、电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |