CN117852040A - 智能合约漏洞检测方法、装置、设备及存储介质 - Google Patents

智能合约漏洞检测方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN117852040A
CN117852040A CN202211207086.6A CN202211207086A CN117852040A CN 117852040 A CN117852040 A CN 117852040A CN 202211207086 A CN202211207086 A CN 202211207086A CN 117852040 A CN117852040 A CN 117852040A
Authority
CN
China
Prior art keywords
detected
vulnerability
code block
intelligent contract
intelligent
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
Application number
CN202211207086.6A
Other languages
English (en)
Inventor
郑伟林
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202211207086.6A priority Critical patent/CN117852040A/zh
Publication of CN117852040A publication Critical patent/CN117852040A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本申请公开了一种智能合约漏洞检测方法、装置、设备及存储介质,该方法包括:获取待检测智能合约,确定所述待检测智能合约的多个执行路径;所述执行路径包括至少一个用于执行所述待检测智能合约的代码块;将所述待检测智能合约输入预测网络中,得到所述待检测智能合约中的预测漏洞代码块;根据所述预测漏洞代码块确定所述多个执行路径中的候选执行路径;所述候选执行路径为包含所述预测漏洞代码块的执行路径;对所述候选执行路径进行漏洞检测,获得漏洞检测结果。该方案能够有效提高待检测智能合约的漏洞检测准确度,并且减少了消耗在无漏洞的执行路径上的检测时间,提高了漏洞检测效率,进一步增强了智能合约部署的安全性。

Description

智能合约漏洞检测方法、装置、设备及存储介质
技术领域
本发明一般涉及区块链技术领域,具体涉及一种智能合约漏洞检测方法、装置、设备及存储介质。
背景技术
随着区块链技术的快速发展,智能合约作为区块链技术中的一个重要的分支,由于其具有去中心化、不可篡改和可追溯等特性,已经广越来越广泛地应用于金融、管理、医疗、互联网和供应链等领域。其中,智能合约由于区块链不可篡改的特性,部署到区块链上的智能合约不可更改。为了提高智能合约的安全性,防止智能合约出现整数溢出、短地址攻击、伪随机等问题,在合约部署之前需要对合约进行漏洞检测显得尤为重要。
目前,相关技术中通过对智能合约进行静态分析得到运行结果,例如可以采用针对智能合约的符号执行工具Oyente进行静态分析,并根据运行结果发掘智能合约的漏洞。然而该方案中由于漏洞代码只占整个智能合约的极小部分,需要对智能合约进行全面查找以分析漏洞导致耗费大量的时间,降低了漏洞检测效率。
发明内容
鉴于现有技术中的上述缺陷或不足,期望提供一种智能合约漏洞检测方法、装置、设备及存储介质,能够有效提高待检测智能合约的漏洞检测准确度,减少了消耗在无漏洞的执行路径上的检测时间,提高了漏洞检测效率。所述技术方案如下:
根据本申请的一个方面,提供了一种智能合约漏洞检测方法,该方法包括:
获取待检测智能合约,确定待检测智能合约的多个执行路径;执行路径包括至少一个用于执行待检测智能合约的代码块;
将待检测智能合约输入预测网络中,得到待检测智能合约中的预测漏洞代码块;
根据预测漏洞代码块确定多个执行路径中的候选执行路径;候选执行路径为包含预测漏洞代码块的执行路径;
对候选执行路径进行漏洞检测,获得漏洞检测结果。
在其中一个实施例中,将待检测智能合约输入预测网络中,得到待检测智能合约中的预测漏洞代码块,包括:
对待检测智能合约进行划分,得到待检测智能合约的多个代码块;
利用预测网络对待检测智能合约的每一代码块进行漏洞概率预测,获得待检测智能合约的每一代码块存在漏洞的概率值;
根据待检测智能合约的每一代码块存在漏洞的概率值,确定待检测智能合约中的预测漏洞代码块。
在其中一个实施例中,对待检测智能合约进行划分,得到待检测智能合约的多个代码块,包括:
对待检测智能合约进行编译处理,得到待检测智能合约的字节码;
对字节码进行切割处理,得到待检测智能合约的多个代码块。
在其中一个实施例中,预测网络的训练过程包括:
获取样本智能合约,样本智能合约包括的样本代码块标注有对应的漏洞分类结果;
基于样本智能合约和漏洞分类结果训练预测网络。
在其中一个实施例中,基于样本智能合约和漏洞分类结果训练预测网络,包括:
对样本智能合约进行分析处理,得到样本智能合约的多个样本代码块;
对多个样本代码块中的每个样本代码块进行预处理,得到每个样本代码块对应的特征矩阵;
将特征矩阵输入初始预测网络中,得到每个样本代码块存在漏洞的预测值;
根据每个样本代码块存在漏洞的预测值与漏洞分类结果,计算损失函数,按照损失函数最小化,采用迭代算法迭代调整初始预测网络的参数,得到预测网络。
在其中一个实施例中,对多个样本代码块中的每个样本代码块进行预处理,得到每个样本代码块对应的特征矩阵,包括:
对于每个样本代码块,利用词法分析转换处理为多个单词序列;
将多个单词序列中的每个单词序列进行向量化处理,得到对应的多个词向量;
对多个词向量进行组合处理,得到每个样本代码块对应的特征矩阵。
在其中一个实施例中,对候选执行路径进行漏洞检测,获得漏洞检测结果,包括:
根据候选执行路径中每一代码块存在漏洞的概率值,确定候选执行路径的优先级系数;
基于各候选执行路径的优先级系数从高到低的顺序,对各候选执行路径进行漏洞检测,得到漏洞检测结果。
在其中一个实施例中,根据候选执行路径中每一代码块存在漏洞的概率值,确定候选执行路径的优先级系数,包括:
对候选执行路径中每一代码块存在漏洞的概率值进行加权求和处理,得到候选执行路径的优先级系数,或者,
确定候选执行路径中代码块存在漏洞的概率值中的最大概率值,基于最大概率值确定候选执行路径的优先级系数。
在其中一个实施例中,对候选执行路径进行漏洞检测,获得漏洞检测结果,包括:
对候选执行路径中的代码块以及相邻代码块之间的约束条件进行符号转化处理,得到候选执行路径的符号处理结果;
基于符号处理结果进行漏洞检测,获得漏洞检测结果。
根据本申请的另一方面,提供了一种智能合约漏洞检测装置,该装置包括:
执行路径确定模块,用于获取待检测智能合约,确定所述待检测智能合约的多个执行路径;所述执行路径包括至少一个用于执行所述待检测智能合约的代码块;
预测模块,用于将所述待检测智能合约输入预测网络中,得到所述待检测智能合约中的预测漏洞代码块;
候选路径确定模块,用于根据所述预测漏洞代码块确定所述多个执行路径中的候选执行路径;所述候选执行路径为包含所述预测漏洞代码块的执行路径;
检测模块,用于对所述候选执行路径进行漏洞检测,获得漏洞检测结果。
根据本申请的另一方面,提供了一种计算机设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,该处理器执行该程序时实现如上述的智能合约漏洞检测方法。
根据本申请的另一方面,提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序用于实现如上述的智能合约漏洞检测方法。
根据本申请的另一方面,提供了一种计算机程序产品,其上包括指令,该指令被执行时实现如上述的智能合约漏洞检测方法。
本申请实施例中提供的智能合约漏洞检测方法、装置、设备及存储介质,通过获取待检测智能合约,确定待检测智能合约的多个执行路径,该执行路径包括至少一个用于执行待检测智能合约的代码块,将待检测智能合约输入预测网络中,得到待检测智能合约中的预测漏洞代码块,然后根据预测漏洞代码块确定多个执行路径中的候选执行路径,并对候选执行路径进行漏洞检测,获得漏洞检测结果。本申请中的技术方案相比于现有技术而言,一方面,通过获取待检测智能合约,能够全面地确定到待智能合约可能存在漏洞的多个执行路径,在得到多个执行路径这一指导信息后通过预测网络对待检测智能合约进行漏洞预测,能够更精细地对用于执行待检测智能合约的代码块进行漏洞检测,从而更精准地确定出存在漏洞的预测漏洞代码块。另一方面,根据预测漏洞代码块确定多个执行路径中的候选执行路径,结合了更为精细且全面的存在漏洞的代码特征来确定候选执行路径,从而能够更优先地对候选执行路径进行漏洞检测,有效提高了待检测智能合约的漏洞检测准确度,并且减少了消耗在无漏洞的执行路径上的检测时间,提高了漏洞检测效率,进一步增强了智能合约部署的安全性。
本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1为本申请实施例提供的智能合约漏洞检测系统的结构示意图;
图2为本申请实施例提供的区块链中的区块结构示意图;
图3为本申请实施例提供的智能合约漏洞检测方法的流程示意图;
图4为本申请实施例提供的控制流图的结构示意图;
图5为本申请实施例提供的智能合约漏洞检测方法的结构示意图;
图6为本申请实施例提供的确定预测漏洞代码块方法的流程示意图;
图7为本申请实施例提供的对每一代码块进行向量化和组合处理的结构示意图;
图8为本申请实施例提供的训练预测网络方法的流程示意图;
图9为本申请另一实施例提供的智能合约漏洞检测方法的流程示意图;
图10为本申请又一实施例提供的智能合约漏洞检测方法的流程示意图;
图11为本申请实施例提供的控制流图的结构示意图;
图12为本申请实施例提供的智能合约漏洞检测的结构示意图;
图13为本申请实施例提供的智能合约漏洞检测方法的结构示意图;
图14为本申请实施例提供的智能合约漏洞检测装置的结构示意图;
图15为本申请另一实施例提供的智能合约漏洞检测装置的结构示意图;
图16为本申请实施例提供的计算机系统的结构示意图。
具体实施方式
下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与发明相关的部分。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。为了便于理解,下面对本申请实施例涉及的一些技术术语进行解释:
智能合约:是一种旨在以信息化方式传播、验证或执行合同的计算机协议。是指保存在区块链上的一段代码,用户能够通过对智能合约发起一笔特定的交易进行合约的调用,交易中除了包含发送的数字货币数量,还可以指定调用合约中的函数以及函数的参数,智能合约在接收到交易后会按照代码逻辑运行,运行结果会记录在区块链上。
符号执行:即使用符号值代替真实值进行执行,符号执行会维护一个路径空间与路径相应的约束条件。在符号执行过程中,用户处理和计算的程序“数值”通常为包含符号的表达式。对于程序中的条件跳转指令,符号执行将跳转的条件表示为针对相应符号表达式的约束条件。通过求解该约束条件,可以进一步判断该分支是否可行,并符号化地执行可行的分支。
可以理解,随着区块链技术的应用发展,智能合约的数量呈现爆发时增长,在区块链产业化过程中,智能合约将逐渐通用化、复杂化以及产业化,智能合约的数字资产价值将不断提升。其作为区块链上一段自动触发、执行的程序代码,应用频率高,需要极高的安全性。但在代码设计过程中不免出现编码安全、设计缺陷等问题,将导致智能合约存在安全隐患。为了避免智能合约的漏洞给用户带来巨大损失,需要对智能合约进行漏洞检测。
目前,相关技术中可以通过对智能合约进行静态分析得到运行结果,并根据运行结果发掘智能合约的漏洞,然而该方案由于漏洞代码只占整个智能合约的极小部分,需要对智能合约进行全面查找以导致耗费大量的时间,降低了漏洞检测效率。
基于上述缺陷,本申请提供了一种智能合约漏洞检测方法、装置、系统、设备及存储介质,与现有技术相比,通过获取待检测智能合约,能够全面地确定到待智能合约可能存在漏洞的多个执行路径,在得到多个执行路径这一指导信息后通过预测网络对待检测智能合约进行漏洞预测,能够更精细地对用于执行待检测智能合约的代码块进行漏洞检测,从而更精准地确定出存在漏洞的预测漏洞代码块,并根据预测漏洞代码块确定多个执行路径中的候选执行路径,结合了更为精细且全面的存在漏洞的代码特征来确定候选执行路径,从而优先地对候选执行路径进行漏洞检测,有效提高了待检测智能合约的漏洞检测准确度,并且减少了消耗在无漏洞的执行路径上的检测时间,提高了漏洞检测效率,进一步增强了智能合约部署的安全性。
本申请实施例涉及的系统可以是由客户端、多个节点(接入网络中的任意形式的计算设备,如服务器、用户终端)通过网络通信的形式连接形成的分布式系统。
以分布式系统为区块链系统为例,请参见图1,图1是本申请实施例提供的分布式系统应用于区块链系统的结构示意图,如图1所示,区块链系统可以由多个节点200(接入网络中的任意形式的计算设备,如服务器、用户终端)和客户端300形成,节点之间形成组成的点对点(P2P,Peer To Peer)网络,P2P协议是一个运行在传输控制协议(TCP,TransmissionControl Protocol)协议之上的应用层协议。在分布式系统中,任何机器如服务器、终端都可以加入而成为节点,节点包括硬件层、中间层、操作系统层和应用层。
参见图1所示出的区块链系统中各节点的功能,区块链系统中的节点的功能可以包括:
(1)路由,区块链系统中的每个节点均可以具有的基本功能,用于支持节点之间的通信,如区块链系统中的节点200中可以包括路由功能。
区块链系统中的节点除具有路由功能外,还可以具有以下功能:
(2)应用,该功能可以用于部署在区块链中,根据实际业务需求而实现特定业务,记录实现功能相关的数据形成记录数据,在记录数据中携带数字签名以表示任务数据的来源,将记录数据发送到区块链系统中的其他节点,供其他节点在验证记录数据来源以及完整性成功时,将记录数据添加到临时区块中。
例如,应用实现的业务可以包括:
钱包:钱包可以用于提供进行电子货币的交易的功能,包括发起交易,即将当前交易的交易记录发送给区块链系统中的其他节点,其他节点验证成功后,作为承认交易有效的响应,将交易的记录数据存入区块链的临时区块中;当然,钱包还支持查询电子货币地址中剩余的电子货币。
共享账本:共享账本可以用于提供账目数据的存储、查询和修改等操作的功能,将对账目数据的操作的记录数据发送到区块链系统中的其他节点,其他节点验证有效后,作为承认账目数据有效的响应,将记录数据存入临时区块中,还可以向发起操作的节点发送确认。
智能合约:智能合约可以是指计算机化的协议,用于执行某个合约的条款,通过部署在共享账本上的用于在满足一定条件时而执行的代码实现,根据实际的业务需求代码用于完成自动化的交易,例如查询买家所购买商品的物流状态,在买家签收货物后将买家的电子货币转移到商户的地址;当然,智能合约不仅限于执行用于交易的合约,还可以执行对接收的信息进行处理的合约。
(3)区块链(Blockchain)是一种按照时间顺序将数据区块(Block)以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本,新区块一旦加入到区块链中就不会再被移除,区块中记录了区块链系统中节点提交的记录数据。
其中,区块链系统中的节点可以为服务器,或者为用户终端,其中,服务器可以是独立是物理服务器,也可以是由多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(content delivery network,CDN)、以及大数据和人工智能平台等基础云计算服务的云服务器。用户终端可以包括智能手机、平板电脑、笔记本电脑、掌上电脑、移动互联网设备(mobile internet device,MID)、可穿戴设备(例如智能手表、智能手环等)等终端。
请参见图2,图2是本申请实施例提供的区块链中的区块结构的示意图,区块链可以由多个区块组成,创始区块中包括区块头和区块主体,每个区块中包括本区块存储交易记录的哈希值(本区块的哈希值)、以及前一区块的哈希值,各区块通过哈希值连接形成区块链。另外,区块中还可以包括有区块生成时的时间戳等信息。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了相关的信息,用于验证其信息的有效性(防伪)和生成下一个区块。
具体地,在智能合约的漏洞检测领域,对智能合约进行漏洞检测的过程即可以在用户终端执行,也可以在服务器执行。例如,通过终端获取待检测智能合约,可以在终端本地进行漏洞检测,得到待检测智能合约的漏洞检测结果;也可以将待检测智能合约发送至服务器,使得服务器获取待检测智能合约,根据待检测智能合约进行漏洞检测,得到待检测智能合约的漏洞检测结果,然后将待检测智能合约的漏洞检测结果发送至终端,以实现对待检测智能合约中漏洞的类型结果检测。
本申请实施例提供的智能合约漏洞检测方案,通过进行漏洞检测能够将安全性更高的智能合约部署在区块链上,以使得该智能合约可以应用在身份验证、记录、证券、贸易金融、衍生产品、支付、保险、企业系统、供应链、临床试验、癌症研究等各种场景。
另外,终端上可以运行有操作系统,该操作系统可以包括但不限于安卓系统、IOS系统、Linux系统、Unix、windows系统等,还可以包括用户界面(User Interface,UI)层,可以通过UI层对外提供待检测智能合约的显示以及漏洞检测结果的显示,另外,可以基于应用程序接口(Application Programming Interface,API)将智能合约漏洞检测所需的待检测智能合约发送至服务器。
终端与服务器之间通过有线或无线网络建立通信连接。可选的,上述的无线网络或有线网络使用标准通信技术和/或协议。网络通常为因特网、但也可以是任何网络,包括但不限于局域网(Local Area Network,LAN)、城域网(Metropolitan Area Network,MAN)、广域网(Wide Area Network,WAN)、移动、有线或者无线网络、专用网络或者虚拟专用网络的任何组合。
为了便于理解和说明,下面通过图3至图16详细阐述本申请实施例提供的智能合约漏洞检测方法、装置、设备及存储介质。
图3示出了本申请一实施例提供的智能合约漏洞检测方法的流程示意图。该方法可以由上述图1所示系统中的区块链节点执行,该区块链节点可以是计算机设备,该计算机设备可以是服务器或者终端,或者,该计算机设备也可以是终端和服务器的结合。如图3所示,该方法包括:
S101、获取待检测智能合约,确定待检测智能合约的多个执行路径;执行路径包括至少一个用于执行待检测智能合约的代码块。
上述待检测智能合约可以是需要进行漏洞检测的智能合约,可以是存储在区块链上的一段代码,具体可以理解为一种用以通过信息化方式传播、验证或执行合约的计算机协议。其可以被写在合约的账户里,并且实现特定业务操作,可以被触发执行。待检测智能合约可以是进行部署前需要进行漏洞检测的智能合约,其中可以包括多种业务功能以及各业务功能对应的自定义方法代码。
可选的,上述待检测智能合约可以是采用各种不同的语言编译得到的,例如可以是基于Golang语言编译的超级账本智能合约,还可以是基于Solidity语言、Vyper语言、Yul语言、DAML语言、JavaScript语言、java语言、php语言等进行编写的智能合约。其中,上述待检测智能合约可以是以不同的文件格式进行表示,例如可以是文件后缀名为.sol的文件,也可以是文件后缀名为.se的文件,还可以是XML文件,也可以是以太坊智能合约ABI格式。
需要说明的是,上述Solidity是用于实现智能合约的一种面向合约的高级编程语言,支持继承、库引用等特性,并且用户可自定义复杂的结构类型。
本申请实施例中,可以通过多种途径获取待检测智能合约,例如可以是调用智能合约采集装置对智能合约代码进行采集,以获取待检测智能合约,也可以是通过云端获取,还可以是通过数据库或区块链获取待检测智能合约,还可以是通过外部设备导入获取待检测智能合约,其中,该智能合约采集装置例如可以是网络爬虫工具。
其中,上述智能合约包括用于执行智能合约内容的多个代码块,不能代码块之间可以存在关联的执行顺序,不同代码块之间根据执行顺序进行执行待检测智能合约可以构成一个执行路径。
在其中一个实施例中,计算机设备在获取到待检测智能合约后可以通过预设的路径确定规则对待检测智能合约进行分析处理,得到待检测智能合约的多个执行路径。需要说明的是,上述待检测智能合约的多个执行路径是指待检测智能合约在被触发后,执行过程中所包括的多个处理线路。该多个执行路径中的每个执行路径可以包括至少一个用于执行待检测智能合约的代码块,每个代码块所包含的处理逻辑内容不同。其中,各个不同的执行路径中可以包括处理逻辑内容相同的代码块,也可以包括处理逻辑内容不同的代码块。
可选的,上述路径确定规则是指实际应用场景,对待检测智能合约预先设置的路径确定策略,可以是训练后的路径确定模型,也可以是通用的路径确定算法。
作为一种可实现方式,可以对待检测智能合约进行编译处理,得到待检测智能合约的字节码,并对字节码进行切割处理,例如采用切割代码基本块的方法,从而得到入口块、基本块和出口块,进而构建得到对应的控制流图(Control Flow Graph,CFG),然后遍历控制流图中的所有入口块、基本块和出口块,确定待检测智能合约中的多个执行路径。
可以理解的是,控制流图用于描述了一个程序在执行过程中会遍历到的所有路径。用图的形式表示一个过程内所有基本块执行的可能流向。控制流程图可以是从程序入口块开始,流向各个基本块,最后流向出口块。
示例性地,如下示出的是待检测智能合约中部分的test函数源码,其中,为了便于理解下述代码使用源码表示,而实际运行时是根据字节码构建控制流图:
可以对该待检测智能合约进行编译处理,得到待检测智能合约的字节码,然后对字节码进行切割处理,构建得到控制流图,该控制流图可以参见图4所示。其中,基于遍历该控制流图,确定出该待检测智能合约的多个执行路径,即存在两条执行路径,一条为A→B→C,另一条为A→D。
作为另一种可实现方式,可以通过路径确定模型对待检测智能合约进行特征提取处理,得到待检测智能合约的多个执行路径。其中,路径确定模型是通过对样本合约数据进行训练,从而学习到具备样本合约数据提取和路径确定能力的网络结构模型。路径确定模型是输入为待检测智能合约,输出为待检测智能合约的多个执行路径,且具有对待检测智能合约的多个执行路径进行特征提取和路径确定的神经网络模型。路径确定模型可以包括多层网络结构,不同层的网络结构对输入其的数据进行不同的处理,并将其输出结果传输至下一网络层,直至通过最后一个网络层进行处理,得到待检测智能合约的多个执行路径。
作为又一种可实现方式,可以预先根据智能合约的语法规范,自定义一个能识别智能合约语言的语法文件,然后根据语法文件生成词法分析器和语法分析器,并通过该词法分析器和语法分析器对待检测智能合约进行词法分析和语法分析,生成抽象语法树,该抽象语法树包括多个节点,例如可以包括根节点、子节点、叶子节点等。然后按照从根节点到子节点,再到叶子节点的顺序,遍历抽象语法树中的所有节点,得到待检测智能合约中的多个执行路径。
可以理解的是,抽象语法树可以是源代码语法结构的一种抽象表示,它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构,可以利用编译器将待检测智能合约编译成抽象语法树。
需要说明的是,上述基于待检测智能合约,得到待检测智能合约的多个执行路径的各个实现方式仅仅是作为一种示例,本申请实施例对此不做限定。
本实施例中通过确定待检测智能合约的多个执行路径,能够全面地确定待智能合约中可能存在漏洞的多个执行路径,从而为后续进行候选路径的确定提供了精确且全面的数据指导信息。
S102、将待检测智能合约输入预测网络中,得到待检测智能合约中的预测漏洞代码块。
需要说明的是,该待检测智能合约可以包括至少一个代码块,上述预测漏洞代码块是指存在漏洞的代码块,该预测漏洞代码块可以包括存在漏洞的代码块类型或代码块属性,代码块是指一段连续无分支的代码。其中,代码块类型例如可以包括“普通代码块”、“构造代码块”、“同步代码块”和“静态代码块”,存在漏洞的代码块属性可以包括代码块的物理含义、代码块的格式、代码块的精度、代码块的取值范围等。
上述预测网络是一个输入为待检测智能合约,输出为待检测智能合约的预测漏洞代码块,且具有对待检测智能合约中包含的代码块进行存在漏洞概率预测的能力,能够得到预测漏洞代码块的神经网络模型,即预测网络的模型参数已处于最优的状态。该预测网络是基于样本智能合约和对应的漏洞分类结果进行训练获得的,其中,漏洞分类结果可以是样本智能合约中的真实存在漏洞的代码块类型或真实代码块属性。该漏洞分类结果可以是人工进行标注的分类结果。
可选的,上述预测网络可以是采用神经网络模型,所采用的神经网络模型可以有多种,如深度神经网络(deep neural networks,DNN)模型、卷积神经网络(ConvolutionalNeural Network,CNN)、反向传播网络(Back Propagation Net-work,BP)、循环注意力神经网络(Recurrent Attention Convolutional Neural Network,RA-CNN)和CenterNet网络等,还可以是Transformer模型或者是对其他现有的网络进行改进后的网络结构。
一种可能的实现方式中,上述预测网络可以包括输入层、卷积层、归一化层和输出层,输入层用于获取待检测智能合约,卷积层用于对获取的待检测智能合约进行特征提取,得到特征矩阵,归一化层用于对特征矩阵进行归一化,得到统一大小的特征矩阵,输出层用于基于统一大小的特征矩阵,确定并输出预测漏洞代码块。其中,输出层可以包括全连接层和激活函数,在得到统一大小的特征矩阵后,可以通过全连接层对统一大小的特征矩阵进行处理,得到全连接向量特征,并采用激活函数对全连接向量特征进行处理,得到预测漏洞代码块,该预测漏洞代码块包括存在漏洞的多个代码块类型,也可以包括在代码块类型下的存在漏洞的多个代码块属性。
另一种可能的实现方式中,可以根据相应领域中先验知识中存在的漏洞的方式,提取待检测智能合约的特征信息,并通过聚类算法对特征信息进行聚类处理,得到聚类结果,然后利用人工先验的标志特征知识确定特征信息中每个聚类结果的识别结果,从而得到预测漏洞代码块。其中,上述聚类算法可以是聚类函数,聚合函数例如可以用Mean、Pool、LSTM等。
又一种可能的实现方式中,还可以查询预先建立的已知存在漏洞代码块类型的代码块特征数据库,将从待检测智能合约中提取到的未知类型的特征信息与已知存在漏洞的代码块类型的代码块特征数据库的代码块特征进行比对,将代码块特征相同的代码块类型确定为待检测智能合约的预测漏洞代码块。其中,该代码块特征库可以是对不同代码块类型、代码块形态和结构等特征的代码块数据进行汇总和分类整理后构建的。其中,上述预测漏洞代码块用于标识待检测智能合约中存在漏洞的代码块,以便能够通过预测漏洞代码块快速获取到存在漏洞代码块的信息、特点等。
本申请实施例中,通过将待检测智能合约输入预测网络中进行预测处理,很大程度上提高了确定预测漏洞代码块的准确度,能够更加精准地得到预测漏洞代码块,为后续候选执行路径的确定提供了精准的指导信息,实现更高精度的漏洞检测。
S103、根据预测漏洞代码块确定多个执行路径中的候选执行路径;候选执行路径为包含预测漏洞代码块的执行路径。
由于每个执行路径包括至少一个用于执行待检测智能合约的代码块,为了减少消耗在无漏洞的执行路径的检测时间,需要在进行漏洞检测之前,从多个执行路径中去除不存在漏洞的无效执行路径,从而确定出存在漏洞的候选执行路径。可以在得到预测漏洞代码块后,根据预测漏洞代码块确定多个执行路径中包含预测漏洞代码块的候选执行路径。其中,该候选执行路径的数量可以是一个、两个或者多个。每个候选执行路径包含的预测漏洞代码块的数量也可以是一个、两个或者多个。
作为一种可选的实现方式,可以先确定多个执行路径中每个执行路径包含的所有代码块,然后判断该执行路径中的每个代码块是否为预测漏洞代码块,当确定出每个代码块均不为预测漏洞代码块,则将该执行路径作为无效执行路径,无需对其进行漏洞检测处理,可以进行丢弃处理;如果确定出该执行路径中的代码块中为预测漏洞代码块,则将该执行路径确定为候选执行路径。
作为另一种可选的实现方式,可以先获取预测漏洞代码块,然后查找多个执行路径中的每个执行路径是否存在预测漏洞代码块,如果该执行路径中存在预测漏洞代码块,则将该执行路径确定为候选执行路径;如果该执行路中不存在预测漏洞代码块,则将该执行路径作为无效执行路径,无需对其进行漏洞检测处理,可以进行丢弃处理。
示例性地,当获取到待检测智能合约,该待检测智能合约包括多个代码块,分别为A、B、C、D、E,并确定出B、C为预测漏洞代码块,可以对待检测智能合约进行编译处理,得到字节码,并对字节码进行切割处理,从而构建出控制流图,进而根据控制流图得到待检测智能合约的多个执行路径分别为A→B→C,A→D,A→B→E,则基于预测漏洞代码块B和C,确定出多个执行路径A→B→C,A→D,A→B→E中包含预测漏洞代码块的候选执行路径分别为:A→B→C,A→B→E,从而对候选执行路径进行漏洞检测,以得到漏洞检测结果。其中,执行路径A→D中不包含预测漏洞代码块,将其作为无效执行路径,可以丢弃处理。
本实施例中由于存在漏洞代码块往往与不存在漏洞的代码块有很大的区别,通过基于预测漏洞代码块,确定多个执行路径中的候选执行路径,能够结合了更为精细且全面的存在漏洞的代码特征来确定候选执行路径,从而使得后续仅需要对候选执行路径进行漏洞检测,有效提高了待检测智能合约的漏洞检测效率。
S104、对候选执行路径进行漏洞检测,获得漏洞检测结果。
需要说明的是,上述漏洞检测结果是指对待检测智能合约进行分析和漏洞检测后得到的处理结果,用于标识待检测智能合约中存在漏洞数据的身份信息,以便能够快速获取待检测智能合约中存在的漏洞类型信息和漏洞属性特点等。
可以理解的是,由于待检测智能合约包含了有关交易的所有信息,只有在满足要求后才会执行结果操作,本实施例中通过对待检测智能合约中的候选执行路径进行漏洞检测,能够避免出现的各种安全问题,例如无法存储和保护合约数据,函数或变量被任意用户或变量调用,异常处理失败、无法使用安全的随机数、缓存溢出问题等。
可选的,上述待检测智能合约的漏洞类型信息可以包括可重入攻击,整型溢出,短地址/参数,访问权限控制,随机数误用,拒绝服务,调用未知函数,private保持隐私,语法风格等,其中,重入攻击是指外部调用时,可利用多余的gas重复进入合约以进行执行额外的操作;整数溢出是指整数运算操作而未检测其范围造成的溢出;短地址/参数是指地址不是160位;访问权限控制是指使用tx.origin进行权限验证;随机数误用是指利用下一个区块的哈希值或时间戳作为生成随机数的种子;拒绝服务是指gas耗尽或程序出现逻辑错误,比如使用底层函数调用不熟悉;调用未知函数是指默认调用fallback函数;private保持隐私是指private不能保证修饰的变量的隐私;语法风格是指待检测智能合约不具备良好的编码规范使代码更容易出现错误。
在获取到候选执行路径后,可以采用漏洞检测方法对候选执行路径进行漏洞检测,从而得到漏洞检测结果。其中,上述漏洞检测方法可以是形式化验证法、符号执行法、模糊测试法、中间表示法、深度学习法等。其中,上述形式化验证法可以是采用漏洞检测工具KEVM、framework、VaaS;符号执行法可以是采用漏洞检测工具Oyente、MAIAN、Securify、TeEther;模糊测试法是采用漏洞检测工具ILF、Regurad;中间表示法可以通过Ethir、Vandal、Slither;深度学习法是采用漏洞检测工具SaferSC、TMP。
请参见图5所示,在获取到待检测智能合约5-1时,可以确定待检测智能合约5-1的多个执行路径5-2,然后将待检测智能合约5-1输入预测网络5-3中进行漏洞位置预测,得到待检测智能合约中的预测漏洞代码块5-4,并根据预测漏洞代码块5-4确定多个执行路径5-2中的候选执行路径5-5,然后对候选执行路径5-5进行漏洞检测时,得到漏洞检测结果5-6。
本实施例中,在得到漏洞检测结果后,可以确定出该待检测智能合约中存在的各漏洞的漏洞类型,以及各漏洞在待检测智能合约的源文件中的对应行数,并根据漏洞类型确定各漏洞的漏洞来源,然后根据各漏洞的漏洞类型、漏洞来源与对应行数生成漏洞检测报告。
本申请实施例中提供的智能合约漏洞检测方法,相比于现有技术而言,一方面,通过获取待检测智能合约,能够全面地确定到待智能合约可能存在漏洞的多个执行路径,在得到多个执行路径这一指导信息后通过预测网络对待检测智能合约进行漏洞预测,能够更精细地对用于执行待检测智能合约的代码块进行漏洞检测,从而更精准地确定出存在漏洞的预测漏洞代码块。另一方面,根据预测漏洞代码块确定多个执行路径中的候选执行路径,结合了更为精细且全面的存在漏洞的代码特征来确定候选执行路径,从而仅需要对候选执行路径进行漏洞检测,有效提高了待检测智能合约的漏洞检测准确度,并且减少了消耗在无漏洞的执行路径上的检测时间,提高了漏洞检测效率,进一步增强了智能合约部署的安全性。
在本申请的另一实施例中,还提供了一种将待检测智能合约输入预测网络中,得到待检测智能合约中的预测漏洞代码块的具体实现方式。图6提供了得到待检测智能合约中的预测漏洞代码块的方法流程示意图。请参见图6所示,具体包括:
S201、对待检测智能合约进行划分,得到待检测智能合约的多个代码块。
需要说明的是,上述待检测智能合约的多个代码块用于描述待检测智能合约的处理逻辑信息,其中,多个代码块中的各个代码块用于描述的处理逻辑信息不同。该多个代码块可以是对待检测智能合约进行划分处理后得到的。每个代码块所包含的代码数量和代码内容也不相同。代码块是指一段连续无分支的代码。
在对上述待检测智能合约进行划分处理时,可以采用预设的划分处理规则,得到待检测智能合约的多个代码块。其中,该划分处理规则是根据实际需求,自定义设置的用于对智能合约进行划分的规则,例如可以是一种通用的划分处理算法,也可以是一种训练完成得到的划分处理模型。
作为一种可选的实现方式,在获取到待检测智能合约后,可以对待检测智能合约进行编译处理,得到待检测智能合约的编译结果,然后基于编译结果对待检测智能合约进行切割处理,得到待检测智能合约的多个代码块。
可以理解的是,一般智能合约在编写好之后需要通过编译器编译后才能在虚拟机上运行,可以将智能合约进行编译得到的编译结果称为字节码。其中,字节码是一串十六进制数字编码的字节数组。字节码的解析是以一个字节为单位,每个字节都表示一个虚拟机(Ethereum Virtual Machine,EVM)指令或一个操作数据。
作为另一种可选的实现方式,可以通过划分处理模型对待检测智能合约进行划分处理,得到多个代码块。其中,该划分处理模型可以是通过对样本智能合约进行训练,从而学习到具备划分处理能力的网络结构模型。划分处理模型的输入为待检测智能合约,输出为多个代码块,且具有对待检测智能合约进行划分处理的能力,是能够得到待检测智能合约的多个代码块的网络模型。该划分处理模型可以包括多层网络结构,不同层的网络结构对输入其的数据进行不同的处理,并将其输出结果传输至下一网络层,直至通过最后一个网络层进行处理,得到多个代码块。
S202、利用预测网络对待检测智能合约的每一代码块进行漏洞概率预测,获得待检测智能合约的每一代码块存在漏洞的概率值。
S203、根据待检测智能合约的每一代码块存在漏洞的概率值,确定待检测智能合约中的预测漏洞代码块。
在利用预测网络对待检测智能合约的每一代码块进行漏洞概率预测之前,需要对每一代码块进行向量化和组合处理,以将其处理为符合预测网络输入数据的格式。请参见图7所示,当获取的待检测智能合约7-1包括第一代码块、第二代码块...第n代码块时,可以针对每一代码块进行向量化和组合处理7-2,通过利用词法分析转换处理为多个单词序列,其中,第一代码块通过词法分析处理为第一单词序列,第二代码块通过词法分析处理为第二单词序列,...第n代码块通过词法分析处理为第n单词序列,然后对多个单词序列中的每个单词序列进行向量化处理,得到对应的多个词向量,并对多个词向量进行组合处理,得到每个代码块对应的特征矩阵,包括第一特征矩阵,第二特征矩阵...第n特征矩阵,其中n为正整数。然后将各个特征矩阵输入预测网络7-3中进行漏洞位置预测处理,得到预测漏洞代码块7-4。
其中,在对每一代码块进行处理的过程中,可以先对代码块的源程序进行预处理,例如删除代码块中的注释和回车换行符、宏展开、文件包含嵌入与条件编译的嵌入等,然后识别源程序中的单词,创建符号表并在相应的符号表中登记信息(即单词在符号表中进行登记:是什么,类型是什么),然后将单词与行号关联起来,以便编译器能将错误信息与源程序位置联系起来,从而输出单词序列。
可以理解的是,词法分析的任务是对输入字符串形式的源程序进行扫描,根据源语言的词法规则识别具有独立意义的单词,并产生与其等价的单词符号序列进行输出。
在利用词法分析将代码块转换处理为多个单词序列后,可以利用word2vec模型将多个单词序列中的每个单词进行向量化处理,得到每个单词对应的词向量。在得到每个单词对应的词向量后,可以对其进行组合处理,例如可以是对其进行叠加处理,从而得到代码块对应的特征矩阵。
需要说明的是,word2vec模型是用于将单词转换为词向量的一个模型,可用来表示词对词之间的关系,可以分别包括skip-gram和CBOW两种算法,其中,skip-gram是通过中心词去预测中心词周围的词,CBOW是通过周围的词去预测中心词。
本实施例中,上述预测网络用于负责建立待检测智能合约与存在漏洞的代码块类型之间的关系,其模型参数已处于最优的状态。其中,该预测网络可以包括但不限于卷积层、归一化层、全连接层和激活函数,卷积层、全连接层可以包括一层,或者也可以包括多层。卷积层用于对待检测智能合约的每一代码块进行特征提取,归一化层用于对卷积层处理后的特征归一化处理为统一大小的特征矩阵,全连接层主要是用于对统一大小的特征矩阵进行分类的作用。其中,可以将待检测智能合约的每一代码块通过卷积层进行处理,得到卷积特征,然后将卷积特征通过归一化层进行归一化处理,得到统一大小的特征矩阵,并通过全连接层进行处理,得到全连接向量,然后将全连接向量通过激活函数进行处理,从而得到预测网络的输出结果,该输出结果可以包括存在漏洞的代码块类型,或者可以包括在代码块类型下存在漏洞的多个代码块属性。其中,该输出结果另可以通过每一代码块存在漏洞的概率值进行表示。然后根据待检测智能合约的每一代码块存在漏洞的概率值,确定待检测智能合约中的预测漏洞代码块。
其中,上述激活函数可以是Sigmoid函数,也可以是Tanh函数,还可以是ReLU函数,通过将全连接向量经过激活函数处理,能够将其结果映射到0~1之间。
需要说明的是,上述预测漏洞代码块可以是预测的存在漏洞的概率值高于预设阈值的代码块,也可以是预测的存在漏洞的概率值最高的代码块。预设阈值可以是根据实际需求进行自定义设置的。该预测漏洞代码块可以包括待检测智能合约中存在漏洞的代码块类型,或者可以包括待预测智能合约中在代码块类型下存在漏洞的多个代码块属性。其中,上述预测漏洞代码块的数量可以是多个,也可以是一个。
一种可能的实现方式中,上述预测网络对待检测智能合约的处理具体包括:在对待检测智能合约进行处理的过程中,可以是先通过对待检测智能合约的每一代码块进行特征提取,得到特征信息,再通过多分类函数对特征信息进行运算,输出存在漏洞的代码块类型。还可以通过多元二分类对特征信息进行运算,输出存在漏洞的代码块类型属性。可选的,上述多分类函数可以是softmax函数,上述多元二分类函数可以是多个sigmoid函数,一个sigmoid函数可以实现一个二分类预测。其中,上述多分类函数的作用是用来加入非线性因素,因为线性模型的表达能力不够,能够把输入的连续实值变换为0和1之间的输出。
示例性地,以通过java语言编译的待检测智能合约为例,将待检测智能合约输入预测网络中,预测网络的预测结果可以包括“普通代码块”、“构造代码块”、“同步代码块”和“静态代码块”等代码块类型中的任意一个。其中,预测结果还可以包括代码块属性,例如代码块类型“普通代码块”对应的代码块属性可以是“逻辑函数”、“统计函数”、“文本函数”和“查找与引用函数”。
其中,以四分类为例,介绍多分类函数的输出。例如,多分类函数能够预测的代码块类型分别为“普通代码块”、“构造代码块”、“静态代码块”和“同步代码块”,上述预测网络的输出结果可以是通过向量表示,例如可以是一个4*1维的向量,该向量中的每一个元素对应一个代码块类型,向量中的每个元素值表示待检测智能合约存在漏洞为对应标签种类的概率。假设多分类函数的输出向量为[0.21,0.4,0.31,0.08],则表示待检测智能合约中“普通代码块”存在漏洞的概率值为0.21,待检测智能合约中“构造代码块”存在漏洞的概率值为0.4,待检测智能合约中“静态代码块”存在漏洞的概率值为0.31,待检测智能合约中“同步代码块”存在漏洞的概率值为0.08,可以选择存在漏洞的概率值最大的元素值作为待检测智能合约的预测结果,即将“构造代码块”作为待检测智能合约中的预测漏洞代码块。
以三元二分类为例,介绍多元二分类函数的输出。例如,多元二分类函数能够预测的代码块属性用“逻辑函数”、“统计函数”、“文本函数”和“查找与引用函数”表示,其输出结果可以是通过向量表示,例如可以是一个4*1维的向量,该向量中的每一个元素对应一个存在漏洞的代码块属性,向量中的每个元素值表示待检测智能合约中存在漏洞的对应代码块属性的概率。假设三元二分类函数的输出向量为[0.51,0.15,0.22、0.62],则表示这个待检测智能合约为“逻辑函数”存在漏洞的概率值为0.51,待检测智能合约为“统计函数”存在漏洞的概率值为0.15,待检测智能合约为“文本函数”存在漏洞的概率值为0.22,待检测智能合约为“查找与引用函数”存在漏洞的概率值为0.62。假设预设阈值为0.5,将概率值大于预设阈值的概率值的元素值为作为待检测智能合约的预测结果,即将“逻辑函数”和“查找与引用函数”作为多元二分类函数的预测漏洞代码块。
本申请实施例中,通过将待智能进行划分,得到待检测智能合约的多个代码块,并通过预测网络得到每一代码块存在漏洞的概率值,进而能够精准地确定出预测漏洞代码块,由于含有漏洞的代码块往往与不存在漏洞的代码块有较大的区别,很大程度上提高了确定待检测智能合约中预测漏洞位置的准确度,避免额外消耗时间在无漏洞的路径检测上,提高了漏洞检测效率。
在本申请的另一实施例中,还提供了一种对待检测智能合约进行划分,得到待检测智能合约中的多个代码块的具体实现方式。通过对待检测智能合约进行编译处理,得到待检测智能合约的字节码,然后对字节码进行切割处理,得到待检测智能合约的多个代码块。
具体的,可以采用编译器对待检测智能合约进行编译处理,得到待检测智能合约的字节码,该编译器可以与待检测智能合约所使用的编程语言相对应,例如当待检测智能合约为Solidity语言时,对应的编译器可以是Solidity编译器;当待检测智能合约为java语言时,对应的编译器可以是java编译器。
作为一种可实现方式,可以直接采用切割代码切割算法对字节码进行切割处理,得到待检测智能合约的多个代码块。其中,该代码块是指待检测智能合约中所包含的所有代码块,该代码块可以是未知执行路径顺序信息的代码块。
作为另一种可实现方式,可以采用代码切割算法对字节码进行切割处理,构建待检测智能合约的控制流图,并基于控制流图,得到待检测智能合约的多个代码块。其中,该代码块是指待检测智能合约中所包含的所有代码块,该代码块可以是已知执行路径顺序信息的代码块。可以理解的是,在控制流图中,结点为代码块,代码块之间的边表示代码块之间存在跳转,且待检测智能合约的第一句代码为控制流图中代码块的唯一入口,最后一句代码可以为控制流图中代码块的唯一出口。
其中,在构建控制流图的过程中,可以先对待检测智能合约中的跳转指令生成跳转记录,且对待检测智能合约中的函数指令生成函数记录,该跳转记录用于表征跳转指令的跳转地址,函数记录用于表征函数指令的边界地址,然后通过反汇编工具将字节码转换为指令序列,并将指令序列进行划分得到具有顺序信息的多个指令基本块,将每个指令基本块作为控制流图中的节点,根据跳转记录、函数记录和顺序信息,生成各节点之间的有向边,从而得到控制流图。
其中,跳转指令可以包括JUMP指令、JUMPI指令、REVERT指令、SELFDESTRUCT指令。
其中,可以参见图4所示,在构建出函数test对应的控制流图后,得到对应的多个代码块分别为A、B、C和D。
本实施例中通过对待检测智能合约进行编译处理,得到待检测智能合约的字节码,并进行切割处理,从而精准地确定出待检测智能合约的多个代码块,进而能够提高待检测智能合约漏洞的预测位置。
在本申请的另一实施例中,还提供了对预测网络进行训练的训练过程的具体实现方式。请参见图8所示,该训练过程具体包括:
S301、获取样本智能合约,该样本智能合约包括的样本代码块标注有对应的漏洞分类结果。
具体地,上述样本智能合约是指已知漏洞分类结果的智能合约,可以是已经进行漏洞检测完成的智能合约,该样本智能合约可以是一个,也可以是多个,其中,每个样本智能合约包括至少一个样本代码块,该样本代码块中标注有对应的漏洞分类结果。多个样本代码块中的各个样本代码块用于描述的处理逻辑信息不同。该样本代码块是指一段连续无分支的代码。
可选的,上述样本智能合约可以是从数据库中获取,也可以是从区块链浏览器Etherscan上获取,还可以是从通用漏洞披露表(Common Vulnerabilities&Exposures,CVE)上获取,也可以从外部设备导入获取得到。其中,CVE是一个公开已知的网络安全漏洞和暴露的列表,列表中的每一项都是基于在特定软件产品中发现的特定漏洞或暴露,而不是基于一般类别或类型的漏洞或暴露。
S302、基于样本智能合约和漏洞分类结果训练预测网络。
可以理解的是,在获取样本智能合约后,该样本智能合约不满足训练初始预测网络的输入要求,因此需要对其进行处理,可以对样本智能合约进行向量化和组合处理,从而得到符合输入初始预测网络的输入要求的数据。
本实施例中,在获取到样本智能合约后,可以对样本智能合约进行分析处理,得到样本智能合约的多个样本代码块block,该样本代码块block中标注有漏洞分类结果label,则根据样本代码块和漏洞分类结果构成{(block_i,label)}对初始预测网络进行训练,以构建预测网络,其中,i为样本代码块个数,i为正整数。通过先对多个样本代码块中的每个样本代码块进行预处理,得到每个样本代码块对应的特征矩阵M,然后基于特征矩阵和对应的漏洞分类结果形成{(M_i,label)}进行训练预测网络,通过将特征矩阵输入初始预测网络中,得到每个样本代码块存在漏洞的预测值,然后根据每个样本代码块存在漏洞的预测值与漏洞分类结果,计算损失函数,按照损失函数最小化,采用迭代算法迭代调整初始预测网络的参数,得到预测网络。其中,该迭代算法例如可以是采用梯度下降法。
其中,在对样本代码块中的每个样本代码块进行预处理时,可以对于每个样本代码块,利用词法分析转换处理为多个单词序列,并将多个单词序列中的每个单词序列进行向量化处理,得到对应的多个词向量,然后对多个词向量进行组合处理,得到每个样本代码块对应的特征矩阵。
具体的,可以获取样本代码块的源码,并去除样本代码块中与单词无关的数据,从而得到处理后的源码,然后识别处理后的源码中的单词,将单词与源码的位置进行关联,得到样本单词序列,并利用word2vec模型将多个样本单词序列中的每个单词进行向量化处理,得到多个单词对应的词向量,并对该多个单词对应的词向量对其进行组合处理,得到该样本代码块对应的特征矩阵。
需要说明的是,上述初始预测网络是一个输入为每个样本代码块对应的特征矩阵,输出为每个样本代码块存在漏洞的预测值,且具有对样本智能合约进行特征提取的能力,能够预测样本智能合约中每个样本代码块存在漏洞的预测值的神经网络模型。该初始预测网络可以是进行迭代训练时的初始模型,即初始预测网络的模型参数处于初始的状态,也可以是上一轮迭代训练中调整后的模型,即初始预测网络的模型参数处于中间的状态。可以将每个样本代码块对应的特征矩阵输入第一初始网络,得到输出结果,该输出结果可以包括每个样本代码块存在漏洞的预测值。
在得到多个样本代码块对应的特征矩阵后,可以将其按照一定比例随机分为训练集和验证集,其中,训练集用于对初始预测网络进行训练,以得到训练好的初始预测网络,验证集用于对训练好的初始预测网络进行验证,以验证预测网络性能的好坏。然后分别将训练集的每一样本代码块输入待训练的初始预测网络进行漏洞处理,得到待验证的初始预测网络。
本实施例中,上述初始预测网络可以包括但不限于卷积层、归一化层、全连接层和激活函数,卷积层、全连接层可以包括一层,或者也可以包括多层。将每个样本代码块对应的特征矩阵输入初始预测网络,可以先通过卷积层对样本智能合约的每一样本代码块进行特征提取,得到样本特征信息,然后将样本特征信息过归一化层进行归一化处理,得到统一大小的特征矩阵,并通过全连接层进行处理,得到全连接向量,然后将全连接向量通过激活函数进行处理,从而得到初始预测网络的输出结果,该输出结果可以包括样本智能合约的每一样本代码块存在漏洞的预测值。
利用验证集对待验证的初始预测网络进行验证过程中,可以基于输出结果和每个样本代码块标注的漏洞分类结果,构建损失函数,按照损失函数最小化对待构建的初始预测网络进行优化处理,得到预测网络,根据输出结果和标注的漏洞分类结果之间的差异,对待构建的初始预测网络中的参数进行更新,以实现对初始预测网络进行训练的目的,其中,上述标注的漏洞分类结果可以是人工对样本智能合约中的样本代码块进行标注得到的漏洞分类结果。
可选的,上述对待验证的初始预测网络中的参数进行更新,可以是对待构建的初始预测网络中的权重矩阵以及偏置矩阵等矩阵参数进行更新。其中,上述权重矩阵、偏置矩阵包括但不限于是待验证的初始预测网络中的卷积层、归一化层、全连接层中的矩阵参数。
本申请实施例中,可以使用损失函数计算验证集输入待验证的初始预测网络中得到的结果和标签的漏洞分类结果的损失值,从而对待验证的初始预测网络中的参数进行更新。可选的,损失函数可以使用交叉熵损失函数,归一化交叉熵损失函数,或者可以使用Focalloss。
其中,通过损失函数对待验证的初始预测网络的参数进行更新时,可以是根据损失函数确定待验证的初始预测网络未收敛时,通过调整模型中的参数,以使得待验证的初始预测网络收敛,从而得到预测网络。待验证的初始预测网络收敛,可以是指待验证的初始预测网络对输出结果与标注的漏洞分类结果之间的差值小于预设阈值,或者,输出结果与标注的漏洞分类结果之间的差值的变化率趋近于某一个较低值。当计算的损失函数较小,或者,与上一轮迭代输出的损失函数之间的差值趋近于0,则认为待验证的初始预测网络收敛,即可得到预测网络。
在本申请的另一实施例中,还提供了一种对候选执行路径进行漏洞检测,获得漏洞检测结果的具体实现方式。请参见图9所示,该方法包括:
S401、根据候选执行路径中每一代码块存在漏洞的概率值,确定候选执行路径的优先级系数。
需要说明的是,上述候选执行路径优先级系数是指对候选执行路径进行漏洞检测顺序的对应系数,候选执行路径的优先级系数与候选执行路径进行漏洞检测的顺序相关,其中,候选执行路径的优先级系数越高,该候选执行路径进行漏洞检测的顺序越靠前;候选执行路径的优先级系数越低,其该候选执行路径进行漏洞检测的顺序越靠后。每一候选执行路径存在对应的优先级系数。
其中,在确定出候选执行路径中的每一代码块存在漏洞的概率值后,可以按照优先级确定规则对每一代码块存在漏洞的概率值进行处理,确定每一候选执行路径的优先级系数。该优先级确定规则可以是根据实际场景自定义设置的,例如可以是候选执行路径的每一代码块存在漏洞的概率值与优先级系数之间的映射关系。
作为一种可实现方式,可以对候选执行路径的每一代码块存在漏洞的概率值进行加权求和处理,得到候选执行路径的优先级系数。例如可以是奖每一代码块存在漏洞的概率值进行求和并除以对应所包含的代码块个数。
示例性地,当确定出两个候选执行路径分别为A→B→C,A→D,假设确定出该候选执行路径A→B→C所包含的每一代码块A、B、C存在漏洞的概率值为0.6、0.71、0.32,则根据每一代码块存在漏洞概率值进行加权求和处理,得到候选执行路径A→B→C的优先权系数为0.543,同理,假设候选执行路径A→D所包含的每一代码块A、D存在漏洞的概率值为0.6和0.2,则对0.6和0.2进行加权求和处理,得到候选执行路径A→D的优先权系数为0.4,则可以确定出候选执行路径A→B→C的优先权系数0.543大于候选执行路径A→D的优先权系数0.4,表示A→B→C比A→D进行漏洞检测的顺序更优先,从而在后续漏洞检测过程中,可以优先对候选执行路径A→B→C进行漏洞检测。
作为另一种可实现方式,可以确定候选执行路径中代码块存在漏洞的概率值中的最大概率值,基于最大概率值确定候选执行路径的优先级系数。
其中,可以是对候选执行路径中代码块存在漏洞的概率值按照从大到小的顺序进行排序,确定出最大概率值,然后将该最大概率值作为候选执行路径的优先级系数;也可以是对于任一候选执行路径,在确定出代码块的最大概率值后,将该最大概率值作为该执行候选路径对应的概率值,同理,确定出所有候选执行路径的概率值,然后根据所有候选执行路径的概率值确定每一候选执行路径的优先级系数。
示例性地,当确定出两个候选执行路径分别为A→B→C,A→D,假设确定出该候选执行路径A→B→C所包含的每一代码块A、B、C存在漏洞的概率值为0.6、0.71、0.32,候选执行路径A→D所包含的每一代码块A、D存在漏洞的概率值为0.6和0.2,则确定出候选执行路径A→B→C所包含的存在漏洞的代码块的最大概率值为0.71,即候选执行路径A→B→C的概率值为0.71;同理,确定出候选执行路径A→D所包含的存在漏洞的代码块的最大概率值为0.6,即候选执行路径A→B→C的概率值为0.6,则可以确定出候选执行路径A→B→C的优先权系数为0.71/(0.71+0.6)=0.542,候选执行路径A→D优先权系数为0.6/(0.71+0.6)=0.458,即可以确定出候选执行路径A→B→C的优先权系数0.542大于候选执行路径A→D的优先权系数0.458,表示A→B→C比A→D进行漏洞检测的顺序更优先,从而在后续检测过程中,可以优先对候选执行路径A→B→C进行漏洞检测。
S402、基于各候选执行路径的优先级系数从高到低的顺序,对各候选执行路径进行漏洞检测,得到漏洞检测结果。
在确定出各候选执行路径的优先级系数后,可以将各候选执行路径的优先级系数按照从高到低的顺序进行排序,得到候选执行路径的执行顺序列表,然后根据该执行顺序列表从高到低依次对各候选执行路径进行漏洞检测,得到漏洞检测结果。
其中,可以预先根据不同漏洞类型匹配设置对应的漏洞匹配规则,例如,预设的漏洞匹配规则可以是:网络服务漏洞匹配规则、外部库调用漏洞匹配规则、系统命令执行漏洞匹配规则、外部文件访问漏洞匹配规则、程序并发性漏洞匹配规则、范围查询风险漏洞匹配规则、链码字段声明漏洞匹配规则、读写不一致漏洞匹配规则和未检查的错误漏洞匹配规则。
在对任一候选执行路径进行漏洞检测的过程中,可以先确定候选执行路径上的属性信息,然后将属性信息依次与预设漏洞匹配规则中各漏洞匹配规则进行匹配,该属性信息例如可以包括候选执行路径上的各代码块信息和各代码块之间的信息,根据匹配结果确定漏洞检测结果。可选的,可以是采用静态分析的方法、模糊分析的方法或符号执行的方法判断属性信息是否与预设漏洞匹配规则中各漏洞匹配规则进行匹配。
例如,当候选执行路径A→B→C的匹配结果用于表征该执行路径上的属性信息与预设漏洞匹配规则中的网络服务漏洞匹配规则匹配一致时,则确定出该候选执行路径A→B→C的漏洞检测结果为存在网络服务漏洞;又如,当候选执行路径A→D的匹配结果用于表征该执行路径上的属性信息与预设漏洞匹配规则中的外部库调用漏洞匹配规则匹配一致时,则确定出该候选执行路径A→D的漏洞检测结果为存在外部库调用漏洞。
本实施例中通过确定候选执行路径的优先级系数,能够使得存在漏洞可能性较大的候选执行路径获得更高的优先级,从而对优先级系数越大的候选执行路径优先进行路径探索和漏洞检测,进一步加快了漏洞检测效率。
在本申请的另一实施例中,还提供了一种对候选执行路径进行漏洞检测,获得漏洞检测结果的具体实现方式。通过对候选执行路径中的代码块以及相邻代码块之间的约束条件进行符号转化处理,得到候选执行路径的符号处理结果,然后基于符号处理结果进行漏洞检测,获得漏洞检测结果。
需要说明的是,上述符号处理结果可以是对候选执行路径进行符号执行后得到的处理结果,例如可以是对约束条件进行求得的组合解。其中,在进行符号转化处理的过程中可以是采用符号执行器,该符号执行器可以包括符号执行算法,即利用符号值代替具体值执行待检测智能合约,探测待检测智能合约的候选执行路径,并通过约束求解器对该候选执行路径中各个代码块之间的约束条件进行求解,求得到能够执行该对应候选执行路径的具体值,并基于该具体值进行漏洞检测,获得漏洞检测结果。
可以理解的是,符号执行的核心思想是使用符号值代替具体值执行待检测智能合约的程序。对于程序分析过程中任意不确定值的变量,包括环境变量和输入等,都可以用符号值代替。其中,符号执行中的“执行”是指解析待检测智能合约的程序候选执行路径上的代码块指令,根据其语句更新程序执行状态。
其中,通过符号执行检测待检测智能合约进行漏洞检测的一般过程为:对候选执行路径进行探索,通过对候选执行路径中的代码块以及相邻代码块之间的约束条件进行求解处理,得到能够执行该候选执行路径的真实值,并判断该候选执行路径是否可以到达,在特定的代码块上检测变量的取值是否满足漏洞存在的条件。
可选的,在对约束条件进行求解处理时可以采用约束求解器进行求解。例如可以先获取候选执行路径中相邻代码块之间的各约束条件组合,确定与各约束条件组合对应的约束求解方法,依据约束求解方法对各约束条件组合进行约束求解,并将使得各约束条件组合中所有约束条件的布尔值均取真值的变量取值确定为各约束条件组合对应的组合解。
对于任一候选执行路径,在基于符号处理结果进行漏洞检测时,可以采用Oyente检测工具,也可以采用Maian检测工具,还可以采用Securify检测工具,从而得到漏洞检测结果。可选的,上述漏洞检测结果可以是可重入漏洞、异常处理漏洞、交易顺序依赖漏洞、资产无限期冻结的合约漏洞、易泄露资产给陌生账户的合约漏洞、合约可以被任何人随意销毁的漏洞等。
其中,该Oyente是最早的智能合约漏洞静态检测工具之一,其支持的检测的漏洞类型包括可重入漏洞、异常处理漏洞、交易顺序依赖漏洞等。Maian是一种基于符号分析的智能合约分析工具,它通过长序列的智能合约调用过程来发现安全漏洞,区别于一般的合约分析工具,Maian只专注于3种类型的合约漏洞,即资产无限期冻结的合约漏洞(Greedy),易泄露资产给陌生账户的合约漏洞(Prodigal),合约可以被任何人随意销毁的漏洞(Suicidal)。Securify是一种用于以太坊智能合约的静态安全分析器,具有可伸缩、完全自动化、准确率高等特性,其通过分析合约的依赖图以及从代码中提取精确的语义信息来检查智能合约的合规性与安全漏洞。
需要说明的是,在确定出各候选执行路径的优先级系数后,可以按照候选执行路径的优先级系数从高到低的顺序,对各候选执行路径进行漏洞检测,得到各候选执行路径对应的漏洞检测结果。在得到各候选执行漏洞检测结果后,可以进一步确定各漏洞在源文件中的对应行数,根据漏洞检测结果确定各漏洞的漏洞来源,并根据各漏洞的漏洞检测结果、漏洞来源与对应行数生成漏洞检测报告。
本实施例中通过对对候选执行路径中的代码块以及相邻代码块之间的约束条件进行符号转化处理,得到符号处理结果,并进行漏洞检测,得到漏洞检测结果,具有很高的代码覆盖率,提高了漏洞检测效率,并且显著地节省漏洞分析过程中的计算资源和时间开销。
为了更好的理解本申请实施例,下面来进一步说明本申请提出的智能合约漏洞检测的方法的完整流程图方法。如图10所示,该方法可以包括以下步骤:
S501、获取待检测智能合约,确定待检测智能合约的多个执行路径。
S502、对待检测智能合约进行划分,得到待检测智能合约的多个代码块。
具体地,上述待检测智能合约可以是需要在区块链上部署的智能合约,可以通过调用智能合约采集装置对智能合约代码进行采集,例如可以是通过云端获取,通过向云端中发送携带有待检测合约标识的合约获取请求,使得云端响应于该合约获取请求,基于待检测合约标识,查找并获取待检测智能合约,并将待检测智能合约发送至计算机设备,从而使得计算机设备获得待检测智能合约。其中,上述待检测智能合约可以是Solidity语言。该待检测智能合约可以包括各种不同类型的函数,例如可以包括test函数。
在获取到待检测智能合约后,可以对待检测智能合约进行编译处理,得到待检测智能合约的字节码,并对字节码进行切割处理,例如采用切割代码基本块的方法,从而构建控制流图的边和各个基础块,构建得到对应的控制流图,并根据控制流图确定待检测智能合约中的多个执行路径,进而确定出待检测智能合约的多个代码块。
示例性地,例如如下为检测智能合约中部分的test函数源码,其中,为了便于理解下述代码使用源码表示,而实际运行时是根据字节码构建控制流图:
可以对该待检测智能合约进行编译处理,得到待检测智能合约的字节码,然后对字节码进行切割处理,构建得到控制流图,该控制流图可以参见图11所示。然后遍历控制流图,可以得到该控制流图中的各个代码块分别为a、b、c和d,并根据控制流图中的各个代码块,确定出该待检测智能合约的多个执行路径,即存在两条执行路径,一条为a→b→c,另一条为a→d。
S503、利用预测网络对待检测智能合约的每一代码块进行漏洞概率预测,获得待检测智能合约的每一代码块存在漏洞的概率值。
S504、根据待检测智能合约的每一代码块存在漏洞的概率值,确定待检测智能合约中的预测漏洞代码块。
请参见图12所示,以待检测智能合约包括的test函数为例,在确定出待检测智能合约的每一代码块a、b、c和d后,可以利用训练好的预测网络对待检测智能合约进行漏洞概率预测处理,需要对a、b、c和d中的每一代码块进行向量化和组合处理,以将其处理为符合预测网络输入数据的格式。针对a、b、c和d中的代码块a,利用词法分析转换处理为多个单词序列,然后对多个单词序列中的每个单词序列进行向量化处理,得到对应的多个词向量,并对多个词向量进行组合处理,得到代码块a对应的特征矩阵E1,同理,采用上述方法分别对代码块b、c和d进行向量化和组合处理,从而得到代码块b、c和d对应的特征矩阵E2、E3和E4
在得到代码块a、b、c和d对应的特征矩阵E1、E2、E3和E4后,可以将该特征矩阵E1、E2、E3和E4输入训练好的预测网络中,具体可以是先通过卷积层对待检测智能合约的每一代码块进行特征提取,得到卷积特征,然后通过归一化层对卷积层处理后的特征归一化处理为统一大小的特征矩阵,并通过全连接层进行处理,得到全连接向量,然后将全连接向量通过激活函数进行处理,从而得到预测网络的输出结果,该输出结果可以是待检测智能合约的每一代码块a、b、c和d存在漏洞的概率值,例如得到的代码块a、b、c和d存在漏洞的概率值分别为0.3、0.54、0.55、0.65,则可以将各个概率值分别与预设概率阈值进行比较,假设概率阈值为0.5,则将概率值高于预设概率阈值的代码块确定为待检测智能合约中的预测漏洞代码块,即可以得到代码块b、c和d对应的存在漏洞的概率值大于预设阈值,即确定出待检测智能合约中的预测漏洞代码块分别为b、c和d。
S505、根据预测漏洞代码块确定多个执行路径中的候选执行路径。
在确定出预测漏洞代码块后,可以查找多个执行路径中的每个执行路径是否存在预测漏洞代码块,如果该执行路径中存在预测漏洞代码块,则将该执行路径确定为候选执行路径;如果该执行路中不存在预测漏洞代码块,则将该执行路径作为无效执行路径,并丢弃处理。
其中,在得到预测漏洞代码块为b、c和d后,可以确定多个执行路径a→b→c和a→d中的候选执行路径,查询到执行路径a→b→c中存在有预测漏洞代码块b、c,且执行路径a→d中存在有预测漏洞代码块d,则确定出候选执行路径为a→b→c和a→d。
S506、根据候选执行路径中每一代码块存在漏洞的概率值,确定候选执行路径的优先级系数。
对于每一候选路执行路径,可以确定候选执行路径中代码块存在漏洞的概率值中的最大概率值,基于最大概率值确定候选执行路径的优先级系数。
其中,上述候选执行路径为a→b→c中所包含的存在漏洞的代码块为b、c,且对应的概率值为0.54和0.55,则可以选择最大概率值0.55作为候选执行路径a→b→c的概率值,并确定优先级系数为0.504;同理,候选执行路径a→d所包含的存在漏洞的代码块为d,且对应的概率值为0.65,则可以确定候选执行路径a→d对应的概率值为0.65,并确定优先级系数可以为0.65。
S507、基于各候选执行路径的优先级系数从高到低的顺序,对各候选执行路径进行漏洞检测,得到漏洞检测结果。
在确定出各候选执行路径的优先级系数后,可以将各候选执行路径的优先级系数按照从高到低的顺序进行排序,得到候选执行路径的执行顺序列表,然后根据该执行顺序列表从高到低依次对各候选执行路径进行漏洞检测,得到漏洞检测结果。
具体的,在确定出候选执行路径a→b→c对应的优先级系数0.504,且候选执行路径a→d对应的优先级系数可以为0.65时,可知,候选执行执行路径a→d对应的优先级系数高于候选执行路径a→b→c对应的优先级系数,得到候选执行路径的执行顺序列表L,然后根据执行顺序列表L先对候选执行路径a→d进行漏洞检测,再对候选执行路径a→b→c进行漏洞检测,从而得到漏洞检测结果。其中,得到的候选执行路径的执行顺序列表L如下所示:
序号 候选执行路径 优先级系数
1 a→d 0.65
2 a→b→c 0.504
在对候选执行路径a→b→c进行漏洞检测的过程中,可以采用符号执行器对候选执行路径a→b→c进行探索,获取候选执行路径中的相邻代码块之间的约束条件,该约束条件包括z=x和x>y-10,然后对约束条件进行求解,即可得到能够执行该候选执行路径的真实值,通过符号化地执行候选执行路径,以判断该候选执行路径是否可行,在判断该候选执行路径在执行代码块c时会报错,并判断是否满足漏洞类型对应的条件,即可确定出候选执行路径存在的漏洞类型。同理,可以采用符号执行器对候选执行路径a→d进行漏洞检测,得到对应的漏洞检测结果,进而生成对应的漏洞检测报告。
请参见图13所示,在获取到待检测智能合约8-1时,可以构建控制流图8-2,然后根据控制流图8-2确定待检测智能合约8-1的多个执行路径8-3,并将待检测智能合约8-1输入预测网络8-4中进行漏洞位置预测,得到待检测智能合约中的预测漏洞代码块8-5,并根据预测漏洞代码块8-5确定多个执行路径8-3中的候选执行路径8-6,然后确定候选执行路径的优先级系数,根据优先级系数从高到低对候选执行路径进行排序,得到排序后的路径列表8-7,并根据排序后的路径列表8-7,采用符号执行器8-8依次对候选执行路径进行漏洞检测,得到漏洞检测结果8-9。
本实施例中通过预测网络能够精准地确定出待检测智能合约中存在漏洞的代码块,结合了更为精细且全面的存在漏洞的代码特征来确定候选执行路径,从而能够优先对候选执行路径进行漏洞检测,有效提高了待检测智能合约的漏洞检测准确度,并且减少了消耗在无漏洞的执行路径上的检测时间,提高了漏洞检测效率。
应当注意,尽管在附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。相反,流程图中描绘的步骤可以改变执行顺序。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
图14为本申请实施例提供的智能合约漏洞检测装置的结构示意图。如图14所示,该装置可以包括:
执行路径确定模块610,用于获取待检测智能合约,确定待检测智能合约的多个执行路径;执行路径包括至少一个用于执行待检测智能合约的代码块;
预测模块620,用于将待检测智能合约输入预测网络中,得到待检测智能合约中的预测漏洞代码块;
候选路径确定模块630,用于根据预测漏洞代码块确定多个执行路径中的候选执行路径;候选执行路径为包含预测漏洞代码块的执行路径;
检测模块640,用于对候选执行路径进行漏洞检测,获得漏洞检测结果。
可选的,请参见图15所示,上述预测模块620,包括:
划分单元621,用于对待检测智能合约进行划分,得到待检测智能合约的多个代码块;
预测单元622,用于利用预测网络对待检测智能合约的每一代码块进行漏洞概率预测,获得待检测智能合约的每一代码块存在漏洞的概率值;
确定单元623,用于根据待检测智能合约的每一代码块存在漏洞的概率值,确定待检测智能合约中的预测漏洞代码块。
可选的,上述划分单元621,具体用于:
对待检测智能合约进行编译处理,得到待检测智能合约的字节码;
对字节码进行切割处理,得到待检测智能合约的多个代码块。
可选的,上述预测网络的训练过程包括:
获取样本智能合约,样本智能合约包括的样本代码块标注有对应的漏洞分类结果;
基于样本智能合约和漏洞分类结果训练预测网络。
可选的,上述装置,还用于:
对样本智能合约进行分析处理,得到样本智能合约的多个样本代码块;
对多个样本代码块中的每个样本代码块进行预处理,得到每个样本代码块对应的特征矩阵;
将特征矩阵输入初始预测网络中,得到每个样本代码块存在漏洞的预测值;
根据每个样本代码块存在漏洞的预测值与漏洞分类结果,计算损失函数,按照损失函数最小化,采用迭代算法迭代调整初始预测网络的参数,得到预测网络。
可选的,上述装置,还用于:
对于每个样本代码块,利用词法分析转换处理为多个单词序列;
将多个单词序列中的每个单词序列进行向量化处理,得到对应的多个词向量;
对多个词向量进行组合处理,得到每个样本代码块对应的特征矩阵。
可选的,上述检测模块640,具体用于:
根据候选执行路径中每一代码块存在漏洞的概率值,确定候选执行路径的优先级系数;
基于各候选执行路径的优先级系数从高到低的顺序,对各候选执行路径进行漏洞检测,得到漏洞检测结果。
可选的,上述检测模块640,还用于:
对候选执行路径中每一代码块存在漏洞的概率值进行加权求和处理,得到候选执行路径的优先级系数,或者,
确定候选执行路径中代码块存在漏洞的概率值中的最大概率值,基于最大概率值确定候选执行路径的优先级系数。
可选的,上述装置,还用于:
对候选执行路径中的代码块以及相邻代码块之间的约束条件进行符号转化处理,得到候选执行路径的符号处理结果;
基于符号处理结果进行漏洞检测,获得漏洞检测结果。
综上所述,本实施例提供的智能合约漏洞检测装置,一方面,通过获取待检测智能合约,能够全面地确定到待智能合约可能存在漏洞的多个执行路径,在得到多个执行路径这一指导信息后通过预测网络对待检测智能合约进行漏洞预测,能够更精细地对用于执行待检测智能合约的代码块进行漏洞检测,从而更精准地确定出存在漏洞的预测漏洞代码块。另一方面,根据预测漏洞代码块确定多个执行路径中的候选执行路径,结合了更为精细且全面的存在漏洞的代码特征来确定候选执行路径,从而能够更优先地对候选执行路径进行漏洞检测,有效提高了待检测智能合约的漏洞检测准确度,并且减少了消耗在无漏洞的执行路径上的检测时间,提高了漏洞检测效率,进一步增强了智能合约部署的安全性。
下面参考图另一方面,本申请实施例提供的计算设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,该处理器执行该程序时实现如上述的智能合约漏洞检测方法。
下面参考图16,其示出了适于用来实现本申请实施例的计算机系统1000的结构示意图。
如图16所示,计算机系统1000包括中央处理单元(CPU)1001,其可以根据存储在只读存储器(ROM)1002中的程序或者从存储部分1008加载到随机访问存储器(RAM)1003中的程序而执行各种适当的动作和处理。在RAM1003中,还存储有系统1000操作所需的各种程序和数据。CPU1001、ROM1002以及RAM1003通过总线1004彼此相连。输入/输出(I/O)接口1006也连接至总线1004。
以下部件连接至I/O接口1005:包括键盘、鼠标等的输入部分1006;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分1007;包括硬盘等的存储部分1008;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分1009。通信部分1009经由诸如因特网的网络执行通信处理。驱动器1010也根据需要连接至I/O接口1006。可拆卸介质1011,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1010上,以便于从其上读出的计算机程序根据需要被安装入存储部分1008。
特别地,根据本公开的实施例,上文参考图3-5描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括有形地包含在机器可读介质上的计算机程序,所述计算机程序包含用于执行图3-5的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分1009从网络上被下载和安装,和/或从可拆卸介质1011被安装。
附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,前述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本申请实施例中所涉及到的单元或模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元或模块也可以设置在处理器中,例如,可以描述为:一种处理器包括执行路径确定模块、预测模块、候选路径确定模块及检测模块。其中,这些单元或模块的名称在某种情况下并不构成对该单元或模块本身的限定,例如,执行路径确定模块还可以被描述为“用于获取待检测智能合约,确定所述待检测智能合约的多个执行路径;所述执行路径包括至少一个用于执行所述待检测智能合约的代码块”。
作为另一方面,本申请还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该电子设备执行时,使得该电子设备实现如上述实施例中所述的智能合约漏洞检测方法。
例如,所述计算机设备可以实现如图1中所示的:
获取待检测智能合约,确定所述待检测智能合约的多个执行路径;所述执行路径包括至少一个用于执行所述待检测智能合约的代码块;
将所述待检测智能合约输入预测网络中,得到所述待检测智能合约中的预测漏洞代码块;
根据所述预测漏洞代码块确定所述多个执行路径中的候选执行路径;所述候选执行路径为包含所述预测漏洞代码块的执行路径;
对所述候选执行路径进行漏洞检测,获得漏洞检测结果。
又如,所述电子设备可以实现如图3和图5中所示的各个步骤。
综上所述,本申请实施例中提供的智能合约漏洞检测方法、装置、设备及存储介质,通过获取待检测智能合约,确定待检测智能合约的多个执行路径,该执行路径包括至少一个用于执行待检测智能合约的代码块,将待检测智能合约输入预测网络中,得到待检测智能合约中的预测漏洞代码块,然后根据预测漏洞代码块确定多个执行路径中的候选执行路径,并对候选执行路径进行漏洞检测,获得漏洞检测结果。本申请中的技术方案相比于现有技术而言,一方面,通过获取待检测智能合约,能够全面地确定到待智能合约可能存在漏洞的多个执行路径,在得到多个执行路径这一指导信息后通过预测网络对待检测智能合约进行漏洞预测,能够更精细地对用于执行待检测智能合约的代码块进行漏洞检测,从而更精准地确定出存在漏洞的预测漏洞代码块。另一方面,根据预测漏洞代码块确定多个执行路径中的候选执行路径,结合了更为精细且全面的存在漏洞的代码特征来确定候选执行路径,从而能够更优先地对候选执行路径进行漏洞检测,有效提高了待检测智能合约的漏洞检测准确度,并且减少了消耗在无漏洞的执行路径上的检测时间,提高了漏洞检测效率,进一步增强了智能合约部署的安全性。
应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
此外,尽管在附图中以特定顺序描述了本公开中方法的各个步骤,但是,这并非要求或者暗示必须按照该特定顺序来执行这些步骤,或是必须执行全部所示的步骤才能实现期望的结果。附加的或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,以及/或者将一个步骤分解为多个步骤执行等。通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。
以上描述仅为本申请的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本申请中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离所述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本申请中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。

Claims (13)

1.一种智能合约漏洞检测方法,其特征在于,包括:
获取待检测智能合约,确定所述待检测智能合约的多个执行路径;所述执行路径包括至少一个用于执行所述待检测智能合约的代码块;
将所述待检测智能合约输入预测网络中,得到所述待检测智能合约中的预测漏洞代码块;
根据所述预测漏洞代码块确定所述多个执行路径中的候选执行路径;所述候选执行路径为包含所述预测漏洞代码块的执行路径;
对所述候选执行路径进行漏洞检测,获得漏洞检测结果。
2.根据权利要求1所述的方法,其特征在于,将所述待检测智能合约输入预测网络中,得到所述待检测智能合约中的预测漏洞代码块,包括:
对所述待检测智能合约进行划分,得到所述待检测智能合约的多个代码块;
利用所述预测网络对所述待检测智能合约的每一代码块进行漏洞概率预测,获得所述待检测智能合约的每一代码块存在漏洞的概率值;
根据所述待检测智能合约的每一代码块存在漏洞的概率值,确定所述待检测智能合约中的预测漏洞代码块。
3.根据权利要求2所述的方法,其特征在于,对所述待检测智能合约进行划分,得到所述待检测智能合约的多个代码块,包括:
对所述待检测智能合约进行编译处理,得到待检测智能合约的字节码;
对所述字节码进行切割处理,得到所述待检测智能合约的多个代码块。
4.根据权利要求2所述的方法,其特征在于,所述预测网络的训练过程包括:
获取样本智能合约,所述样本智能合约包括的样本代码块标注有对应的漏洞分类结果;
基于所述样本智能合约和所述漏洞分类结果训练所述预测网络。
5.根据权利要求4所述的方法,其特征在于,基于所述样本智能合约和所述漏洞分类结果训练所述预测网络,包括:
对所述样本智能合约进行分析处理,得到所述样本智能合约的多个样本代码块;
对所述多个样本代码块中的每个样本代码块进行预处理,得到每个样本代码块对应的特征矩阵;
将所述特征矩阵输入初始预测网络中,得到每个样本代码块存在漏洞的预测值;
根据每个样本代码块存在漏洞的预测值与所述漏洞分类结果,计算损失函数,按照损失函数最小化,采用迭代算法迭代调整初始预测网络的参数,得到所述预测网络。
6.根据权利要求5所述的方法,其特征在于,对所述多个样本代码块中的每个样本代码块进行预处理,得到每个样本代码块对应的特征矩阵,包括:
对于每个样本代码块,利用词法分析转换处理为多个单词序列;
将所述多个单词序列中的每个单词序列进行向量化处理,得到对应的多个词向量;
对所述多个词向量进行组合处理,得到所述每个样本代码块对应的特征矩阵。
7.根据权利要求2所述的方法,其特征在于,对所述候选执行路径进行漏洞检测,获得漏洞检测结果,包括:
根据所述候选执行路径中每一代码块存在漏洞的概率值,确定所述候选执行路径的优先级系数;
基于各所述候选执行路径的优先级系数从高到低的顺序,对各所述候选执行路径进行漏洞检测,得到漏洞检测结果。
8.根据权利要求7所述的方法,其特征在于,根据所述候选执行路径中每一代码块存在漏洞的概率值,确定所述候选执行路径的优先级系数,包括:
对所述候选执行路径中每一代码块存在漏洞的概率值进行加权求和处理,得到所述候选执行路径的优先级系数,或者,
确定所述候选执行路径中代码块存在漏洞的概率值中的最大概率值,基于所述最大概率值确定所述候选执行路径的优先级系数。
9.根据权利要求1-8任一项所述的方法,其特征在于,对所述候选执行路径进行漏洞检测,获得漏洞检测结果,包括:
对所述候选执行路径中的代码块以及相邻代码块之间的约束条件进行符号转化处理,得到所述候选执行路径的符号处理结果;
基于所述符号处理结果进行漏洞检测,获得所述漏洞检测结果。
10.一种智能合约漏洞检测装置,其特征在于,所述装置包括:
执行路径确定模块,用于获取待检测智能合约,确定所述待检测智能合约的多个执行路径;所述执行路径包括至少一个用于执行所述待检测智能合约的代码块;
预测模块,用于将所述待检测智能合约输入预测网络中,得到所述待检测智能合约中的预测漏洞代码块;
候选路径确定模块,用于根据所述预测漏洞代码块确定所述多个执行路径中的候选执行路径;所述候选执行路径为包含所述预测漏洞代码块的执行路径;
检测模块,用于对所述候选执行路径进行漏洞检测,获得漏洞检测结果。
11.一种计算机设备,其特征在于,所述计算机设备包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器用于执行所述程序时实现如权利要求1-9任一项所述的智能合约漏洞检测方法。
12.一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序用于实现如权利要求1-9任一项所述的智能合约漏洞检测方法。
13.一种计算机程序产品,其特征在于,所述计算机程序产品中包括指令,当所述指令被执行时实现如权利要求1-9任一项所述的智能合约漏洞检测方法。
CN202211207086.6A 2022-09-29 2022-09-29 智能合约漏洞检测方法、装置、设备及存储介质 Pending CN117852040A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211207086.6A CN117852040A (zh) 2022-09-29 2022-09-29 智能合约漏洞检测方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211207086.6A CN117852040A (zh) 2022-09-29 2022-09-29 智能合约漏洞检测方法、装置、设备及存储介质

Publications (1)

Publication Number Publication Date
CN117852040A true CN117852040A (zh) 2024-04-09

Family

ID=90544558

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211207086.6A Pending CN117852040A (zh) 2022-09-29 2022-09-29 智能合约漏洞检测方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN117852040A (zh)

Similar Documents

Publication Publication Date Title
US11082438B2 (en) Malicious activity detection by cross-trace analysis and deep learning
US11451565B2 (en) Malicious activity detection by cross-trace analysis and deep learning
US11218498B2 (en) Context-aware feature embedding and anomaly detection of sequential log data using deep recurrent neural networks
Dong et al. Defect prediction in android binary executables using deep neural network
US20210182703A1 (en) System and method for anti-pattern detection for computing applications
US11481412B2 (en) Data integration and curation
US20220100963A1 (en) Event extraction from documents with co-reference
US20220100772A1 (en) Context-sensitive linking of entities to private databases
US20220004642A1 (en) Vulnerability analysis using contextual embeddings
Althar et al. [Retracted] Software Systems Security Vulnerabilities Management by Exploring the Capabilities of Language Models Using NLP
US20220100967A1 (en) Lifecycle management for customized natural language processing
Gai et al. Blockchain large language models
US20230078134A1 (en) Classification of erroneous cell data
Shakya et al. Smartmixmodel: machine learning-based vulnerability detection of solidity smart contracts
Ji et al. Vestige: Identifying binary code provenance for vulnerability detection
Saheb Nasagh et al. A fuzzy genetic automatic refactoring approach to improve software maintainability and flexibility
Wu et al. Code vulnerability detection based on deep sequence and graph models: A survey
Agrawal et al. Predicting co‐change probability in software applications using historical metadata
Wang et al. Gvd-net: Graph embedding-based machine learning model for smart contract vulnerability detection
WO2022072237A1 (en) Lifecycle management for customized natural language processing
Ren et al. Smart contract vulnerability detection based on a semantic code structure and a self-designed neural network
Karakati et al. Software code refactoring based on deep neural network‐based fitness function
Zhen et al. DA-GNN: A smart contract vulnerability detection method based on Dual Attention Graph Neural Network
Tang et al. An attention-based automatic vulnerability detection approach with GGNN
CN115268847A (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