CN112380541A - 智能合约的漏洞的检测方法、装置及计算机设备 - Google Patents
智能合约的漏洞的检测方法、装置及计算机设备 Download PDFInfo
- Publication number
- CN112380541A CN112380541A CN202011280604.8A CN202011280604A CN112380541A CN 112380541 A CN112380541 A CN 112380541A CN 202011280604 A CN202011280604 A CN 202011280604A CN 112380541 A CN112380541 A CN 112380541A
- Authority
- CN
- China
- Prior art keywords
- vulnerability
- detected
- logic
- contract
- contract file
- 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
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
- 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
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- 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
Abstract
本发明涉及一种智能合约的漏洞的检测方法、装置及设备,该方法包括:获取待检测合约文件;根据所述待检测合约文件中可执行代码的运行逻辑,获取对应于待检测合约文件中各终端结点的逻辑表达式;检测每个逻辑表达式,获得检测结果;基于所述检测结果,判定所述待检测合约文件是否存在漏洞。本申请的方法能够检测待检测合约文件中的逻辑关系,不需要依靠已知的漏洞特征信息即能检测待检测合约文件中的已知或未知的漏洞,故而可以提升检测待检测合约文件的漏洞时的检测准确性,而且是对各种漏洞都可以检测,提高了工作效率。
Description
技术领域
本发明涉及区块链领域,特别是涉及智能合约的漏洞的检测方法、装置及设备。
背景技术
区块链是一个分布式的共享账本和数据库,具有去中心化、不可篡改、全程留痕、可追溯等特点,区块链能够解决信息不对称问题,实现多个主体之间的协作信任与一致行动,这些特点使区块链能够应用于多种多样的场景中。以太坊(Ethereum)是一个开源的公共区块链平台,拥有区块链的去中心化、共识、分布式账本等特点。它为所有开发者提供了基于Solidity语言的智能合约解决方案平台,它上面提供各种模块让用户来创建属于自己项目的智能合约。智能合约是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约的目的是提供优于传统合约的安全方法,并减少与合约相关的其他交易成本。区块链采用的智能合约是开发人员去编写的脚本代码,因为缺乏有效的漏洞检测模型,导致容易出现智能合约漏洞。目前市场中对智能合约漏洞检测的方法主要是基于人工检测智能合约的方法。基于人工检测智能合约的技术方案的缺点明显:人工检测的方式,检测结果完全依靠检测人的技术水平,导致检测结果参差不齐、多人核审结果不一致、工作效率低下等问题。
发明内容
基于此,有必要针对人工检测方式的检测结果完全依靠检测人的技术水平,导致检测结果参差不齐、多人核审结果不一致、工作效率低下等问题,提供一种智能合约的漏洞的检测方法、装置及设备。
一种智能合约的漏洞的检测方法,包括:
获取待检测合约文件;所述待检测合约文件即需要进行漏洞检测的智能合约的合约文件;
根据所述待检测合约文件中可执行代码的运行逻辑,获取对应于待检测合约文件中各终端结点的逻辑表达式;
检测每个逻辑表达式,获得检测结果;
基于所述检测结果,判定所述待检测合约文件是否存在漏洞。
在其中一个实施例中,所述根据待检测合约文件中可执行代码的运行逻辑,获取对应于待检测合约文件中各终端结点的逻辑表达式,包括:
根据可执行代码的运行逻辑,生成与待检测合约文件中的可执行代码相对应的控制流图;
根据所述控制流图,生成与待检测合约文件中各个终端结点相对应的逻辑表达式。
在其中一个实施例中,所述检测每个逻辑表达式,获得检测结果,包括:
确定每个逻辑表达式所对应的输入参数;
通过输入参数检测对应的逻辑表达式的逻辑是否一致,并生成检测结果。
在其中一个实施例中,所述通过输入参数检测对应的逻辑表达式的逻辑是否一致,并生成检测结果,包括:
当输入参数包括输入值时,将输入值输入对应的逻辑表达式,得到输出结果,判断输出结果与逻辑表达式的逻辑是否一致;
若输出结果与逻辑表达式的逻辑是一致的,则确定得到不存在漏洞的检测结果;
若输出结果与逻辑表达式的逻辑不一致,则确定得到存在漏洞的检测结果;
在其中一个实施例中,所述通过输入参数检测对应的逻辑表达式的逻辑是否一致,并生成检测结果,包括:
当输入参数包括输入值以及将该输入值输入对应的逻辑表达式所得到的理想输出结果时,将输入值输入对应的逻辑表达式,得到实际输出结果;
当实际输出结果与理想输出结果不一致时,确定得到存在漏洞的检测结果;
当实际输出结果与理想输出结果一致时,确定得到不存在漏洞的检测结果。
在其中一个实施例中,所述获取待检测合约文件,包括:
获取区块链网络系统中的新区块信息,从新区块信息中获取新建智能合约的合约文件,作为待检测合约文件。
在其中一个实施例中,所述方法还包括:当基于检测结果确定待检测合约文件存在漏洞时,确定待检测合约文件的分数。
在其中一个实施例中,所述确定待检测合约文件的分数,包括:
将每个存在漏洞的逻辑表达式分别与预设的各漏洞类型所对应的漏洞特征进行匹配,基于匹配结果确定逻辑表达式的漏洞类型;
基于各逻辑表达式的漏洞类型,确定待检测合约文件的漏洞特征信息;
从预设的各漏洞特征信息与分数之间的对应关系中,将该漏洞特征信息所对应的分数确定为待检测合约文件的分数。
一种智能合约的漏洞的检测装置,包括:
第一获取模块,用于获取待检测合约文件;所述待检测合约文件即需要进行漏洞检测的智能合约的合约文件;
第二获取模块,用于根据所述待检测合约文件中可执行代码的运行逻辑,获取对应于待检测合约文件中各终端结点的逻辑表达式;
检测模块,用于检测每个逻辑表达式,获得检测结果;
判定模块,用于基于检测结果,判定所述待检测合约文件是否存在漏洞。
一种计算机设备,包括存储器和处理器,所述存储器中存储有计算机可读指令,所述计算机可读指令被所述处理器执行时,使得所述处理器执行上述智能合约的漏洞的检测方法的步骤。
一种存储有计算机可读指令的存储介质,所述计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行上述智能合约的漏洞的检测方法的步骤。
上述智能合约的漏洞的检测方法,能够检测待检测合约文件中的逻辑关系,不需要依靠已知的漏洞特征信息即能检测待检测合约文件中的已知或未知的漏洞,故而可以提升检测待检测合约文件的漏洞时的检测准确性,且能对各种漏洞都可以检测,不再依赖于人工检测,克服了人工检测方式的检测结果完全依靠检测人,导致检测结果参差不齐、多人核审结果不一致、工作效率低下等问题,提高了工作效率。
附图说明
图1为一个实施方式中提供的智能合约的漏洞的检测方法流程图;
图2为图1所示实施方式中步骤S20的流程图;
图3为一个实施方式中针对代码生成的控制流图;
图4为图1所示实施方式中步骤S30的流程图;
图5为图4所示实施方式中步骤S302的流程图;
图6为另一个实施方式中提供的智能合约的漏洞的检测方法流程图;
图7为图6所示实施方式中步骤S50的流程图;
图8为一个实施方式中提供的智能合约的漏洞的检测装置的结构框图;
图9为另一个实施方式中提供的智能合约的漏洞的检测装置的结构框图;
图10为一个实施例中计算机设备的内部结构框图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
可以理解,本申请所使用的术语“第一”、“第二”等可在本文中用于描述各种元件,但这些元件不受这些术语限制。这些术语仅用于将第一个元件与另一个元件区分。
如图1所示,本申请实施例提供的一种智能合约的漏洞的检测方法,包括:
步骤S10、获取待检测合约文件。
其中,该待检测合约文件即需要进行漏洞检测的智能合约的合约文件。合约文件中包含可执行代码(Executable Code)。可执行代码一般是可执行文件的一部分,是机器能够直接执行的代码。可执行代码可以是把目标代码连接后生成的代码。目标代码(objectcode)指的是编译器或汇编器处理源代码后所生成的代码,一般由机器代码或接近于机器语言的代码组成。可执行文件(executable file)指的是可以由操作系统进行加载执行的文件。
在某些实施方式中,步骤S10包括:获取区块链网络系统中的新区块信息,从新区块信息中获取新建智能合约的合约文件,作为待检测合约文件。新区块信息指的是区块链网络系统中新增加的区块的数据。
合约文件可以为.sol文件格式。
合约文件支持合约字节码、合约地址、合约源代码、Truffle工程文件等。本实施例能够对区块链网络系统中的智能合约进行漏洞检测,提高智能合约的安全性。以太坊(Ethereum)是一个开源的有智能合约功能的公共区块链平台,通过其专用加密货币以太币(Ether,简称ETH)提供去中心化的以太虚拟机(Ethereum Virtual Machine)来处理点对点合约。在以太坊上创建一个智能合约时,新生成的智能合约的地址是根据发送者(sender)的地址和其已生成的事务数(nonce)确定的,经过RLP编码后再经过Hash(Keccak-256)运算得到的。
获取区块链网络系统中的新区块信息,包括:预先在区块链网络系统中建立以太坊结点,通过该以太坊结点来获取区块链网络系统中的新区块信息。
当区块链网络系统中出现新区块信息时,该新区块信息会同步给每个以太坊结点。这样就能够及时地对新建智能合约进行漏洞检测,实现在智能合约开发过程中的漏洞实时检测。以太坊通过区块链网络系统允许任何人公开分布式应用程序,让服务提供商和用户进行直接对接。在以太坊网络上,每个客户端都是一个结点。
步骤S20、根据待检测合约文件中可执行代码的运行逻辑,获取对应于待检测合约文件中各终端结点的逻辑表达式。
具体地,根据可执行代码的运行逻辑,能够从待检测合约文件中确定各个结点及其对应的子结点。在区块链网络中,若一个结点不包含子结点,则该结点即为终端结点。终端结点也叫叶子结点,指的是不包含子结点的结点。
待检测合约文件包括至少一个终端结点,每个终端结点具有一个对应的逻辑表达式,即待检测合约文件可以包括至少一个逻辑表达式。
在某些实施方式中,如图2所示,步骤S20具体包括:
步骤S201、根据可执行代码的运行逻辑,生成与待检测合约文件中的可执行代码相对应的控制流图。控制流图的英文全称即Control Flow Graph,简称CFG。
具体地,将待检测合约文件中的可执行代码编译成字节码格式,根据字节码格式的运行逻辑,生成与待检测合约文件的可执行代码相对应的控制流图。
例如,可执行代码如下
针对上述代码生成的控制流图如图3所示。
步骤S202、根据上述控制流图,生成与待检测合约文件中各个终端结点相对应的逻辑表达式。
例如,参考上述控制流图,与终端结点never_reached()相对应的逻辑表达式是(input<128)^(input*4>512),与终端结点throw()相对应的逻辑表达式是input>128。
本实施例能够基于待检测合约文件的控制流图生成各个终端结点的逻辑表达式,能够更准确地生成终端结点的逻辑表达式。
步骤S30、检测每个逻辑表达式,获得检测结果。
其中,检测结果包括逻辑表达式存在漏洞的结果或逻辑表达式不存在漏洞的结果。
检测每个逻辑表达式时,可将不同的值输入逻辑表达式来实现判定。
在某些实施方式中,如图4所示,步骤S30包括:
步骤S301、确定每个逻辑表达式所对应的输入参数。
其中,输入参数用于对逻辑表达式进行检测。输入参数包括至少一组输入值。
在确定输入参数时,分别针对每个逻辑表达式进行确定。例如,待检测合约文件存在3个逻辑表达式,则针对这3个逻辑表达式分别确定3个输入参数。
在某些实施方式中,输入参数包括输入值以及对应于该输入值的理想输出结果。对应于该输入值的理想输出结果是将该输入值输入对应的逻辑表达式所得到的。
步骤S302、通过输入参数检测对应的逻辑表达式的逻辑是否一致,并生成检测结果。
当输入参数包括输入值时,将输入值输入对应的逻辑表达式,得到输出结果,判断输出结果与逻辑表达式的逻辑是否一致;若输出结果与逻辑表达式的逻辑是一致的,则确定得到不存在漏洞的检测结果;若输出结果与逻辑表达式的逻辑不一致,则确定得到存在漏洞的检测结果。
当输入参数包括输入值以及将该输入值输入对应的逻辑表达式所得到的理想输出结果时,如图5所示,步骤S302包括:
步骤S3021、将输入值输入对应的逻辑表达式,得到实际输出结果。
其中,输入值对应的逻辑表达式指的是输入值所在的输入参数所对应的逻辑表达式。
步骤S3022、当实际输出结果与理想输出结果不一致时,确定得到存在漏洞的检测结果;当实际输出结果与理想输出结果一致时,确定得到不存在漏洞的检测结果。
在确定输入参数时即确定输入值与对应的理想输出结果,在得到实际输出结果时可直接比较实际输出结果与理想输出结果,得到是否存在漏洞的检测结果。这种方法操作更加简便而且易于实施。
在某些实施方式中,当确定逻辑表达式存在漏洞时,根据输入参数再次验证该逻辑表达式,以确保漏洞真实存在。
本实施例能够为每个逻辑表达式确定对应的输入参数,采用该输入参数对对应的逻辑表达式进行检测,得到检测结果。这种检测方法能够更准确地实现对每个逻辑表达式真假的检测。
步骤S40、基于上述检测结果,判定待检测合约文件中是否存在漏洞。
在一些实施方式中,步骤S40包括:当检测结果表明逻辑表达式存在漏洞时,确定待检测合约文件存在漏洞。
或者,在另一些实施方式中,步骤S40包括:
当基于检测结果确定漏洞比例大于第一阈值时,则确定待检测合约文件存在漏洞;或者,当根据检测结果确定漏洞个数大于第二阈值时,则确定待检测合约文件存在漏洞。漏洞比例为:存在漏洞的逻辑表达式的数量与所有逻辑表达式的数量的比值。第一阈值为预先设定的比例阈值。第二阈值为预先设定的数量阈值。
在某些实施方式中,可以通过后台流水线反馈的日志等内容分析出相关的缺陷或问题;或者通过后台流水线直接反馈缺陷或问题。基于后台机器流水线或者流水线与开发人员的协同工作,能够基于反馈的日志或结果或执行状态及时发现问题或缺陷,使开发出的智能合约尽可能少出问题,显著提升了用户体验。
本实施例能够根据可执行代码的运行逻辑,确定待检测合约文件中各个终端结点的逻辑表达式,对每个逻辑表达式进行检测,根据检测结果确定待检测合约文件是否存在漏洞。这种方法能够检测待检测合约文件中的逻辑关系,无论待检测合约文件中存在的安全漏洞是已知的还是未知的,均能够进行检测,不需要依赖已知的安全漏洞特征,所以能够提高检测待检测合约文件的检测准确性。
在某些实施方式中,在确定待检测合约文件存在漏洞后,修补待检测合约文件中的漏洞。
在某些实施方式中,在修补待检测合约文件中的漏洞时,基于存在漏洞的逻辑表达式修补待检测合约文件。
在某些实施方式中,如图6所示,该方法还包括:步骤S50、当基于检测结果确定待检测合约文件存在漏洞时,确定待检测合约文件的分数。步骤S50为在经过步骤S40确定待检测合约文件中存在漏洞之后进行的。
如图7所示,确定待检测合约文件的分数,包括:
步骤S501、将每个存在漏洞的逻辑表达式分别与预设的各漏洞类型所对应的漏洞特征进行匹配,基于匹配结果确定逻辑表达式的漏洞类型。
其中,以特征表达式的形式来表示漏洞特征。当逻辑表达式与漏洞特征匹配成功时,确定该逻辑表达式存在与该漏洞特征相对应的漏洞类型。当逻辑表达式与漏洞特征匹配失败时,确定该逻辑表达式不存在与该漏洞特征相对应的漏洞类型。例如,智能合约的漏洞类型包括可重入攻击漏洞、条件逻辑风险验证、访问控制权限风险验证、返回值风险验证、随机数误用风险验证、执行顺序依赖漏洞、时间戳依赖漏洞、平台接口误用漏洞、拒绝服务攻击检测漏洞、多重签名合约漏洞、整数数值溢出漏洞、交易顺序漏洞、短地址攻击漏洞等多种类型。
步骤S502、基于各逻辑表达式的漏洞类型,确定待检测合约文件的漏洞特征信息。
其中,漏洞特征信息包括漏洞个数、漏洞等级、漏洞详情、相应的安全建议等信息。待检测合约文件的漏洞特征信息是基于待检测合约文件的所有存在漏洞的逻辑表达式的漏洞类型得到的。
步骤S503、从预设的各漏洞特征信息与分数之间的对应关系中,将该漏洞特征信息所对应的分数确定为待检测合约文件的分数。
其中,各个漏洞特征信息与分数之间的对应关系,是根据已检测到漏洞的文件中出现的各类漏洞的分布情况预先设定的。分数可以为预设范围,例如可以为0~10分。
在某些实施方式中,在确定待检测合约文件的分数之后,根据漏洞特征信息和分数生成检测报告。
在某些实施方式中,获取对应于待检测合约文件中各终端结点的逻辑表达式之后,在逻辑表达式中设置阈值指针,阈值指针用于标记逻辑表达式中阈值的存储位置,然后将逻辑表达式存储起来。存储的过程包括:解析逻辑表达式,得到逻辑表达式中的运算表达式;基于得到的运算表达式,生成对应于运算表达式的比较运算树,该比较运算树包括阈值指针节点,该阈值指针节点对应于阈值指针;基于逻辑表达式,生成以指标变量名替换运算表达式的逻辑运算树,逻辑运算树包括指标变量节点,指标变量节点对应于指标变量名;基于比较运算树和逻辑运算树,生成对应于逻辑表达式的树形结构;存储该树形结构。
本实施例能够在确定待检测合约文件存在漏洞时,确定逻辑表达式的漏洞类型,进而得到漏洞特征信息,并确定待检测合约文件的分数,能够实现对待检测合约文件更具体详尽的评价,以便为用户提供参考。
上述智能合约的漏洞的检测方法,能够检测待检测合约文件中的逻辑关系,不需要依靠已知的漏洞特征信息即能检测待检测合约文件中的已知或未知的漏洞,故而可以提升检测待检测合约文件的漏洞时的检测准确性,而且是对各种漏洞都可以检测,不再依赖于人工检测,从而克服了人工检测方式的检测结果完全依靠检测人的技术水平,导致检测结果参差不齐、多人核审结果不一致、工作效率低下等问题,提高了工作效率。
本申请的另一个实施例提供了一种智能合约的漏洞的检测装置,如图8所示,包括:
第一获取模块10,用于获取待检测合约文件;所述待检测合约文件即需要进行漏洞检测的智能合约的合约文件;
第二获取模块20,用于根据所述待检测合约文件中可执行代码的运行逻辑,获取对应于待检测合约文件中各终端结点的逻辑表达式;
检测模块30,用于检测每个逻辑表达式,获得检测结果;
判定模块40,用于基于检测结果,判定所述待检测合约文件是否存在漏洞。
在某些实施方式中,第二获取模块20,包括:
第一生成单元,用于根据可执行代码的运行逻辑,生成与待检测合约文件中的可执行代码相对应的控制流图;
第二生成单元,用于根据所述控制流图,生成与待检测合约文件中各个终端结点相对应的逻辑表达式。
在某些实施方式中,检测模块30,包括:
确定单元,用于确定每个逻辑表达式所对应的输入参数;
获取单元,用于通过输入参数检测对应的逻辑表达式的逻辑是否一致,并生成检测结果。
在某些实施方式中,获取单元,包括:
第一子单元,用于当输入参数包括输入值时,将输入值输入对应的逻辑表达式,得到输出结果,判断输出结果与逻辑表达式的逻辑是否一致;
第二子单元,用于若输出结果与逻辑表达式的逻辑是一致的,则确定得到不存在漏洞的检测结果;
第三子单元,用于若输出结果与逻辑表达式的逻辑不一致,则确定得到存在漏洞的检测结果;
在某些实施方式中,获取单元,包括:
输入子单元,用于当输入参数包括输入值以及将该输入值输入对应的逻辑表达式所得到的理想输出结果时,将输入值输入对应的逻辑表达式,得到实际输出结果;
第一确定子单元,用于当实际输出结果与理想输出结果不一致时,确定得到存在漏洞的检测结果;
第二确定子单元,用于当实际输出结果与理想输出结果一致时,确定得到不存在漏洞的检测结果。
在某些实施方式中,第一获取模块10具体用于获取区块链网络系统中的新区块信息,从新区块信息中获取新建智能合约的合约文件,作为待检测合约文件。
在某些实施方式中,如图9所示,本实施例的智能合约的漏洞的检测装置,还包括分数确定模块50,分数确定模块50用于当基于检测结果确定待检测合约文件存在漏洞时,确定待检测合约文件的分数。
在某些实施方式中,分数确定模块50,包括:
匹配确定单元,用于将每个存在漏洞的逻辑表达式分别与预设的各漏洞类型所对应的漏洞特征进行匹配,基于匹配结果确定逻辑表达式的漏洞类型;
漏洞特征信息确定单元,用于基于各逻辑表达式的漏洞类型,确定待检测合约文件的漏洞特征信息;
分数确定单元,用于从预设的各漏洞特征信息与分数之间的对应关系中,将该漏洞特征信息所对应的分数确定为待检测合约文件的分数。
如图10所示,在另一个实施例中,提出了一种计算机设备,所述计算机设备包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
获取待检测合约文件;所述待检测合约文件即需要进行漏洞检测的智能合约的合约文件;
根据所述待检测合约文件中可执行代码的运行逻辑,获取对应于待检测合约文件中各终端结点的逻辑表达式;
检测每个逻辑表达式,获得检测结果;
基于所述检测结果,判定所述待检测合约文件是否存在漏洞。
在某些实施方式中,所述处理器执行所述计算机程序时实现的根据待检测合约文件中可执行代码的运行逻辑,获取对应于待检测合约文件中各终端结点的逻辑表达式,包括:
根据可执行代码的运行逻辑,生成与待检测合约文件中的可执行代码相对应的控制流图;
根据所述控制流图,生成与待检测合约文件中各个终端结点相对应的逻辑表达式。
在某些实施方式中,所述处理器执行所述计算机程序时实现的检测每个逻辑表达式,获得检测结果,包括:
确定每个逻辑表达式所对应的输入参数;
通过输入参数检测对应的逻辑表达式的逻辑是否一致,并生成检测结果。
在某些实施方式中,所述处理器执行所述计算机程序时实现的通过输入参数检测对应的逻辑表达式的逻辑是否一致,并生成检测结果,包括:
当输入参数包括输入值时,将输入值输入对应的逻辑表达式,得到输出结果,判断输出结果与逻辑表达式的逻辑是否一致;
若输出结果与逻辑表达式的逻辑是一致的,则确定得到不存在漏洞的检测结果;
若输出结果与逻辑表达式的逻辑不一致,则确定得到存在漏洞的检测结果。
在某些实施方式中,所述处理器执行所述计算机程序时实现的通过输入参数检测对应的逻辑表达式的逻辑是否一致,并生成检测结果,包括:
当输入参数包括输入值以及将该输入值输入对应的逻辑表达式所得到的理想输出结果时,将输入值输入对应的逻辑表达式,得到实际输出结果;
当实际输出结果与理想输出结果不一致时,确定得到存在漏洞的检测结果;
当实际输出结果与理想输出结果一致时,确定得到不存在漏洞的检测结果。
在某些实施方式中,所述处理器执行所述计算机程序时实现的获取待检测合约文件,包括:
获取区块链网络系统中的新区块信息,从新区块信息中获取新建智能合约的合约文件,作为待检测合约文件。
所述处理器执行所述计算机程序时还实现步骤:当基于检测结果确定待检测合约文件存在漏洞时,确定待检测合约文件的分数。
在某些实施方式中,所述处理器执行所述计算机程序时实现的确定待检测合约文件的分数,包括:
将每个存在漏洞的逻辑表达式分别与预设的各漏洞类型所对应的漏洞特征进行匹配,基于匹配结果确定逻辑表达式的漏洞类型;
基于各逻辑表达式的漏洞类型,确定待检测合约文件的漏洞特征信息;
从预设的各漏洞特征信息与分数之间的对应关系中,将该漏洞特征信息所对应的分数确定为待检测合约文件的分数。
在一个实施例中,提出了一种存储有计算机可读指令的存储介质,该计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行以下步骤:
获取待检测合约文件;所述待检测合约文件即需要进行漏洞检测的智能合约的合约文件;
根据所述待检测合约文件中可执行代码的运行逻辑,获取对应于待检测合约文件中各终端结点的逻辑表达式;
检测每个逻辑表达式,获得检测结果;
基于所述检测结果,判定所述待检测合约文件是否存在漏洞。
在某些实施方式中,一个或多个处理器执行的根据待检测合约文件中可执行代码的运行逻辑,获取对应于待检测合约文件中各终端结点的逻辑表达式,包括:
根据可执行代码的运行逻辑,生成与待检测合约文件中的可执行代码相对应的控制流图;
根据所述控制流图,生成与待检测合约文件中各个终端结点相对应的逻辑表达式。
在某些实施方式中,一个或多个处理器执行的检测每个逻辑表达式,获得检测结果,包括:
确定每个逻辑表达式所对应的输入参数;
通过输入参数检测对应的逻辑表达式的逻辑是否一致,并生成检测结果。
在某些实施方式中,一个或多个处理器执行的通过输入参数检测对应的逻辑表达式的逻辑是否一致,并生成检测结果,包括:
当输入参数包括输入值时,将输入值输入对应的逻辑表达式,得到输出结果,判断输出结果与逻辑表达式的逻辑是否一致;
若输出结果与逻辑表达式的逻辑是一致的,则确定得到不存在漏洞的检测结果;
若输出结果与逻辑表达式的逻辑不一致,则确定得到存在漏洞的检测结果;
在某些实施方式中,一个或多个处理器执行的所述通过输入参数检测对应的逻辑表达式的逻辑是否一致,并生成检测结果,包括:
当输入参数包括输入值以及将该输入值输入对应的逻辑表达式所得到的理想输出结果时,将输入值输入对应的逻辑表达式,得到实际输出结果;
当实际输出结果与理想输出结果不一致时,确定得到存在漏洞的检测结果;
当实际输出结果与理想输出结果一致时,确定得到不存在漏洞的检测结果。
在某些实施方式中,一个或多个处理器执行的获取待检测合约文件,包括:
获取区块链网络系统中的新区块信息,从新区块信息中获取新建智能合约的合约文件,作为待检测合约文件。
该计算机可读指令被一个或多个处理器执行时,还使得一个或多个处理器执行步骤:当基于检测结果确定待检测合约文件存在漏洞时,确定待检测合约文件的分数。
在某些实施方式中,一个或多个处理器执行的确定待检测合约文件的分数,包括:
将每个存在漏洞的逻辑表达式分别与预设的各漏洞类型所对应的漏洞特征进行匹配,基于匹配结果确定逻辑表达式的漏洞类型;
基于各逻辑表达式的漏洞类型,确定待检测合约文件的漏洞特征信息;从预设的各漏洞特征信息与分数之间的对应关系中,将该漏洞特征信息所对应的分数确定为待检测合约文件的分数。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,该计算机程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,前述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)等非易失性存储介质,或随机存储记忆体(Random Access Memory,RAM)等。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种智能合约的漏洞的检测方法,其特征在于,包括:
获取待检测合约文件;所述待检测合约文件即需要进行漏洞检测的智能合约的合约文件;
根据所述待检测合约文件中可执行代码的运行逻辑,获取对应于待检测合约文件中各终端结点的逻辑表达式;
检测每个逻辑表达式,获得检测结果;
基于所述检测结果,判定所述待检测合约文件是否存在漏洞。
2.根据权利要求1所述的方法,其特征在于,所述根据待检测合约文件中可执行代码的运行逻辑,获取对应于待检测合约文件中各终端结点的逻辑表达式,包括:
根据所述可执行代码的运行逻辑,生成与所述待检测合约文件中的可执行代码相对应的控制流图;
根据所述控制流图,生成与所述待检测合约文件中各个终端结点相对应的逻辑表达式。
3.根据权利要求1或2所述的方法,其特征在于,所述检测每个逻辑表达式,获得检测结果,包括:
确定每个逻辑表达式所对应的输入参数;
通过所述输入参数检测对应的逻辑表达式的逻辑是否一致,并生成检测结果。
4.根据权利要求3所述的方法,其特征在于,所述通过所述输入参数检测对应的逻辑表达式的逻辑是否一致,并生成检测结果,包括:
当输入参数包括输入值时,将输入值输入对应的逻辑表达式,得到输出结果,判断输出结果与逻辑表达式的逻辑是否一致;
若输出结果与逻辑表达式的逻辑是一致的,则确定得到不存在漏洞的检测结果;
若输出结果与逻辑表达式的逻辑不一致,则确定得到存在漏洞的检测结果。
5.根据权利要求3所述的方法,其特征在于,所述通过输入参数检测对应的逻辑表达式的逻辑是否一致,并生成检测结果,包括:
当输入参数包括输入值以及将该输入值输入对应的逻辑表达式所得到的理想输出结果时,将输入值输入对应的逻辑表达式,得到实际输出结果;
当实际输出结果与理想输出结果不一致时,确定得到存在漏洞的检测结果;
当实际输出结果与理想输出结果一致时,确定得到不存在漏洞的检测结果。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:当基于检测结果确定待检测合约文件存在漏洞时,确定待检测合约文件的分数。
7.根据权利要求6所述的方法,其特征在于,所述确定待检测合约文件的分数,包括:
将每个存在漏洞的逻辑表达式分别与预设的各漏洞类型所对应的漏洞特征进行匹配,基于匹配结果确定逻辑表达式的漏洞类型;
基于各逻辑表达式的漏洞类型,确定待检测合约文件的漏洞特征信息;
从预设的各漏洞特征信息与分数之间的对应关系中,将该漏洞特征信息所对应的分数确定为待检测合约文件的分数。
8.一种智能合约的漏洞的检测装置,其特征在于,包括:
第一获取模块,用于获取待检测合约文件;所述待检测合约文件即需要进行漏洞检测的智能合约的合约文件;
第二获取模块,用于根据所述待检测合约文件中可执行代码的运行逻辑,获取对应于待检测合约文件中各终端结点的逻辑表达式;
检测模块,用于检测每个逻辑表达式,获得检测结果;
判定模块,用于基于检测结果,判定所述待检测合约文件是否存在漏洞。
9.一种计算机设备,包括存储器和处理器,所述存储器中存储有计算机可读指令,所述计算机可读指令被所述处理器执行时,使得所述处理器执行如权利要求1至7中任一项权利要求所述智能合约的漏洞的检测方法的步骤。
10.一种存储有计算机可读指令的存储介质,所述计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行如权利要求1至7中任一项权利要求所述智能合约的漏洞的检测方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011280604.8A CN112380541A (zh) | 2020-11-16 | 2020-11-16 | 智能合约的漏洞的检测方法、装置及计算机设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011280604.8A CN112380541A (zh) | 2020-11-16 | 2020-11-16 | 智能合约的漏洞的检测方法、装置及计算机设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112380541A true CN112380541A (zh) | 2021-02-19 |
Family
ID=74585573
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011280604.8A Pending CN112380541A (zh) | 2020-11-16 | 2020-11-16 | 智能合约的漏洞的检测方法、装置及计算机设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112380541A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113190850A (zh) * | 2021-05-24 | 2021-07-30 | 电子科技大学 | 一种智能合约短地址攻击检测工具的实现方法 |
-
2020
- 2020-11-16 CN CN202011280604.8A patent/CN112380541A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113190850A (zh) * | 2021-05-24 | 2021-07-30 | 电子科技大学 | 一种智能合约短地址攻击检测工具的实现方法 |
CN113190850B (zh) * | 2021-05-24 | 2022-10-11 | 电子科技大学 | 一种智能合约短地址攻击检测工具的实现方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10185650B1 (en) | Testing service with control testing | |
CN107111713B (zh) | 软件系统的自动验证 | |
Yu et al. | Patching vulnerabilities with sanitization synthesis | |
US10387236B2 (en) | Processing data errors for a data processing system | |
US8572574B2 (en) | Solving hybrid constraints to validate specification requirements of a software module | |
US20070271617A1 (en) | Vulnerability check program, vulnerability check apparatus, and vulnerability check method | |
CN112131115B (zh) | 一种智能合约模糊测试的方法、装置及存储介质 | |
US20120017119A1 (en) | Solving Hybrid Constraints to Generate Test Cases for Validating a Software Module | |
US20120017200A1 (en) | Solving Hybrid Constraints to Validate a Security Software Module for Detecting Injection Attacks | |
CN110474900B (zh) | 一种游戏协议测试方法及装置 | |
CN111563016B (zh) | 日志采集分析方法、装置、计算机系统及可读存储介质 | |
CN109376534B (zh) | 用于检测应用的方法和装置 | |
JP6282217B2 (ja) | 不正プログラム対策システムおよび不正プログラム対策方法 | |
US10823782B2 (en) | Ensuring completeness of interface signal checking in functional verification | |
Wi et al. | HiddenCPG: large-scale vulnerable clone detection using subgraph isomorphism of code property graphs | |
CN112380541A (zh) | 智能合约的漏洞的检测方法、装置及计算机设备 | |
CN110807195B (zh) | 一种智能合约的发布方法、发布平台装置及发布系统 | |
Skrupsky et al. | Waves: Automatic synthesis of client-side validation code for web applications | |
US7458063B2 (en) | Method and apparatus for supporting functionality documentation | |
Mostafa et al. | Netdroid: Summarizing network behavior of android apps for network code maintenance | |
Mesecan et al. | Keeping Secrets: Multi-objective Genetic Improvement for Detecting and Reducing Information Leakage | |
CN111858386A (zh) | 数据测试方法、装置、计算机设备和存储介质 | |
Kumar et al. | Formal Model-Driven Analysis of Resilience of GossipSub to Attacks from Misbehaving Peers | |
CN114416106B (zh) | 更新编译计数值的方法、系统、电子设备以及存储介质 | |
CN111144086B (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 |