CN112015826A - 基于区块链的智能合约安全性检测方法及相关设备 - Google Patents
基于区块链的智能合约安全性检测方法及相关设备 Download PDFInfo
- Publication number
- CN112015826A CN112015826A CN202011161073.0A CN202011161073A CN112015826A CN 112015826 A CN112015826 A CN 112015826A CN 202011161073 A CN202011161073 A CN 202011161073A CN 112015826 A CN112015826 A CN 112015826A
- Authority
- CN
- China
- Prior art keywords
- parameter
- target
- chain
- initial
- intelligent contract
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
-
- 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/60—Protecting data
- G06F21/64—Protecting data integrity, e.g. using checksums, certificates or signatures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q40/00—Finance; Insurance; Tax strategies; Processing of corporate or income taxes
- G06Q40/04—Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Business, Economics & Management (AREA)
- Finance (AREA)
- Data Mining & Analysis (AREA)
- Accounting & Taxation (AREA)
- Computer Hardware Design (AREA)
- General Health & Medical Sciences (AREA)
- Software Systems (AREA)
- Bioethics (AREA)
- Health & Medical Sciences (AREA)
- Computing Systems (AREA)
- Development Economics (AREA)
- Economics (AREA)
- Marketing (AREA)
- Strategic Management (AREA)
- Technology Law (AREA)
- General Business, Economics & Management (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开提供了一种基于区块链的智能合约安全性检测方法及装置、计算机可读存储介质、电子设备。该方法包括:获取目标智能合约及其文件大小;获得从目标智能合约中的各个函数;获取并记录各个函数的初阶参数变化关系;根据各个函数的初阶参数变化关系中的至少两个参数之间的变化关系生成初阶参数变化链;根据文件大小获取目标智能合约中的目标参数名;在初阶参数变化链中遍历目标参数名,根据目标参数名确定初阶参数变化链的追踪正确性,以获得目标智能合约的安全性检测结果。本公开实施例提供的技术方案可以正确地追踪待上传至目标区块链的目标智能合约的参数变化过程,保证最终上传至目标区块链的目标智能合约的安全性。
Description
技术领域
本公开涉及计算机技术领域,具体而言,涉及一种基于区块链的智能合约安全性检测方法及装置、计算机可读存储介质和电子设备。
背景技术
随着区块链技术的发展,区块链技术应用到越来越多的领域中。例如,在金融领域、信息安全、计算资源共享、娱乐、社交、供应链管理或医疗等领域均得到了广泛应用。
其中,区块链是分布式数据存储、点对对传输、共识机制、加密算法等计算机技术的新型应用模式。作为可编程区块链,它的主要特点是允许用户写出精密和智能的协议,也就是所谓的智能合约。
智能合约是根据特定条件自动执行的合约程序,是用户与区块链进行交互,利用区块链实现业务逻辑的重要途径。例如,各家机构可以通过区块链上的智能合约存储和共享信息,还可以基于接收到的请求、获取到的信息或预先存储的信息,在达到一定条件时,触发智能合约,执行相应的步骤,以实现该请求对应的业务处理功能。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约相对传统合约能自动执行原定协议,减少其他交易成本。
但是,由于区块链上的智能合约是所有用户都能看见的,并且一旦部署无法篡改,所以如果智能合约本身存在漏洞,那么就可能被人发现并进行攻击。很明显,如何检测智能合约的安全性已经成为区块链应用开发者关心的问题。
需要说明的是,在上述背景技术部分公开的信息仅用于加强对本公开的背景的理解。
发明内容
本公开实施例提供一种基于区块链的智能合约安全性检测方法及装置、计算机可读存储介质、电子设备,能够解决上述相关技术中存在的如何检测待部署至区块链上的智能合约的安全性的技术问题。
本公开的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本公开的实践而习得。
本公开实施例提供一种基于区块链的智能合约安全性检测方法,所述方法包括:获取待上传至目标区块链的目标智能合约及其文件大小;对所述目标智能合约进行合约解析与函数提取处理,以获得从所述目标智能合约中解析并提取出的各个函数;对从所述目标智能合约中解析并提取出的各个函数进行参数解析处理以及参数变化关系分析处理,以获取并记录所述目标智能合约中各个函数的初阶参数变化关系,其中,每个函数的初阶参数变化关系包括至少两个参数之间的变化关系;根据所述目标智能合约中各个函数的初阶参数变化关系中的至少两个参数之间的变化关系生成所述目标智能合约的初阶参数变化链;根据所述目标智能合约的文件大小获取所述目标智能合约中的目标参数名;在所述初阶参数变化链中遍历所述目标智能合约中的目标参数名,根据所述目标参数名确定所述初阶参数变化链的追踪正确性,以获得所述目标智能合约的安全性检测结果。
本公开实施例提供一种基于区块链的智能合约安全性检测装置,所述装置包括:目标智能合约信息获取单元,用于获取待上传至目标区块链的目标智能合约及其文件大小;目标智能合约解析提取单元,用于对所述目标智能合约进行合约解析与函数提取处理,以获得从所述目标智能合约中解析并提取出的各个函数;初阶参数变化关系获取单元,用于对从所述目标智能合约中解析并提取出的各个函数进行参数解析处理以及参数变化关系分析处理,以获取并记录所述目标智能合约中各个函数的初阶参数变化关系,其中,每个函数的初阶参数变化关系包括至少两个参数之间的变化关系;初阶参数变化链生成单元,用于根据所述目标智能合约中各个函数的初阶参数变化关系中的至少两个参数之间的变化关系生成所述目标智能合约的初阶参数变化链;目标参数名获取单元,用于根据所述目标智能合约的文件大小获取所述目标智能合约中的目标参数名;智能合约检测结果获得单元,用于在所述初阶参数变化链中遍历所述目标智能合约中的目标参数名,根据所述目标参数名确定所述初阶参数变化链的追踪正确性,以获得所述目标智能合约的安全性检测结果。
本公开实施例提供了一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现如上述实施例中所述的基于区块链的智能合约安全性检测方法。
本公开实施例提供了一种电子设备,包括:至少一个处理器;存储装置,配置为存储至少一个程序,当所述至少一个程序被所述至少一个处理器执行时,使得所述至少一个处理器实现如上述实施例中所述的基于区块链的智能合约安全性检测方法。
根据本申请的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述实施例的各种可选实现方式中提供的方法。
在本公开的一些实施例所提供的技术方案中,一方面,在将目标智能合约部署至目标区块链之前,获取该目标智能合约及该目标智能合约的文件大小,然后对该目标智能合约进行合约解析与函数提取处理,以获得从该目标智能合约中解析并提取出的各个函数;再对从该目标智能合约中解析并提取出的各个函数进行参数解析处理和参数变化关系分析处理,获取并记录该目标智能合约中各个函数的初阶参数变化关系,其中每个初阶参数变化关系中包括至少两个参数之间的变化关系,从而在追踪目标智能合约中的参数时,可以提供细颗粒度的数据变化过程(参数层面),通过记录目标智能合约中的函数的参数变化信息(这里的初阶参数变化关系),方便以后查询使用;另一方面,还可以根据该目标智能合约中各个函数的初阶参数变化关系中的至少两个参数之间的变化关系生成该目标智能合约的初阶参数变化链,并进一步可以通过该目标智能合约的文件大小获取该目标智能合约中的目标参数名,从而可以通过在该初阶参数变化链中遍历该目标参数名,并根据该目标参数名来确定该初阶参数变化链的追踪正确性,最终获得该目标智能合约的安全性检测结果,实现了验证该目标智能合约的安全性的目的,保证最终部署到目标区块链上的目标智能合约是安全的,不易于被攻击,提高了使用该目标区块链的应用的安全性。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1示意性示出了根据本公开的一实施例的基于区块链的智能合约安全性检测方法的流程图。
图2是本公开实施例提供的基于区块链的智能合约安全性检测方法应用于区块链***的一个可选的结构示意图。
图3是本公开实施例提供的区块结构一个可选的示意图。
图4示意性示出了根据本公开的另一实施例的基于区块链的智能合约安全性检测方法的流程图。
图5示意性示出了根据本公开的一实施例的初阶目标编程语言的版本信息示意图。
图6示意性示出了根据本公开的一实施例的确定关联参数变化关系和无关参数变化关系的示意图。
图7示意性示出了根据本公开的一实施例的确定关联参数变化关系的示意图。
图8示意性示出了根据本公开的一实施例的基于区块链的智能合约安全性检测装置的框图。
图9示出了适于用来实现本公开实施例的电子设备的结构示意图。
具体实施方式
现在将参考附图更全面地描述示例实施例。然而,示例实施例能够以多种形式实施,且不应被理解为限于在此阐述的实施例;相反,提供这些实施例使得本公开将全面和完整,并将示例实施例的构思全面地传达给本领域的技术人员。在图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。
本公开所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施方式中。在下面的描述中,提供许多具体细节从而给出对本公开的实施方式的充分理解。然而,本领域技术人员将意识到,可以实践本公开的技术方案而省略特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知方法、装置、实现或者操作以避免模糊本公开的各方面。
附图仅为本公开的示意性图解,图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。附图中所示的一些方框图不一定必须与物理或逻辑上独立的实体相对应。可以采用软件形式来实现这些功能实体,或在至少一个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和步骤,也不是必须按所描述的顺序执行。例如,有的步骤还可以分解,而有的步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。
本说明书中,用语“一个”、“一”、“该”、“所述”和“至少一个”用以表示存在至少一个要素/组成部分/等;用语“包含”、“包括”和“具有”用以表示开放式的包括在内的意思并且是指除了列出的要素/组成部分/等之外还可存在另外的要素/组成部分/等;用语“第一”、“第二”和“第三”等仅作为标记使用,不是对其对象的数量限制。
下面结合附图对本公开示例实施方式进行详细说明。
图1示意性示出了根据本公开的一实施例的基于区块链的智能合约安全性检测方法的流程图。如图1所示,本公开实施例提供的方法可以包括以下步骤。
在步骤S110中,获取待上传至目标区块链的目标智能合约及其文件大小。
本公开实施例中,目标区块链可以是基于开源代码或者开源代码二次开发后使用的任意一种类型的区块链,例如可以是公有链、私有链或者联盟链等中的任意一种。可以根据实际应用场景选择相应的区块链作为目标区块链。
其中,公有链中的任何节点都是向任何人开放的,每个人都可以参与到这个区块链中进行计算,而且任何人都可以下载获得完整区块链数据(全部账本)。公有链最大的优点就是去中心化和安全性。但是这么多随意出入的节点是很难达成共识的,因为有些节点可能随时宕机,黑客也可能伪造很多虚假的节点。所以,公有链有一套很严格的共识机制,因此公有链最大的问题就是共识问题,共识问题直接导致了公有链处理数据的速度问题。
有些区块链的应用场景下,并不希望这个***任何人都可以参与,任何人都可以查看所有数据,只有被许可的节点才可以参与并且查看所有数据,这种区块链结构称为私有链。私有链可以完全自己定制策略,因此速度极快。相比较而言,私有链不具备去中心化。
私有链能够防止机构内单节点故意隐瞒或者篡改数据,即使发生错误,也能够迅速发现来源。因此许多大型金融机构更加倾向于使用私有链技术。例如仅限在一个金融、审计机构内的用户访问和交易。
因为需要保密的行业和应用也不需要公有链公开透明的特性,联盟链应运而生,联盟链仅限于联盟成员,因其只针对成员开放全部或部分功能,所以联盟链上的读写权限、以及记账规则都按联盟规则来“私人定制”。
联盟链只针对特定某个群体的成员和有限的第三方,内部指定多个预选节点为记账人,每个区块的生成由所有的预选节点共同决定,其他第三方的接入节点可以参与交易,但不过问记账过程,其他第三方可以通过该联盟链开放的API(Application ProgrammingInterface,应用程序接口)进行限定查询。一般来说,联盟链适用于机构间的交易、结算、或清算等B2B(Business-to-Business,企业对企业)场景。例如多个金融机构将各自的区块链网络连接在一起,形成一个联盟性质的网络,从而便于相互数据对接和协同。
为了获得更好的性能,联盟链对于共识或验证节点的配置和网络环境有一定要求。有了准入机制,可以使得交易性能更容易提高,避免由参次不齐的参与者产生的一些问题。联盟链比公有链处理速度要快,因为节点的数量和身份都已经规定好了,所以可以使用相对松散的共识机制,因此数据的处理速度就会比公有链大大提高。
本公开实施例中,均以目标区块链为目标联盟链,且由Hyperledger Fabric(一个开源区块链分布式账本)提出的、开源的联盟链应用作为目标联盟链为例进行举例说明,但本公开并不限定于此。目标联盟链例如还可以是FISCO BCOS(一个金融区块链合作联盟)。
基于上述描述,本公开实施例提供一种基于区块链的智能合约安全性检测方法,该基于区块链的智能合约安全性检测方法可以基于联盟链技术实现,联盟链底层平台可以包括用户管理、基础服务、智能合约以及运营监控等处理模块。其中,用户管理模块负责所有区块链参与者的身份信息管理,包括维护公私钥生成(账户管理)、密钥管理以及用户真实身份和联盟链地址对应关系维护(权限管理)等。
本公开实施例中的目标智能合约是用计算机语言描述合同条款、交易的条件、交易的业务逻辑等,通过调用目标智能合约实现交易的自动执行和对账本数据的操作。可以理解为:用编程语言(例如下述的初阶目标编程语言或者更新目标编程语言)将相关交易逻辑进行实现并保存为具体的文件。
当目标区块链为目标联盟链时,目标智能合约也可以称之为目标联盟链合约。在一种场景中,目标联盟链可以包括多个用户的终端,其中,终端可以为手机、电脑、平板电脑等任意的电子设备。每个用户的终端作为目标联盟链中的一个节点,每个用户的终端可以收集联盟链合约,可以将收集的联盟链合约中的任意一个作为目标联盟链合约。在将目标联盟链合约部署至目标联盟链之前,需要对目标联盟链合约的程序源代码进行检查,发现其中是否存在安全隐患或者安全漏洞问题,这也可以称之为代码审计。由于程序源代码中的函数中的参数(例如变量)存在不断变化的过程(例如从变量A变到变量B),因此,可以通过参数追踪例如变量追踪把程序源代码中的函数中的变量的变化过程记录下来,以实现代码审计功能。
在步骤S120中,对所述目标智能合约进行合约解析与函数提取处理,以获得从所述目标智能合约中解析并提取出的各个函数。
本公开实施例中,对上述步骤S110获取的待上传部署至目标区块链的目标智能合约进行合约解析处理,识别该目标智能合约中的各个函数,然后对识别出的该目标智能合约中的各个函数进行函数提取处理,从而获得该目标智能合约中的各个函数。
在步骤S130中,对从所述目标智能合约中解析并提取出的各个函数进行参数解析处理以及参数变化关系分析处理,以获取并记录所述目标智能合约中各个函数的初阶参数变化关系,其中,每个函数的初阶参数变化关系包括至少两个参数之间的变化关系。
本公开实施例中,对上述步骤S120解析并提取出的各个函数进行参数解析处理,获得目标智能合约的各个函数中的参数,然后对各个函数中的参数进行参数变化关系分析处理,获取并记录该目标智能合约中各个函数的初阶参数变化关系,通过记录目标智能合约中各个函数的初阶参数变化关系,能够记录该目标智能合约中各个函数中的至少两个参数之间的变化关系,即本公开实施例提供的方法可以针对目标智能合约中的函数的参数变化进行记录,而不是针对函数变化做记录,因此,相比于函数而言,可以在细颗粒度的情况下提供目标智能合约的审计信息。
例如,记录目标智能合约中各个函数的两个参数例如两个变量之间的变化关系,可以针对每一步的变量变化进行记录,因此,可以在最细颗粒度的情况下提供目标智能合约的审计信息。
在示例性实施例中,所述初阶参数变化关系可以包括关联参数变化关系。
其中,获取并记录所述目标智能合约中各个函数的初阶参数变化关系,可以包括:从所述目标区块链的不同链码版本中确定所述目标区块链的初阶链码版本信息;根据所述初阶链码版本信息获取与所述初阶链码版本信息对应的所述目标区块链的初阶目标开源代码;对所述初阶目标开源代码进行代码解析与函数提取处理,以获得从所述初阶目标开源代码中解析并提取出的各个函数;对从所述初阶目标开源代码中解析并提取出的各个函数进行函数名与对应的参数的解析处理,获取所述初阶目标开源代码中各个函数的函数名及其各个参数;根据所述初阶目标开源代码中各个函数的函数名与其各个参数之间的对应关系,构建并记录所述初阶目标开源代码中各个函数的初阶函数名参数关系链;比较所述初阶函数名参数关系链和所述初阶参数变化关系,确定与所述初阶函数名参数关系链有关的所述关联参数变化关系。本公开实施例中,利用目标联盟链的初阶目标开源代码来构建初阶函数名参数关系链,从而可以用于对目标联盟链合约进行参数例如变量追踪。
本公开实施例中,目标区块链例如目标联盟链可以具有多个不同的链码版本,通过获取目标联盟链的初阶链码版本信息,可以准确地获取与所述初阶链码版本信息对应的目标联盟链的初阶目标开源代码,从而可以基于初阶目标开源代码构建该初阶目标开源代码中各个函数的初阶函数名参数关系链。其中,初阶函数名参数关系链是根据初阶目标开源代码中各个函数的函数名与其各个参数之间的对应关系生成的。若初阶参数变化关系与初阶函数名参数关系链有关,则将其称之为关联参数变化关系。
在示例性实施例中,所述初阶函数名参数关系链可以包括目标函数的目标函数名及其目标输入参数。其中,比较所述初阶函数名参数关系链和所述初阶参数变化关系,确定与所述初阶函数名参数关系链有关的所述关联参数变化关系,可以包括:若在所述目标函数内部,将所述目标输入参数变化为初始内部参数,则将所述目标输入参数变化为所述初始内部参数的初阶参数变化关系确定为与所述初阶函数名参数关系链有关的所述关联参数变化关系。
例如,若初阶目标开源代码中存在目标函数func(A),则目标函数名为func,且其存在目标输入参数A,则可以生成的初阶函数名参数关系链可以包括该目标函数名func和该目标输入参数A,若在目标智能合约中也出现了目标函数func(A),且在目标函数func(A)内部,将目标输入参数A变化为了初始内部参数B,则可以将目标输入参数A变化为初始内部参数B的初阶参数变化关系判定为与初阶函数名参数关系链有关的关联参数变化关系,即该初阶参数变化关系与初阶函数名参数关系链中的目标函数名及其目标输入参数有关。
在示例性实施例中,比较所述初阶函数名参数关系链和所述初阶参数变化关系,确定与所述初阶函数名参数关系链有关的所述关联参数变化关系,还可以包括:若在所述目标函数内部,将所述初始内部参数变化为变换内部参数,则将所述初始内部参数变化为所述变换内部参数的初阶参数变化关系确定为与所述初阶函数名参数关系链有关的所述关联参数变化关系。
例如,还是以上述目标函数func(A)为例,假设在目标智能合约中的目标函数func(A)内部将目标输入参数A变化为了上述初始内部参数B后,假设还进一步将初始内部参数B变化为变换内部参数C,则可以将初始内部参数B变化为变换内部参数C的初阶参数变化关系也判定为与初阶函数名参数关系链有关的关联参数变化关系,即该初阶参数变化关系与初阶函数名参数关系链中的目标函数名及其目标输入参数有关。
在示例性实施例中,比较所述初阶函数名参数关系链和所述初阶参数变化关系,确定与所述初阶函数名参数关系链有关的所述关联参数变化关系,还可以包括:若在所述目标函数内部新增设定内部参数,且根据所述初始内部参数和所述设定内部参数生成运算内部参数,则将所述初始内部参数变化为所述运算内部参数以及所述设定内部参数变化为所述运算内部参数的初阶参数变化关系确定为与所述初阶函数名参数关系链有关的所述关联参数变化关系。
例如,还是以上述目标函数func(A)为例,假设在目标智能合约中的目标函数func(A)内部将目标输入参数A变化为了上述初始内部参数B,并假设还进一步在目标函数func(A)内部新增了一个设定内部参数X,且通过初始内部参数B和设定内部参数X的运算(例如相加、相减、相乘、相除等任意运算操作中的任意一种或者多种的组合)生成了运算内部参数D,则可以将初始内部参数B变化为运算内部参数D的初阶参数变化关系、设定内部参数X变化为运算内部参数D的初阶参数变化关系均判定为与初阶函数名参数关系链有关的关联参数变化关系。
需要说明的是,判断一个初阶参数变化关系是否与初阶函数名参数关系链有关的场景并不限于上述举例说明。
再例如,还是以上述目标函数func(A)为例,假设在目标智能合约中的目标函数func(A)内部新增了上述设定内部参数X,且通过目标输入参数A和设定内部参数X的运算(例如相加、相减、相乘、相除等任意运算操作)生成了一个新的参数E,则可以将目标输入参数A变化为该新的参数E的初阶参数变化关系、设定内部参数X变化为该新的参数E的初阶参数变化关系均判定为与初阶函数名参数关系链有关的关联参数变化关系。
在示例性实施例中,所述初阶参数变化关系可以包括无关参数变化关系。若初阶参数变化关系与初阶函数名参数关系链无关,则将其称之为无关参数变化关系。
其中,所述方法还可以包括:比较所述初阶函数名参数关系链和所述初阶参数变化关系,确定与所述初阶函数名参数关系链无关的所述无关参数变化关系;将所述关联参数变化关系和所述无关参数变化关系分成第一部分和第二部分存储至分部参数变化关系数据库或分部参数变化关系数据集。
本公开实施例中,分部参数变化关系数据库是一种用于同时存储上述关联参数变化关系和无关参数变化关系的数据库,且在该数据库中将关联参数变化关系和无关参数变化关系分成了独立的第一部分和第二部分各自存储。类似地,分部参数变化关系数据集是一种用于同时存储上述关联参数变化关系和无关参数变化关系的数据集,且在该数据集中将关联参数变化关系和无关参数变化关系分成了独立的第一部分和第二部分各自存储。
本公开实施例中,一方面,由于实际的目标智能合约中的初阶参数变化关系会比较多,因此可以将初阶函数名参数关系链和初阶参数变化关系分开在两个不同的函数名参数关系链数据库和参数变化关系数据库或者函数名参数关系链数据集和参数变化关系数据集进行保存,可以很方便的进行迁移,并能够提高初阶函数名参数关系链和初阶参数变化关系的查询速度。另一方面,由于对参数进行追踪需要使用到函数名和参数,对参数追踪的实质是查看参数从哪个函数到了哪个函数,其中参数又发生了什么变化,因为分析一次目标智能合约的代码时间不短,而分析过程中可能产生错误,可能会影响到关联参数变化关系和无关参数变化关系的分类。在这种情况下,为了提高效率和准确性,可以选择将初阶参数变化关系中的无关参数变化关系这部分提取出来,以便后续分析时无需重新再耗费时间分析。此外,通过将初阶参数变化关系中的关联参数变化关系和无关参数变化关系分成两部分存储,可以便于后续的查询或检索。
类似的,本公开对初阶参数变化关系的存储方式不做限定。
在示例性实施例中,所述初阶函数名参数关系链可以包括目标函数。
其中,比较所述初阶函数名参数关系链和所述初阶参数变化关系,确定与所述初阶函数名参数关系链无关的所述无关参数变化关系,可以包括:若在所述目标函数内部新增添加内部参数,且将所述添加内部参数变化为内部转换内部参数,则将所述添加内部参数变化为所述内部转换内部参数的初阶参数变化关系确定为与所述初阶函数名参数关系链无关的所述无关参数变化关系。
例如,还是以上述目标函数func(A)为例,假设在目标智能合约中的目标函数func(A)内部新增了一个添加内部参数X’,且将添加内部参数X’变化为了内部转换内部参数Y,则可以将添加内部参数X’变化为内部转换内部参数Y的初阶参数变化关系确定为与初阶函数名参数关系链无关的无关参数变化关系。
本公开实施例中,确定初阶参数变化关系中的关联参数变化关系和无关参数变化关系的情况并不限于上述例举的几种情况,这里仅用于举例说明。
在示例性实施例中,所述目标区块链可以包括已封装的、提供给至少一种编程语言使用的接口。
以目标联盟链为例,本公开实施例中的目标联盟链中不仅可以包括控制自身的代码,同时还可以包括已经封装好的、用于提供给不同编程语言使用的接口。在该目标联盟链中,同一份目标联盟链合约可以用不同的编程语言(如Java(一门面向对象编程语言)、JS(JavaScript的缩写,一种具有函数优先的轻量级、解释型或即时编译型的高级编程语言)、Python(一种跨平台的计算机程序设计语言)、Go(又称Golang,一种静态强类型、编译型语言)等)编写(实际是调用目标联盟链已经封装好的对应编程语言的API)。而目标联盟链也可以有不同的版本,导致目标联盟链合约的运行环境也有不同版本之分,称之为目标联盟链合约的运行环境版本信息,其与目标联盟链所采用的版本对应。
本公开实施例提供的方法,由于目标联盟链中包括已经封装好的、用于提供给不同编程语言使用的接口,使得同一份目标联盟链合约可以采用多种不同的编程语言编写,如Java、JS、Python、Go等,因此本公开实施例提供的方法能够支持对不同类型的编程语言开发的目标联盟链合约进行检测和代码审计,即本公开实施例提供的方法适用性较好,且移植性较强。
其中,根据所述初阶目标开源代码中各个函数的函数名与其各个参数之间的对应关系,构建并记录所述初阶目标开源代码中各个函数的初阶函数名参数关系链,可以包括:从所述目标区块链支持的所述至少一种编程语言中确定所述目标智能合约所采用的初阶目标编程语言及其初阶目标语言版本,所述至少一种编程语言可以包括所述初阶目标编程语言;根据所述初阶目标开源代码中各个函数的函数名与其各个参数之间的对应关系和所述初阶目标语言版本,构建所述初阶函数名参数关系链;其中每个初阶函数名参数关系链中包括所述初阶目标开源代码中的一个函数的函数名及其一个参数和所述初阶目标语言版本;将所述初阶函数名参数关系链存储至函数名参数关系链数据库或函数名参数关系链数据集。
本公开实施例中,函数名参数关系链数据库是一种用于存储上述初阶函数名参数关系链的数据库。类似地,函数名参数关系链数据集是一种用于存储上述初阶函数名参数关系链的数据集。
在示例性实施例中,从所述目标区块链支持的所述至少一种编程语言中确定所述目标智能合约所采用的初阶目标编程语言及其初阶目标语言版本,可以包括:根据每种编程语言的特征字段和语法特性,从所述目标区块链支持的所述至少一种编程语言中确定所述目标智能合约所采用的所述初阶目标编程语言;根据所述目标智能合约中的函数和所述初阶目标编程语言各个版本中的函数,从所述初阶目标编程语言的不同版本中确定所述初阶目标编程语言的初阶目标语言版本。
本公开实施例中,从目标联盟链支持的至少一种编程语言中确定目标联盟链合约所采用的初阶目标编程语言。初阶目标编程语言也可能包括不同的版本,因此,可以再进一步确定目标智能合约所采用的初阶目标编程语言的初阶目标语言版本。在生成初阶函数名参数关系链时,不仅可以在每个初阶函数名参数关系链中添加初阶目标开源代码中的各个函数的函数名及其各个参数,还可以进一步添加其对应的初阶目标语言版本,通过在初阶函数名参数关系链中添加初阶目标语言版本,将目标联盟链合约所采用的初阶目标编程语言的初阶目标语言版本与运行环境版本信息强关联,因此不会因为初阶目标语言版本、运行环境版本信息变化而无法获取到初阶函数名参数关系链,或者无法获取到准确的初阶函数名参数关系链。
本公开实施例中,还通过将生成的初阶函数名参数关系链存储起来,则不需要在每一次的分析中都重新进行初阶目标开源代码的初阶函数名参数关系链的关系分析和生成,提高了分析速度以及复用性。
本公开实施例中,可以将初阶函数名参数关系链存储至函数名参数关系链数据库中,也可以存储至函数名参数关系链数据集中,本公开对初阶函数名参数关系链的存储方式不做限定。
其中,本公开实施例中采用的数据库(包括函数名参数关系链数据库、参数变化关系数据库和分布参数变化关系数据库)均是指采用数据库技术形成的数据库,数据库是按照数据结构来组织、存储和管理数据的仓库,数据库中的数据的存放是有一定的规则的,数据库的相关结构和方法是公开的,用户确定数据库类型后即可使用。
本公开实施例中采用的数据集(包括函数名参数关系链数据集、参数变化关系数据集和分布参数变化关系数据集)均是指按照约定确定保存数据的格式以及保存位置。例如将数据保存在EXCEL(一种办公软件)这种行列形式的数据结构中,预先定义好每一列对应字段的含义,并标明对应的横坐标、纵坐标的坐标值的含义,然后一行一行的导入即可,就是一个最为简单的数据集。
由于实际中可能各种各样的原因导致无法连接到数据库,这是可以采用数据集来实现在无数据库的环境下进行数据的保存。
在步骤S140中,根据所述目标智能合约中各个函数的初阶参数变化关系中的至少两个参数之间的变化关系生成所述目标智能合约的初阶参数变化链。
其中每个初阶参数变化链可以包括至少三个参数之间的变化关系。
在步骤S150中,根据所述目标智能合约的文件大小获取所述目标智能合约中的目标参数名。
在示例性实施例中,根据所述目标智能合约的文件大小获取所述目标智能合约中的目标参数名,可以包括:若所述目标智能合约的文件大小小于预设阈值,则对所述目标智能合约进行参数名的全量提取,以将所述目标智能合约中出现的参数名作为所述目标参数名;若所述目标智能合约的文件大小大于或等于所述预设阈值,则对所述目标智能合约进行参数名的抽样提取,以提取所述目标智能合约中的敏感函数的参数名作为所述目标参数名。
本公开实施例中,可以根据目标智能合约的文件大小,来确定采用全量方式还是抽样方式来检测目标智能合约中函数的参数的参数名。
其中,全量方式是指将目标智能合约中出现的所有参数名作为目标参数名进行追踪,可以保证参数追踪的完整性和全面性,提高参数追踪的准确度。抽样方式是指提取目标智能合约中出现的全部参数名中的部分参数名作为目标参数名,例如抽取目标智能合约中重要的敏感函数的参数名作为目标参数名。在代码安全审计中,追踪敏感函数中的参数名,可以快速定位敏感函数,有助于帮助更快地发现漏洞。
其中,敏感函数是指目标智能合约中较为重要的函数,若该函数出现问题,容易导致安全漏洞。
在步骤S160中,在所述初阶参数变化链中遍历所述目标智能合约中的目标参数名,根据所述目标参数名确定所述初阶参数变化链的追踪正确性,以获得所述目标智能合约的安全性检测结果。
在示例性实施例中,在所述初阶参数变化链中遍历所述目标智能合约中的目标参数名,根据所述目标参数名确定所述初阶参数变化链的追踪正确性,以获得所述目标智能合约的安全性检测结果,可以包括:遍历所述目标智能合约中的目标参数名,判断每个目标参数名是否存在于所述初阶参数变化链中;若每个目标参数名存在于所述初阶参数变化链中,则获取所述目标智能合约中每个目标参数名对应的参考参数变化链;对比所述参考参数变化链与对应的所述初阶参数变化链;若所述参考参数变化链与对应的所述初阶参数变化链一致,则确定所述初阶参数变化链的追踪正确性,以获得检测通过的所述安全性检测结果;当所述安全性检测结果为检测通过时,将所述初阶函数名参数关系链和所述初阶参数变化关系存储至参数变化关系数据库或参数变化关系数据集;若所述参考参数变化链与对应的所述初阶参数变化链不一致,则获得检测未通过的所述安全性检测结果;当所述安全性检测结果为检测未通过时,获取修正参数变化关系,其中所述修正参数变化关系是根据对应的所述初阶参数变化链修改所述初阶参数变化关系生成的。
本公开实施例中,若目标智能合约中的每个目标参数名存在于一条或者多条初阶参数变化链中,则判定可以对该目标智能合约中的所有目标参数名进行追踪。此时,可以进一步核查上述确定的初阶参数变化链是否追踪正确。
具体地,可以采用不同于上述的工具或者方式生成目标智能合约中每个目标参数名对应的参考参数变化链,若初阶参数变化链与对应的参考参数变化链是一致的,则可以确定初阶参数变化链追踪是正确的。如果初阶参数变化链追踪正确,则可以将初阶函数名参数关系链和初阶参数变化关***一存储至参数变化关系数据库或参数变化关系数据集中,通过统一存储的方式,可以便于后续统一输出目标智能合约中所用参数的使用细节信息。类似的,本公开对初阶函数名参数关系链和初阶参数变化关系的统一存储方式不做限定。
若初阶参数变化链与对应的参考参数变化链不一致,则可以确定初阶参数变化链追踪错误,此时可以向提交该目标智能合约的用户发出提示信息,用户可以修改对应的初阶参数变化关系以生成修正参数变化关系,以使初阶参数变化链与对应的参考参数变化链保持一致。
本公开实施例中,在核查初阶参数变化链追踪有误时,可以用修正参数变化关系更新参数变化关系数据库或者参数变化关系数据集中的初阶参数变化关系。更新方式可以有多种,其中一种方式是直接利用修改后的修正参数变化关系替换掉参数变化关系数据库或者参数变化关系数据集中对应的初阶参数变化关系。另一种方式可以称之为新增补丁的方式,即在更新过程中,利用修改后的修正参数变化关系替换掉参数变化关系数据库或者参数变化关系数据集中对应的初阶参数变化关系,并另外新建对应的字段来保留原来的初阶参数变化关系,这样方便后续查看更新过程,便于定位问题。
在示例性实施例中,在所述初阶参数变化链中遍历所述目标智能合约中的目标参数名,根据所述目标参数名确定所述初阶参数变化链的追踪正确性,以获得所述目标智能合约的安全性检测结果,还可以包括:若有至少一个目标参数名不存在于所述初阶参数变化链中,则根据每种编程语言的特征字段和语法特性,从所述目标区块链支持的所述至少一种编程语言中重新确定所述目标智能合约所采用的更新目标编程语言,所述至少一种编程语言包括所述更新目标编程语言;根据所述目标智能合约中的函数和所述更新目标编程语言各个版本中的函数,从所述更新目标编程语言的不同版本中确定所述更新目标编程语言的更新目标语言版本;从所述目标区块链的不同链码版本中确定与所述初阶链码版本信息不同的所述目标区块链的更新链码版本信息;根据所述更新链码版本信息拉取与所述更新链码版本信息对应的所述目标区块链的更新目标开源代码;采用不同于解析所述初阶目标开源代码的解释器对所述更新目标开源代码进行解析处理,根据所述更新目标语言版本和解析后的所述更新目标开源代码,构建所述更新目标开源代码中各个函数的不同于所述初阶函数名参数关系链的更新函数名参数关系链;利用所述更新函数名参数关系链更新所述函数名参数关系链数据库或函数名参数关系链数据集中的所述初阶函数名参数关系链。
本公开实施例中,若有一个或者多个(两个以上)的目标参数名没有出现在任意一条初阶参数变化链中,则可以判定无法对目标智能合约中的所有目标参数名进行追踪。此时,可以重新确认目标智能合约所采用的编程语言为更新目标编程语言,且重新确认更新目标编程语言所用的更新目标语言版本,并重新确认目标区块链所采用的版本信息,称之为更新链码版本信息。根据该更新链码版本信息拉取最新的更新目标开源代码,并用不同于用于解析初阶目标开源代码的解释器对更新目标开源代码进行解析,从而可以获取和原来的初阶函数名参数关系链不同的更新函数名参数关系链,将更新函数名参数关系链更新至上述函数名参数关系链数据库或函数名参数关系链数据集中。
本公开实施例中,可以直接利用更新函数名参数关系链替换掉函数名参数关系链数据库或者函数名参数关系链数据集中对应的初阶函数名参数关系链,也可以利用修改后的更新函数名参数关系链替换掉函数名参数关系链数据库或者函数名参数关系链数据集中对应的初阶函数名参数关系链,并另外新建对应的字段来保留原来的初阶函数名参数关系链,这样方便后续查看更新过程,便于定位问题。
若目标智能合约的安全性检测结果为检测通过,则提交该目标智能合约的终端对该目标智能合约进行广播,打包成区块,并将区块链接至目标区块链中。
本公开实施方式提供的基于区块链的智能合约安全性检测方法,一方面,在将目标智能合约部署至目标区块链之前,获取该目标智能合约及该目标智能合约的文件大小,然后对该目标智能合约进行合约解析与函数提取处理,以获得从该目标智能合约中解析并提取出的各个函数;再对从该目标智能合约中解析并提取出的各个函数进行参数解析处理和参数变化关系分析处理,获取并记录该目标智能合约中各个函数的初阶参数变化关系,其中每个初阶参数变化关系中包括至少两个参数之间的变化关系,从而在追踪目标智能合约中的参数时,可以提供细颗粒度的数据变化过程(参数层面),通过记录目标智能合约中的函数的参数变化信息(这里的初阶参数变化关系),方便以后查询使用;另一方面,还可以根据该目标智能合约中各个函数的初阶参数变化关系中的至少两个参数之间的变化关系生成该目标智能合约的初阶参数变化链,并进一步可以通过该目标智能合约的文件大小获取该目标智能合约中的目标参数名,从而可以通过在该初阶参数变化链中遍历该目标参数名,并根据该目标参数名来确定该初阶参数变化链的追踪正确性,最终获得该目标智能合约的安全性检测结果,实现了验证该目标智能合约的安全性的目的,保证最终部署到目标区块链上的目标智能合约是安全的,不易于被攻击,提高了使用该目标区块链的应用的安全性。
本公开实施例涉及的***可以是由客户端、多个节点(接入网络中的任意形式的计算设备,如服务器、用户终端)通过网络通信的形式连接形成的区块链***。
参见图2,图2是本公开实施例提供的基于区块链的智能合约安全性检测方法应用于区块链***的一个可选的结构示意图,由多个节点(接入网络中的任意形式的计算设备,如服务器、用户终端)和客户端形成,节点之间形成组成的点对点(P2P,Peer To Peer)网络,P2P 协议是一个运行在传输控制协议(TCP,Transmission Control Protocol )协议之上的应用层协议。在智能合约检测***中,任何机器如服务器、终端都可以加入而成为节点,节点包括硬件层、中间层、操作***层和应用层。
参见图2示出的区块链***中各节点的功能,涉及的功能包括:
1)路由,节点具有的基本功能,用于支持节点之间的通信。
节点除具有路由功能外,还可以具有以下功能:
2)应用,用于部署在目标区块链中,根据实际业务需求而实现特定业务,记录实现功能相关的数据形成记录数据,在记录数据中携带数字签名以表示任务数据的来源,将记录数据发送到区块链***中的其他节点,供其他节点在验证记录数据来源以及完整性成功时,将记录数据添加到临时区块中。
例如,应用实现的业务包括:
2.1)钱包,用于提供进行电子货币的交易的功能,包括发起交易(即,将当前交易的交易记录发送给区块链***中的其他节点,其他节点验证成功后,作为承认交易有效的响应,将交易的记录数据存入区块链的临时区块中;当然,钱包还支持查询电子货币地址中剩余的电子货币;
2.2)共享账本,用于提供账目数据的存储、查询和修改等操作的功能,将对账目数据的操作的记录数据发送到区块链***中的其他节点,其他节点验证有效后,作为承认账目数据有效的响应,将记录数据存入临时区块中,还可以向发起操作的节点发送确认。
2.3)目标智能合约,计算机化的协议,可以执行某个合约的条款,通过部署在共享账本上的用于在满足一定条件时而执行的代码实现,根据实际的业务需求代码用于完成自动化的交易, 例如查询买家所购买商品的物流状态,在买家签收货物后将买家的电子货币转移到商户的地址;当然,目标智能合约不仅限于执行用于交易的合约, 还可以执行对接收的信息进行处理的合约。
3)目标区块链,包括一系列按照产生的先后时间顺序相互接续的区块 (Block),新区块一旦加入到目标区块链中就不会再被移除,区块中记录了区块链***中节点提交的记录数据。
参见图3,图3是本公开实施例提供的区块结构(Block Structure)一个可选的示意图,每个区块中包括本区块存储交易记录的哈希值(本区块的哈希值)、以及前一区块的哈希值,各区块通过哈希值连接形成区块链。另外,区块中还可以包括有区块生成时的时间戳等信息。目标区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了相关的信息,用于验证其信息的有效性(防伪)和生成下一个区块。
图4实施例以目标区块链为目标联盟链、目标智能合约为目标联盟链为例对上述实施例提供的方法进行举例说明。
如图4所示,本公开实施例提供的方法可以包括以下步骤。
在步骤S401中,获取目标联盟链的目标联盟链合约。
用户可以通过其终端上安装的客户端将目标联盟链合约上传,以获取到需要进行审计的目标联盟链合约的代码,可以是单个文件,也可以是包含多个文件在内的文件夹。
在步骤S402中,抽取目标联盟链合约的SDK版本信息。
在该步骤中确定当前待审计的目标联盟链合约中所用SDK(SoftwareDevelopment Kit,软件开发工具包)的版本信息,称之为SDK版本信息,包括SDK对应的初阶目标编程语言,以及使用该初阶目标编程语言的SDK的初阶目标语言版本。
这里假设提供四种编程语言的SDK,包括但不限于:Go、Java、JS中的Node.js和Python,而每种编程语言对应的SDK也会有不同版本之分。
图5以初阶目标编程语言为JAVA语言为例,其对应的SDK包括6个版本,分别为:V2.1、V2.0、V1.4、V1.3、V1.2和V1.1。其他编程语言与之类似。
确定目标联盟链合约的SDK版本信息可通过页面由用户配置相关信息的方式获取,也可以通过对目标联盟链合约进行版本信息扫描的方式获取。以版本信息扫描方式为例,可以首先确定目标联盟链合约所用的初阶目标编程语言,然后再确定该初阶目标编程语言的SDK的初阶目标语言版本。
在确定目标联盟链合约所用的初阶目标编程语言时,可以针对每种编程语言自身的特征字段、语法特性等进行判断。
例如以上述支持的Java、Go和JS语言为例,首先,各编程语言的文件名后缀不一样,例如Java一般以class为后缀,Go以go为后缀,JS以js为后缀。再例如,一些函数是某种编程语言所特有的,其他编程语言中没有,例如 System.print.outxxx函数是Java特有的;Console.log函数是JS特有的;Fmt.printxxx函数是Go特有的。这里的“xxx”是指以其开头、后缀名不一样的函数。
在确定该初阶目标编程语言的SDK的初阶目标语言版本时,可以针对目标联盟链合约中的所用的SDK函数进行判断,然后根据不同版本之间的区别进行判断(如1.1版本可能有函数a,而1.2版本没有该函数)。
在步骤S403中,抽取目标联盟链合约的运行环境版本信息。
当前步骤用于确定目标联盟链合约的运行环境版本信息,实际上就是确定目标联盟链所采用的版本例如假设为初阶链码版本信息。
类似的,目标联盟链也可以具有不同的版本,具有不同的版本号。例如,目标联盟链假设包括V2.1,V2.0,V1.4,V1.3,V1.2,V1.1和V1.0版本。
类似地,目标联盟链合约的运行环境版本信息可以由用户通过页面进行配置,也可以通过对目标联盟链合约进行扫描来进行版本确定。以扫描方式为例,可以获取目标联盟链合约中的SDK函数进行判断,然后根据不同版本之间的区别进行判断(如1.1版本可能有函数a,而1.2版本没有该函数)。
在步骤S404中,根据上述步骤获取的SDK版本信息和运行环境版本信息初始化代码-变量关系数据库。
这里以将生成的初阶函数名参数关系链存储至函数名参数关系链数据库、且参数以变量为例进行举例说明,因此,也可以将函数名参数关系链数据库称之为代码-变量关系数据库。
在该步骤中初始化代码-变量关系数据库:如果代码-变量关系数据库中存在某条初阶函数名参数关系链则跳过,不存在则***。
具体地,首先获取根据初阶链码版本信息拉取的目标联盟链的初阶目标开源代码中所提供的所有函数,初阶目标开源代码中已经封装好了常用的操作函数。
然后,明确上述获取的每个函数的函数名和参数关系,生成函数名和其所用的每个输入参数的关系链,称之为初阶函数名参数关系链。
例如,函数function(value1, value2),其中函数名为funciton,输入参数有两个,分别为value1和value2,此时可以生成两条关系链,分别是函数名和输入参数1的“function-value1”,以及函数名和输入参数2的“function-value2”。
之后,可以将SDK版本信息中的初阶目标语言版本添加到上述初阶函数名参数关系链中,如初阶目标语言版本为1.1,添加到上述两条初阶函数名参数关系链后生成的两条初阶函数名参数关系链分别为“function-value1-1.1”和“function-value2-1.1”
在步骤S405中,根据代码-变量关系数据库及目标联盟链合约对目标联盟链合约中的变量进行追踪。
该步骤把代码-变量关系数据库和实际的目标联盟链合约中的数据进行结合,具体可以进一步包括如下步骤:
1、对实际的目标联盟链合约进行代码分析,获取其中函数名和参数的关系链,和上述步骤中的初阶函数名参数关系链的概念是一样的。
2、获取目标联盟链合约中各个函数内部参数的变化关系,如函数func1传入参数x,y,同时内部定义了参数z,在该函数中通过内部操作将参数x变为参数m,参数y变为参数n,此时可以生成初阶参数变化关系“x->m”以及“y-n”,因为参数z没有发生变化,因此没有产生初阶参数变化关系。
本公开实施例中,一次仅记录一个参数到另外一个参数的变化关系,不记录多个变化关系,如假设上述函数中参数x先变成参数y再变为参数z,则记录两条初阶参数变化关系,一个是“x->y”,另一个是“y->z”,而不是“x->y->z”。因为“x->y”,“y->z”的形式是最小维度的数据形式,能够方便用户根据自身实际需要做更为详细的分析。
3、将初阶函数名参数关系链以及初阶参数变化关系进行比较,获取其中和初阶函数名参数关系链有关的关联参数变化关系。
一种情况是,存在和初阶函数名参数关系链无关的初阶参数变化关系。
例如,如图6所示,假设存在目标函数func(A),在目标函数内部,目标输入参数A变化为初始内部参数B,然后,初始内部参数B再变化为变换内部参数C,另外在目标函数内部新增设定内部参数X,且设定内部参数X变化为内部转换内部参数Y,则这里的“A->B”和“B->C”均为关联参数变化关系,而X和A、B或C均没有关联,所以将“X->Y”称之为无关参数变化关系。
另一种情况是,均为和初阶函数名参数关系链有关的初阶参数变化关系。
例如,如图7所示,还是以目标函数func(A)为例,在目标函数内部,目标输入参数A变化为初始内部参数B,在目标函数内部新增设定内部参数X,且假设B+X生成了参数C,则“A->B”、“B->C”和“X-> C”均与初阶函数名参数关系链有关,这里的B和X共同运算生成C。
上述图6和7中例举的X可以用于指代一些已经固定或能够直接获取到的数据,例如代码中已经固定的变量,或者通过调用已有的函数就能获取到的变量,如获取主机名/当前时间,这些一定是有结果的,最多是结果为空。在实际中,经常会将函数中传入的输入函数(例如第一输入函数)与这些直接获取到的数据进行运算。
本公开实施例中,可以将上述初阶参数变化关系保存到分部参数变化关系数据库中,分为两部分,其中第一部分是和初阶函数名参数关系链有关的关联参数变化关系,第二部分是和初阶函数名参数关系链无关的无关参数变化关系。
在步骤S406中,判断能否对目标联盟链合约中的所有变量进行追踪,如果不能,则进入步骤S407;如果能,则执行步骤S409。
在该步骤中可以对目标智能合约中已有的变量进行检查,判断是否有遗漏的变量。
具体地,这里以全量方式为例进行举例说明,可以将上述多个初阶参数变化关系变为链状形态,称之为初阶参数变化链,如“a->b”,“b->c”的两个初阶参数变化关系变为“a->b->c”的初阶参数变化链,类似根据“a->b”和“b->c”获得“a->b->c”可以称之为初阶参数变化关系中的至少两个参数的传递性。然后获取目标联盟链合约中所有出现的参数名例如变量名,并判断是否所有的变量名都已经是否出现在某条或多条初阶参数变化链中,若所有的变量名已经出现在某条或多条初阶参数变化链中,则判定能够对目标联盟链合约中的所有变量进行追踪。若至少有一个变量名未出现在至少一条初阶参数变化链中,则判定不能够对目标联盟链合约中的所有变量进行追踪。
在步骤S407中,在确定不能够进行全部追踪的情况下,可以重新确认SDK版本信息和运行环境版本信息,例如确定为更新目标语言版本和更新链码版本信息,拉取最新的更新目标开源代码进行学习,获得学习结果例如更新函数名参数关系链。
在步骤S408中,学习结果入库,例如可以将更新函数名参数关系链更新至步骤S404中的代码-变量关系数据库中,然后可以基于该更新函数名参数关系链对目标联盟链合约中的变量进行追踪。
在步骤S409中,在确定能够进行全部追踪的情况下,进一步复查追踪的初阶参数变化链的结果是否正确,如果复查追踪的结果正确,则执行步骤S411;如果复查追踪的结果不正确,则执行步骤S410。
在该步骤中可以根据目标联盟链合约的文件大小进行全量方式或者抽样方式的对比。这里可以以目标联盟链合约整体的文件大小进行判断,当小于预设阈值例如100MB(兆字节)时进行全量方式的对比,大于或等于100MB时进行抽样方式的对比。预设阈值是可以根据实际需求进行设定的,本公开对此不做限定。
采用全量方式对比时,如前所述,判断目标联盟链合约中的每一个变量是否出现在初阶参数变化链中(例如上述例举的“a->b->c”),并判断目标联盟链合约中的变量变化关系是否和初阶参数变化链中的结果一致。这里可以使用不同的工具来生成参考参数变化链,因为如果前后两个步骤都使用同一个工具生成,就无法有效区分是否有遗漏的参数例如变量。
生成参考参数变化链的工具例如可以采用获取代码中的语法树工具,主要分为两类,一类是编程语言中自带的语法树生成工具,还有一类是第三方写的语法树生成工具,如AST(抽象语法树) explorer等,本公开对此不做限定。
如果该步骤生成的参考参数变化链为“a->b->c”,之前步骤生成的初阶参数变化链为“a->b->d”,则认为不一致,判定为追踪不正确。
如果该步骤生成的参考参数变化链为“a->b->c”,之前步骤生成的初阶参数变化链为“a->b-> c”,则认为一致,判定为追踪正确。
采用抽样方式对比时,对较为重要的敏感函数的变量进行检查,判断其变量变化关系是否和初阶参数变化链中的结果一致。
在步骤S410中,若复查关系不正确,则可以获取纠正结果,例如修正参数变化关系,然后重新执行步骤S405。
在步骤S411中,如果追踪结果正确,则把确认正确的初阶参数变化关系及其初阶函数名参数关系链保存到参数变化关系数据库中,可以以格式化方式输出目标联盟链合约中使用的变量的使用细节信息。
该步骤是确认能够对所有目标参数名进行追踪以及参数变化关系正确的情况下执行的,使用细节信息统一保存在参数变化关系数据库,可以包括以下信息:
1、初阶函数名参数关系链,如“function-value1-1.1”。
2、初阶参数变化关系,包括和初阶函数名参数关系链有关和无关的初阶参数变化关系,如“a->b”和“b->c”。
本公开实施方式提供的基于区块链的智能合约安全性检测方法,一方面,可以提供细颗粒度的数据变化过程(变量层面),记录每个变量的变化信息,因此在追踪变量时可以提供最细颗粒度的信息,方便以后查询使用,用户只需要根据要追踪的函数名以及参数名即可从相应数据库中查询到对应的变量的变化过程信息。另一方面,还把变量的变化信息和编程语言的SDK以及智能合约的运行环境版本信息进行强关联,因此可以快速判断出不同版本之间对代码所造成的影响,不会因为SDK、智能合约的运行环境版本信息发生变化而无法获取到相关信息或者获取到错误的结果。此外,还将实际的智能合约的变量关系以及分析中出错的信息进行保存,方便日后为了提升分析质量以及减少安全漏洞时,提供相关的原始信息。
图8示意性示出了根据本公开的一实施例的基于区块链的智能合约安全性检测装置的框图。如图8所示,本公开实施例提供的基于区块链的智能合约安全性检测装置800可以包括目标智能合约获取单元810、目标智能合约解析提取单元820、初阶参数变化关系获取单元830、初阶参数变化链生成单元840、目标参数名获取单元850以及智能合约检测结果获得单元860。
本公开实施例中,目标智能合约信息获取单元810可以用于获取待上传至目标区块链的目标智能合约及其文件大小。目标智能合约解析提取单元820可以用于对所述目标智能合约进行合约解析与函数提取处理,以获得从所述目标智能合约中解析并提取出的各个函数。初阶参数变化关系获取单元830可以用于对从所述目标智能合约中解析并提取出的各个函数进行参数解析处理以及参数变化关系分析处理,以获取并记录所述目标智能合约中各个函数的初阶参数变化关系,其中,每个函数的初阶参数变化关系包括至少两个参数之间的变化关系。初阶参数变化链生成单元840可以用于根据所述目标智能合约中各个函数的初阶参数变化关系中的至少两个参数之间的变化关系生成所述目标智能合约的初阶参数变化链。目标参数名获取单元850可以用于根据所述目标智能合约的文件大小获取所述目标智能合约中的目标参数名。智能合约检测结果获得单元860可以用于在所述初阶参数变化链中遍历所述目标智能合约中的目标参数名,根据所述目标参数名确定所述初阶参数变化链的追踪正确性,以获得所述目标智能合约的安全性检测结果。
本公开实施方式提供的基于区块链的智能合约安全性检测装置,一方面,在将目标智能合约部署至目标区块链之前,获取该目标智能合约及该目标智能合约的文件大小,然后对该目标智能合约进行合约解析与函数提取处理,以获得从该目标智能合约中解析并提取出的各个函数;再对从该目标智能合约中解析并提取出的各个函数进行参数解析处理和参数变化关系分析处理,获取并记录该目标智能合约中各个函数的初阶参数变化关系,其中每个初阶参数变化关系中包括至少两个参数之间的变化关系,从而在追踪目标智能合约中的参数时,可以提供细颗粒度的数据变化过程(参数层面),通过记录目标智能合约中的函数的参数变化信息(这里的初阶参数变化关系),方便以后查询使用;另一方面,还可以根据该目标智能合约中各个函数的初阶参数变化关系中的至少两个参数之间的变化关系生成该目标智能合约的初阶参数变化链,并进一步可以通过该目标智能合约的文件大小获取该目标智能合约中的目标参数名,从而可以通过在该初阶参数变化链中遍历该目标参数名,并根据该目标参数名来确定该初阶参数变化链的追踪正确性,最终获得该目标智能合约的安全性检测结果,实现了验证该目标智能合约的安全性的目的,保证最终部署到目标区块链上的目标智能合约是安全的,不易于被攻击,提高了使用该目标区块链的应用的安全性。
在示例性实施例中,所述初阶参数变化关系可以包括关联参数变化关系。其中,初阶参数变化关系获取单元830可以包括:初阶链码版本信息确定单元,可以用于从所述目标区块链的不同链码版本中确定所述目标区块链的初阶链码版本信息;初阶目标开源代码获取单元,可以用于根据所述初阶链码版本信息拉取与所述初阶链码版本信息对应的所述目标区块链的初阶目标开源代码;初阶目标开源代码解析单元,可以用于对所述初阶目标开源代码进行代码解析与函数提取处理,以获得从所述初阶目标开源代码中解析并提取出的各个函数;初阶目标开源代码函数解析单元,可以用于对从所述初阶目标开源代码中解析并提取出的各个函数进行函数名与对应的参数的解析处理,获取所述初阶目标开源代码中各个函数的函数名及其各个参数;初阶函数名参数关系链构建单元,可以用于根据所述初阶目标开源代码中各个函数的函数名与其各个参数之间的对应关系,构建并记录所述初阶目标开源代码中各个函数的初阶函数名参数关系链;关联参数变化关系确定单元,可以用于比较所述初阶函数名参数关系链和所述初阶参数变化关系,确定与所述初阶函数名参数关系链有关的所述关联参数变化关系。
在示例性实施例中,所述目标区块链可以包括已封装的、提供给至少一种编程语言使用的接口。其中,初阶函数名参数关系链构建单元可以包括:初阶目标编程语言版本确定单元,可以用于从所述目标区块链支持的所述至少一种编程语言中确定所述目标智能合约所采用的初阶目标编程语言及其初阶目标语言版本,所述至少一种编程语言包括所述初阶目标编程语言;初阶函数名参数关系链生成单元,可以用于根据所述初阶目标开源代码中各个函数的函数名与其各个参数之间的对应关系和所述初阶目标语言版本,构建所述初阶函数名参数关系链;其中每个初阶函数名参数关系链中包括所述初阶目标开源代码中的一个函数的函数名及其一个参数和所述初阶目标语言版本;初阶函数名参数关系链存储单元,可以用于将所述初阶函数名参数关系链存储至函数名参数关系链数据库或函数名参数关系链数据集。
在示例性实施例中,目标参数名获取单元850可以包括:全量参数名提取单元,可以用于若所述目标智能合约的文件大小小于预设阈值,则对所述目标智能合约进行参数名的全量提取,以将所述目标智能合约中出现的参数名作为所述目标参数名;样本参数名提取单元,可以用于若所述目标智能合约的文件大小大于或等于所述预设阈值,则对所述目标智能合约进行参数名的抽样提取,以提取所述目标智能合约中的敏感函数的参数名作为所述目标参数名。
在示例性实施例中,智能合约检测结果获得单元860可以包括:目标参数名遍历单元,可以用于遍历所述目标智能合约中的目标参数名,判断每个目标参数名是否存在于所述初阶参数变化链中;参考参数变化链获取单元,可以用于若每个目标参数名存在于所述初阶参数变化链中,则获取所述目标智能合约中每个目标参数名对应的参考参数变化链;初阶参数变化链判定单元,可以用于若所述参考参数变化链与对应的所述初阶参数变化链一致,则确定所述初阶参数变化链的追踪正确性,以获得检测通过的所述安全性检测结果;参数详细信息存储单元,可以用于当所述安全性检测结果为检测通过时,将所述初阶函数名参数关系链和所述初阶参数变化关系存储至参数变化关系数据库或参数变化关系数据集;检测未通过结果获得单元,可以用于若所述参考参数变化链与对应的所述初阶参数变化链不一致,则获得检测未通过的所述安全性检测结果;参数变化关系纠正单元,可以用于当所述安全性检测结果为检测未通过时,获取修正参数变化关系,其中所述修正参数变化关系是根据对应的所述初阶参数变化链修改所述初阶参数变化关系生成的。
在示例性实施例中,智能合约检测结果获得单元860还可以包括:更新目标编程语言获取单元,可以用于若有至少一个目标参数名不存在于所述初阶参数变化链中,则根据每种编程语言的特征字段和语法特性,从所述目标区块链支持的所述至少一种编程语言中重新确定所述目标智能合约所采用的更新目标编程语言,所述至少一种编程语言包括所述更新目标编程语言;更新目标语言版本确定单元,可以用于根据所述目标智能合约中的函数和所述更新目标编程语言各个版本中的函数,从所述更新目标编程语言的不同版本中确定所述更新目标编程语言的更新目标语言版本;更新链码版本信息确定单元,可以用于从所述目标区块链的不同链码版本中确定与所述初阶链码版本信息不同的所述目标区块链的更新链码版本信息;更新目标开源代码获取单元,可以用于根据所述更新链码版本信息拉取与所述更新链码版本信息对应的所述目标区块链的更新目标开源代码;更新函数名参数关系链构建单元,可以用于采用不同于解析所述初阶目标开源代码的解释器对所述更新目标开源代码进行解析处理,根据所述更新目标语言版本和解析后的所述更新目标开源代码,构建所述更新目标开源代码中各个函数的不同于所述初阶函数名参数关系链的更新函数名参数关系链;函数名参数关系链更新单元,可以用于利用所述更新函数名参数关系链更新所述函数名参数关系链数据库或函数名参数关系链数据集中的所述初阶函数名参数关系链。
在示例性实施例中,初阶目标编程语言版本确定单元可以包括:初阶目标编程语言确定单元,可以用于根据每种编程语言的特征字段和语法特性,从所述目标区块链支持的所述至少一种编程语言中确定所述目标智能合约所采用的所述初阶目标编程语言;初阶目标语言版本确定单元,可以用于根据所述目标智能合约中的函数和所述初阶目标编程语言各个版本中的函数,从所述初阶目标编程语言的不同版本中确定所述初阶目标编程语言的初阶目标语言版本。
在示例性实施例中,所述初阶函数名参数关系链可以包括目标函数的目标函数名及其目标输入参数。其中,关联参数变化关系确定单元可以包括:直接变换关联参数变化关系确定单元,可以用于若在所述目标函数内部,将所述目标输入参数变化为初始内部参数,则将所述目标输入参数变化为所述初始内部参数的初阶参数变化关系确定为与所述初阶函数名参数关系链有关的所述关联参数变化关系。
在示例性实施例中,关联参数变化关系确定单元还可以包括:相关变换关联参数变化关系确定单元,可以用于若在所述目标函数内部,将所述初始内部参数变化为变换内部参数,则将所述初始内部参数变化为所述变换内部参数的初阶参数变化关系确定为与所述初阶函数名参数关系链有关的所述关联参数变化关系。
在示例性实施例中,关联参数变化关系确定单元还可以包括:相关运算关联参数变化关系确定单元,可以用于若在所述目标函数内部新增设定内部参数,且根据所述初始内部参数和所述设定内部参数生成运算内部参数,则将所述初始内部参数变化为所述运算内部参数以及所述设定内部参数变化为所述运算内部参数的初阶参数变化关系确定为与所述初阶函数名参数关系链有关的所述关联参数变化关系。
在示例性实施例中,所述初阶参数变化关系还可以包括无关参数变化关系。其中,基于区块链的智能合约安全性检测装置800还可以包括:无关参数变化关系确定单元,可以用于比较所述初阶函数名参数关系链和所述初阶参数变化关系,确定与所述初阶函数名参数关系链无关的所述无关参数变化关系;参数变化关系分部存储单元,可以用于将所述关联参数变化关系和所述无关参数变化关系分成第一部分和第二部分存储至分部参数变化关系数据库或分部参数变化关系数据集。
在示例性实施例中,所述初阶函数名参数关系链可以包括目标函数。其中,无关参数变化关系确定单元可以包括:内部转换无关参数变化关系确定单元,可以用于若在所述目标函数内部新增添加内部参数,且将所述添加内部参数变化为内部转换内部参数,则将所述添加内部参数变化为所述内部转换内部参数的初阶参数变化关系确定为与所述初阶函数名参数关系链无关的所述无关参数变化关系。
本公开实施例的基于区块链的智能合约安全性检测装置的其它内容可以参照上述实施例。
应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干单元,但是这种划分并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多单元的特征和功能可以在一个单元中具体化。反之,上文描述的一个单元的特征和功能可以进一步划分为由多个单元来具体化。
下面参考图9,其示出了适于用来实现本申请实施例的电子设备的结构示意图。图9示出的电子设备仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
参照图9,本公开实施例提供的电子设备可以包括:处理器901、通信接口902、存储器903和通信总线904。
其中处理器901、通信接口902和存储器903通过通信总线904完成相互间的通信。
可选的,通信接口902可以为通信模块的接口,如GSM(Global System for Mobilecommunications,全球移动通信***)模块的接口。处理器901用于执行程序。存储器903用于存放程序。程序可以包括计算机程序,该计算机程序包括计算机操作指令。其中,程序中可以包括:视频客户端的程序。
处理器901可以是一个中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本公开实施例的一个或多个集成电路。
存储器903可以包含高速RAM(random access memory,随机存取存储器)存储器,也可以还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
其中,程序可具体用于:获取待上传至目标区块链的目标智能合约及其文件大小;对所述目标智能合约进行合约解析与函数提取处理,以获得从所述目标智能合约中解析并提取出的各个函数;对从所述目标智能合约中解析并提取出的各个函数进行参数解析处理以及参数变化关系分析处理,以获取并记录所述目标智能合约中各个函数的初阶参数变化关系,其中,每个函数的初阶参数变化关系包括至少两个参数之间的变化关系;根据所述目标智能合约中各个函数的初阶参数变化关系中的至少两个参数之间的变化关系生成所述目标智能合约的初阶参数变化链;根据所述目标智能合约的文件大小获取所述目标智能合约中的目标参数名;在所述初阶参数变化链中遍历所述目标智能合约中的目标参数名,根据所述目标参数名确定所述初阶参数变化链的追踪正确性,以获得所述目标智能合约的安全性检测结果。
需要理解的是,在本公开附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。
Claims (15)
1.一种基于区块链的智能合约安全性检测方法,其特征在于,包括:
获取待上传至目标区块链的目标智能合约及其文件大小;
对所述目标智能合约进行合约解析与函数提取处理,以获得从所述目标智能合约中解析并提取出的各个函数;
对从所述目标智能合约中解析并提取出的各个函数进行参数解析处理以及参数变化关系分析处理,以获取并记录所述目标智能合约中各个函数的初阶参数变化关系,其中,每个函数的初阶参数变化关系包括至少两个参数之间的变化关系;
根据所述目标智能合约中各个函数的初阶参数变化关系中的至少两个参数之间的变化关系生成所述目标智能合约的初阶参数变化链;
根据所述目标智能合约的文件大小获取所述目标智能合约中的目标参数名;
在所述初阶参数变化链中遍历所述目标智能合约中的目标参数名,根据所述目标参数名确定所述初阶参数变化链的追踪正确性,以获得所述目标智能合约的安全性检测结果。
2.根据权利要求1所述的方法,其特征在于,所述初阶参数变化关系包括关联参数变化关系;其中,获取并记录所述目标智能合约中各个函数的初阶参数变化关系,包括:
从所述目标区块链的不同链码版本中确定所述目标区块链的初阶链码版本信息;
根据所述初阶链码版本信息拉取与所述初阶链码版本信息对应的所述目标区块链的初阶目标开源代码;
对所述初阶目标开源代码进行代码解析与函数提取处理,以获得从所述初阶目标开源代码中解析并提取出的各个函数;
对从所述初阶目标开源代码中解析并提取出的各个函数进行函数名与对应的参数的解析处理,获取所述初阶目标开源代码中各个函数的函数名及其各个参数;
根据所述初阶目标开源代码中各个函数的函数名与其各个参数之间的对应关系,构建并记录所述初阶目标开源代码中各个函数的初阶函数名参数关系链;
比较所述初阶函数名参数关系链和所述初阶参数变化关系,确定与所述初阶函数名参数关系链有关的所述关联参数变化关系。
3.根据权利要求2所述的方法,其特征在于,所述目标区块链包括已封装的、提供给至少一种编程语言使用的接口;根据所述初阶目标开源代码中各个函数的函数名与其各个参数之间的对应关系,构建并记录所述初阶目标开源代码中各个函数的初阶函数名参数关系链,包括:
从所述目标区块链支持的所述至少一种编程语言中确定所述目标智能合约所采用的初阶目标编程语言及其初阶目标语言版本,所述至少一种编程语言包括所述初阶目标编程语言;
根据所述初阶目标开源代码中各个函数的函数名与其各个参数之间的对应关系和所述初阶目标语言版本,构建所述初阶函数名参数关系链;其中每个初阶函数名参数关系链中包括所述初阶目标开源代码中的一个函数的函数名及其一个参数和所述初阶目标语言版本;
将所述初阶函数名参数关系链存储至函数名参数关系链数据库或函数名参数关系链数据集。
4.根据权利要求3所述的方法,其特征在于,根据所述目标智能合约的文件大小获取所述目标智能合约中的目标参数名,包括:
若所述目标智能合约的文件大小小于预设阈值,则对所述目标智能合约进行参数名的全量提取,以将所述目标智能合约中出现的参数名作为所述目标参数名;
若所述目标智能合约的文件大小大于或等于所述预设阈值,则对所述目标智能合约进行参数名的抽样提取,以提取所述目标智能合约中的敏感函数的参数名作为所述目标参数名。
5.根据权利要求4所述的方法,其特征在于,在所述初阶参数变化链中遍历所述目标智能合约中的目标参数名,根据所述目标参数名确定所述初阶参数变化链的追踪正确性,以获得所述目标智能合约的安全性检测结果,包括:
遍历所述目标智能合约中的目标参数名,判断每个目标参数名是否存在于所述初阶参数变化链中;
若每个目标参数名存在于所述初阶参数变化链中,则获取所述目标智能合约中每个目标参数名对应的参考参数变化链;
对比所述参考参数变化链与对应的所述初阶参数变化链;
若所述参考参数变化链与对应的所述初阶参数变化链一致,则确定所述初阶参数变化链的追踪正确性,以获得检测通过的所述安全性检测结果;
当所述安全性检测结果为检测通过时,将所述初阶函数名参数关系链和所述初阶参数变化关系存储至参数变化关系数据库或参数变化关系数据集;
若所述参考参数变化链与对应的所述初阶参数变化链不一致,则获得检测未通过的所述安全性检测结果;
当所述安全性检测结果为检测未通过时,获取修正参数变化关系,其中所述修正参数变化关系是根据对应的所述初阶参数变化链修改所述初阶参数变化关系生成的。
6.根据权利要求5所述的方法,其特征在于,在所述初阶参数变化链中遍历所述目标智能合约中的目标参数名,根据所述目标参数名确定所述初阶参数变化链的追踪正确性,以获得所述目标智能合约的安全性检测结果,还包括:
若有至少一个目标参数名不存在于所述初阶参数变化链中,则根据每种编程语言的特征字段和语法特性,从所述目标区块链支持的所述至少一种编程语言中重新确定所述目标智能合约所采用的更新目标编程语言,所述至少一种编程语言包括所述更新目标编程语言;
根据所述目标智能合约中的函数和所述更新目标编程语言各个版本中的函数,从所述更新目标编程语言的不同版本中确定所述更新目标编程语言的更新目标语言版本;
从所述目标区块链的不同链码版本中确定与所述初阶链码版本信息不同的所述目标区块链的更新链码版本信息;
根据所述更新链码版本信息拉取与所述更新链码版本信息对应的所述目标区块链的更新目标开源代码;
采用不同于解析所述初阶目标开源代码的解释器对所述更新目标开源代码进行解析处理,根据所述更新目标语言版本和解析后的所述更新目标开源代码,构建所述更新目标开源代码中各个函数的不同于所述初阶函数名参数关系链的更新函数名参数关系链;
利用所述更新函数名参数关系链更新所述函数名参数关系链数据库或函数名参数关系链数据集中的所述初阶函数名参数关系链。
7.根据权利要求3所述的方法,其特征在于,从所述目标区块链支持的所述至少一种编程语言中确定所述目标智能合约所采用的初阶目标编程语言及其初阶目标语言版本,包括:
根据每种编程语言的特征字段和语法特性,从所述目标区块链支持的所述至少一种编程语言中确定所述目标智能合约所采用的所述初阶目标编程语言;
根据所述目标智能合约中的函数和所述初阶目标编程语言各个版本中的函数,从所述初阶目标编程语言的不同版本中确定所述初阶目标编程语言的初阶目标语言版本。
8.根据权利要求2所述的方法,其特征在于,所述初阶函数名参数关系链包括目标函数的目标函数名及其目标输入参数;其中,比较所述初阶函数名参数关系链和所述初阶参数变化关系,确定与所述初阶函数名参数关系链有关的所述关联参数变化关系,包括:
若在所述目标函数内部,将所述目标输入参数变化为初始内部参数,则将所述目标输入参数变化为所述初始内部参数的初阶参数变化关系确定为与所述初阶函数名参数关系链有关的所述关联参数变化关系。
9.根据权利要求8所述的方法,其特征在于,比较所述初阶函数名参数关系链和所述初阶参数变化关系,确定与所述初阶函数名参数关系链有关的所述关联参数变化关系,还包括:
若在所述目标函数内部,将所述初始内部参数变化为变换内部参数,则将所述初始内部参数变化为所述变换内部参数的初阶参数变化关系确定为与所述初阶函数名参数关系链有关的所述关联参数变化关系。
10.根据权利要求8所述的方法,其特征在于,比较所述初阶函数名参数关系链和所述初阶参数变化关系,确定与所述初阶函数名参数关系链有关的所述关联参数变化关系,还包括:
若在所述目标函数内部新增设定内部参数,且根据所述初始内部参数和所述设定内部参数生成运算内部参数,则将所述初始内部参数变化为所述运算内部参数以及所述设定内部参数变化为所述运算内部参数的初阶参数变化关系确定为与所述初阶函数名参数关系链有关的所述关联参数变化关系。
11.根据权利要求2所述的方法,其特征在于,所述初阶参数变化关系还包括无关参数变化关系;其中,所述方法还包括:
比较所述初阶函数名参数关系链和所述初阶参数变化关系,确定与所述初阶函数名参数关系链无关的所述无关参数变化关系;
将所述关联参数变化关系和所述无关参数变化关系分成第一部分和第二部分存储至分部参数变化关系数据库或分部参数变化关系数据集。
12.根据权利要求11所述的方法,其特征在于,所述初阶函数名参数关系链包括目标函数;其中,比较所述初阶函数名参数关系链和所述初阶参数变化关系,确定与所述初阶函数名参数关系链无关的所述无关参数变化关系,包括:
若在所述目标函数内部新增添加内部参数,且将所述添加内部参数变化为内部转换内部参数,则将所述添加内部参数变化为所述内部转换内部参数的初阶参数变化关系确定为与所述初阶函数名参数关系链无关的所述无关参数变化关系。
13.一种基于区块链的智能合约安全性检测装置,其特征在于,包括:
目标智能合约信息获取单元,用于获取待上传至目标区块链的目标智能合约及其文件大小;
目标智能合约解析提取单元,用于对所述目标智能合约进行合约解析与函数提取处理,以获得从所述目标智能合约中解析并提取出的各个函数;
初阶参数变化关系获取单元,用于对从所述目标智能合约中解析并提取出的各个函数进行参数解析处理以及参数变化关系分析处理,以获取并记录所述目标智能合约中各个函数的初阶参数变化关系,其中,每个函数的初阶参数变化关系包括至少两个参数之间的变化关系;
初阶参数变化链生成单元,用于根据所述目标智能合约中各个函数的初阶参数变化关系中的至少两个参数之间的变化关系生成所述目标智能合约的初阶参数变化链;
目标参数名获取单元,用于根据所述目标智能合约的文件大小获取所述目标智能合约中的目标参数名;
智能合约检测结果获得单元,用于在所述初阶参数变化链中遍历所述目标智能合约中的目标参数名,根据所述目标参数名确定所述初阶参数变化链的追踪正确性,以获得所述目标智能合约的安全性检测结果。
14.一种计算机可读存储介质,其特征在于,其上存储有计算机程序,所述程序被处理器执行时实现如权利要求1至12任一项所述的方法。
15.一种电子设备,其特征在于,包括:
至少一个处理器;
存储装置,配置为存储至少一个程序,当所述至少一个程序被所述至少一个处理器执行时,使得所述至少一个处理器实现如权利要求1至12中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011161073.0A CN112015826B (zh) | 2020-10-27 | 2020-10-27 | 基于区块链的智能合约安全性检测方法及相关设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011161073.0A CN112015826B (zh) | 2020-10-27 | 2020-10-27 | 基于区块链的智能合约安全性检测方法及相关设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112015826A true CN112015826A (zh) | 2020-12-01 |
CN112015826B CN112015826B (zh) | 2021-01-29 |
Family
ID=73528183
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011161073.0A Active CN112015826B (zh) | 2020-10-27 | 2020-10-27 | 基于区块链的智能合约安全性检测方法及相关设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112015826B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115643102A (zh) * | 2022-10-31 | 2023-01-24 | 西安优光谱信息科技有限公司 | 一种基于平台通讯流程的数据处理方法及*** |
CN117834258A (zh) * | 2023-12-29 | 2024-04-05 | 蚂蚁智安安全技术(上海)有限公司 | 一种针对区块链合约的重入攻击检测方法和装置 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160218879A1 (en) * | 2015-01-23 | 2016-07-28 | Daniel Robert Ferrin | Method and apparatus for the limitation of the mining of blocks on a block chain |
CN109766722A (zh) * | 2019-01-22 | 2019-05-17 | 苏州同济区块链研究院有限公司 | 一种区块链中构建智能合约的方法及其*** |
CN110197285A (zh) * | 2019-05-07 | 2019-09-03 | 清华大学 | 基于区块链的安全协作深度学习方法及装置 |
CN110705974A (zh) * | 2019-09-03 | 2020-01-17 | 杭州趣链科技有限公司 | 一种完备的智能合约形式规范实现方法 |
CN111176944A (zh) * | 2019-12-27 | 2020-05-19 | 杭州趣链科技有限公司 | 区块链智能合约调用记录解析方法、装置、终端和存储介质 |
CN111179084A (zh) * | 2019-12-31 | 2020-05-19 | 北京明略软件***有限公司 | 一种预测期货市场交易指标的方法及装置 |
CN111242470A (zh) * | 2020-01-09 | 2020-06-05 | 广东工业大学 | 一种基于智能合约的制造资源建模与调用方法 |
CN111381879A (zh) * | 2018-12-31 | 2020-07-07 | 华为技术有限公司 | 一种数据处理方法及装置 |
CN111523784A (zh) * | 2020-04-16 | 2020-08-11 | 广州拉卡拉信息技术有限公司 | 自动执行路径的监控方法及装置 |
-
2020
- 2020-10-27 CN CN202011161073.0A patent/CN112015826B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160218879A1 (en) * | 2015-01-23 | 2016-07-28 | Daniel Robert Ferrin | Method and apparatus for the limitation of the mining of blocks on a block chain |
CN111381879A (zh) * | 2018-12-31 | 2020-07-07 | 华为技术有限公司 | 一种数据处理方法及装置 |
CN109766722A (zh) * | 2019-01-22 | 2019-05-17 | 苏州同济区块链研究院有限公司 | 一种区块链中构建智能合约的方法及其*** |
CN110197285A (zh) * | 2019-05-07 | 2019-09-03 | 清华大学 | 基于区块链的安全协作深度学习方法及装置 |
CN110705974A (zh) * | 2019-09-03 | 2020-01-17 | 杭州趣链科技有限公司 | 一种完备的智能合约形式规范实现方法 |
CN111176944A (zh) * | 2019-12-27 | 2020-05-19 | 杭州趣链科技有限公司 | 区块链智能合约调用记录解析方法、装置、终端和存储介质 |
CN111179084A (zh) * | 2019-12-31 | 2020-05-19 | 北京明略软件***有限公司 | 一种预测期货市场交易指标的方法及装置 |
CN111242470A (zh) * | 2020-01-09 | 2020-06-05 | 广东工业大学 | 一种基于智能合约的制造资源建模与调用方法 |
CN111523784A (zh) * | 2020-04-16 | 2020-08-11 | 广州拉卡拉信息技术有限公司 | 自动执行路径的监控方法及装置 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115643102A (zh) * | 2022-10-31 | 2023-01-24 | 西安优光谱信息科技有限公司 | 一种基于平台通讯流程的数据处理方法及*** |
CN117834258A (zh) * | 2023-12-29 | 2024-04-05 | 蚂蚁智安安全技术(上海)有限公司 | 一种针对区块链合约的重入攻击检测方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN112015826B (zh) | 2021-01-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11886421B2 (en) | Systems, methods, and apparatuses for distributing a metadata driven application to customers and non-customers of a host organization using distributed ledger technology (DLT) | |
US11803537B2 (en) | Systems, methods, and apparatuses for implementing an SQL query and filter mechanism for blockchain stored data using distributed ledger technology (DLT) | |
US11783024B2 (en) | Systems, methods, and apparatuses for protecting consumer data privacy using solid, blockchain and IPFS integration | |
US11811769B2 (en) | Systems, methods, and apparatuses for implementing a declarative, metadata driven, cryptographically verifiable multi-network (multi-tenant) shared ledger | |
US11824864B2 (en) | Systems, methods, and apparatuses for implementing a declarative and metadata driven blockchain platform using distributed ledger technology (DLT) | |
US10769228B2 (en) | Systems and methods for web analytics testing and web development | |
US20200034469A1 (en) | Automatic generation of smart contracts | |
US20190236559A1 (en) | Systems, methods, and apparatuses for implementing smart flow contracts using distributed ledger technologies in a cloud based computing environment | |
US20190236562A1 (en) | Systems, methods, and apparatuses for implementing document interface and collaboration using quipchain in a cloud based computing environment | |
US20190073646A1 (en) | Consolidated blockchain-based data transfer control method and system | |
US20200034448A1 (en) | Composition operators for smart contract | |
WO2019152750A1 (en) | Systems, methods, and apparatuses for implementing super community and community sidechains with consent management for distributed ledger technologies in a cloud based computing environment | |
CN114679282A (zh) | 用区块链实施的用于安全投票和分配的计数***和方法 | |
CN112506747B (zh) | 一种业务进程监控方法、装置、电子设备及存储介质 | |
WO2021113369A1 (en) | Cross-partition calls in partitioned, tamper-evident data stores | |
Demir et al. | Security smells in smart contracts | |
US20210304191A1 (en) | System and method for integration and validation | |
CN112015826B (zh) | 基于区块链的智能合约安全性检测方法及相关设备 | |
CN114971827A (zh) | 一种基于区块链的对账方法、装置、电子设备及存储介质 | |
CN115114372A (zh) | 基于区块链的数据处理方法、装置、设备及可读存储介质 | |
CN111917729B (zh) | 动态注入测试方法及装置、相关设备 | |
CN113177232A (zh) | 基于区块链和大数据的安全性检测方法及大数据ai*** | |
Bagchi | Using blockchain technology and smart contracts for access management in IoT devices | |
CN116596551A (zh) | 基于区块链的供应链产品溯源方法、存储介质和电子设备 | |
US11544045B2 (en) | Automatic smart contract analysis |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |