CN114201756A - 一种智能合约代码片段的漏洞检测方法和相关装置 - Google Patents
一种智能合约代码片段的漏洞检测方法和相关装置 Download PDFInfo
- Publication number
- CN114201756A CN114201756A CN202111535082.6A CN202111535082A CN114201756A CN 114201756 A CN114201756 A CN 114201756A CN 202111535082 A CN202111535082 A CN 202111535082A CN 114201756 A CN114201756 A CN 114201756A
- Authority
- CN
- China
- Prior art keywords
- vulnerability
- code
- code segment
- target
- tree
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 89
- 238000000034 method Methods 0.000 claims abstract description 38
- 238000013507 mapping Methods 0.000 claims description 42
- 238000006243 chemical reaction Methods 0.000 claims description 4
- 239000012634 fragment Substances 0.000 abstract description 19
- 230000006870 function Effects 0.000 description 20
- 230000008569 process Effects 0.000 description 9
- 101150060512 SPATA6 gene Proteins 0.000 description 4
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- RTZKZFJDLAIYFH-UHFFFAOYSA-N Diethyl ether Chemical compound CCOCC RTZKZFJDLAIYFH-UHFFFAOYSA-N 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 238000013515 script Methods 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
- G06F21/563—Static detection by source code analysis
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Stored Programmes (AREA)
Abstract
本申请公开了一种智能合约代码片段的漏洞检测方法和相关装置,方法包括:获取待检测的智能合约的代码片段;将所述代码片段中的数据转换为抽象语法树;将所述抽象语法树和代码合约库中的本地树进行对比,得到与所述抽象语法树相似的多个目标树;基于所述目标树的漏洞结果,得到所述代码片段的漏洞检测结果。解决了现有的漏洞检测方法只能在完整的、能够生成字节码的智能合约中检测漏洞,而对于局部的代码片段无法进行漏洞检测的技术问题。
Description
技术领域
本申请涉及区块链领域,尤其涉及一种智能合约代码片段的漏洞检测方法和相关装置。
背景技术
随着区块链的兴起,智能合约作为区块链上的运行脚本引起了人们的关注。智能合约是在区块链上运行的、分布式的、防篡改的程序。由于智能合约可以灵活地嵌入到各种数字资产中实现安全有效的信息交换和价值转移,在供应链、智能家居、电子商务和资产管理等领域得到了广泛应用。
智能合约涉及区块链代币的交易,很容易成为攻击目标,因此需要针对智能合约进行漏洞检测。现有的漏洞检测方法只能在完整的、能够生成字节码的智能合约中检测漏洞,而对于局部的代码片段无法进行漏洞检测。
因此,提供一种智能合约代码片段的漏洞检测方法是本领域技术人员亟待解决的技术问题。
发明内容
本申请提供了一种智能合约代码片段的漏洞检测方法和相关装置,解决了现有的漏洞检测方法只能在完整的、能够生成字节码的智能合约中检测漏洞,而对于局部的代码片段无法进行漏洞检测的技术问题。
有鉴于此,本申请第一方面提供了一种智能合约代码片段的漏洞检测方法,包括:
获取待检测的智能合约的代码片段;
将所述代码片段中的数据转换为抽象语法树;
将所述抽象语法树和代码合约库中的本地树进行对比,得到与所述抽象语法树相似的多个目标树;
基于所述目标树的漏洞结果,得到所述代码片段的漏洞检测结果。
可选地,基于所述目标树的漏洞结果,得到所述代码片段的漏洞检测结果,具体包括:
将各所述目标树的完整代码和所述代码片段进行对比,得到与所述代码片段匹配的目标完整代码;
将所述目标完整代码的漏洞结果作为所述代码片段的漏洞检测结果。
可选地,将各所述目标树的完整代码和所述代码片段进行对比,得到与所述代码片段匹配的目标完整代码,具体包括:
对比各所述目标树的完整代码和所述代码片段,得到各所述完整代码对应的匹配度;
根据所有所述匹配度,从所述完整代码中选取出目标完整代码。
可选地,根据所有所述匹配度,从所述完整代码中选取出目标完整代码,具体包括:
将最大的所述匹配度对应的完整代码作为目标完整代码。
可选地,基于所述目标树的漏洞结果,得到所述代码片段的漏洞检测结果,具体包括:
将各目标树的各漏洞映射至所述代码片段,获取各漏洞对应的映射结果;
根据所有所述映射结果,确定所述代码片段的漏洞检测结果。
可选地,将各目标树的各漏洞映射至所述代码片段,获取各漏洞对应的映射结果,具体包括:
获取所述目标树中各漏洞对应的位置信息;
基于各漏洞对应的所述位置信息将该漏洞映射至所述代码片段中,当该漏洞存在于所述代码片段的某行中,且该漏洞出现在所有所述目标树的漏洞队列中时,判定该漏洞的映射结果为映射成功。
可选地,根据所有所述映射结果,确定所述代码片段的漏洞检测结果,具体包括:
将所述映射结果为映射成功的漏洞作为所述代码片段的漏洞,得到所述代码片段对应的漏洞检测结果。
可选地,将所述代码片段中的数据转换为抽象语法树,具体包括:
将所述代码片段中的函数数据转换为函数抽象语法树、所述代码片段中的合约数据转换为合约抽象语法树;
将所述抽象语法树和代码合约库中的本地树进行对比,得到与所述抽象语法树相似的目标树,具体包括:
将所述函数抽象语法树和所述合约抽象语法树与代码合约库中的本地树进行对比,得到与所述函数抽象语法树和所述合约抽象语法树相似的多个目标树。
可选地,将所述抽象语法树和代码合约库中的本地树进行对比,得到与所述抽象语法树相似的多个目标树,具体包括:
将所述抽象语法树和代码合约库中的各本地树进行对比,得到各本地树对应的相似度;
根据所有所述相似度,从所述本地树中选取出目标树。
可选地,根据所有所述相似度,从所述本地树中选取出目标树,具体包括:
将所述相似度最大的N个所述本地树作为所述目标树,其中N为2以上的自然数。
本申请第二方面提供了一种智能合约代码片段的漏洞检测装置,包括:
获取单元,用于获取待检测的智能合约的代码片段;
转换单元,用于将所述代码片段中的数据转换为抽象语法树;
对比单元,用于将所述抽象语法树和代码合约库中的本地树进行对比,得到与所述抽象语法树相似的多个目标树;
检测单元,用于基于所述目标树的漏洞结果,得到所述代码片段的漏洞检测结果。
本申请第三发明提供了一种智能合约代码片段的漏洞检测设备,所述设备包括处理器以及存储器;
所述存储器用于存储程序代码,并将所述程序代码传输给所述处理器;
所述处理器用于根据所述程序代码中的指令执行如第一方面所述的智能合约代码片段的漏洞检测方法。
本申请第四方面提供了一种存储介质,所述存储介质用于存储程序代码,所述程序代码用于执行如第一方面所述的智能合约代码片段的漏洞检测方法。
从以上技术方案可以看出,本申请具有以下优点:
本申请提供了一种智能合约代码片段的漏洞检测方法,首先获取待检测的智能合约的代码片段,接着将代码片段中的数据转换为抽象语法树,然后将抽象语法树和代码合约库中的本地树进行对比,得到与抽象语法树相似的多个目标树,再接着基于目标树的漏洞结果,得到代码片段的漏洞检测结果。本申请中在代码合约库中确定与代码片段相似的目标树,接着便可基于目标树的漏洞结果,确定代码片段的漏洞检测结果,实现了代码片段的漏洞检测,从而解决了现有的漏洞检测方法只能在完整的、能够生成字节码的智能合约中检测漏洞,而对于局部的代码片段无法进行漏洞检测的技术问题。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。
图1为本申请实施例中一种智能合约代码片段的漏洞检测方法的实施例一的流程示意图;
图2为本申请实施例中一种智能合约代码片段的漏洞检测方法的实施例二的流程示意图;
图3为本申请实施例中一种智能合约代码片段的漏洞检测装置的实施例的结构示意图。
具体实施方式
本申请实施例提供了一种智能合约代码片段的漏洞检测方法和相关装置,解决了现有的漏洞检测方法只能在完整的、能够生成字节码的智能合约中检测漏洞,而对于局部的代码片段无法进行漏洞检测的技术问题。
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
请参阅图1,本申请实施例中一种智能合约代码片段的漏洞检测方法的实施例一的流程示意图。
本实施例中的一种智能合约代码片段的漏洞检测方法包括:
步骤101、获取待检测的智能合约的代码片段。
所谓代码片段,即一段没有给出上下文的函数或者依赖尚未给出代码的代码段,许多时候出现在教程或者问答网站中,它能够快速形象的指出给出解决方案,或者指出其他代码的缺陷,一般用于阅读,在编译过程中无法正常输出结果。这些数据在编译过程中无法进行语义分析,但能进行语法分析,产生包含语法信息的抽象语法树。
步骤102、将代码片段中的数据转换为抽象语法树。
具体地,通过语法树抽象化工具将代码片段中的数据转换为抽象语法树。可以理解的是,语法树抽象化化工具可以是多种,例如Esprima、UglifyJS2、Traceur等,本实施例中对此不做具体限定。
步骤103、将抽象语法树和代码合约库中的本地树进行对比,得到与抽象语法树相似的多个目标树。
代码合约库中的数据也以“抽象语法树”的形式存在,故本实施例中将代码片段对应的抽象语法树和代码合约库中的本地树进行对比,将代码合约库中与抽象语法树相似度比较高的本地树作为目标树。具体地,相似度较高的衡量可以是通过相似度阈值等实现,例如本地树和抽象语法树之间的相似度大于相似度预置。
具体地,本地树和抽象语法树对比时的对比原则为:语法结构一致、语义结构类似(即二者语义结构的相似度大于语义结构相似度阈值)。
可以理解的是,代码合约库的配置过程可以参照如下的方式进行:
获取2018年至2020年之间,以太坊上的所有交易记录,这些交易记录包含了交易合约的地址信息,进一步的,获取在这个时间段的所有完整智能合约。对于这些智能合约通过oyente工具和mythril工具获取漏洞检测结果,并将这些漏洞检测结果划分成九种类型,包括:可重入攻击、访问控制、算术错误、未确认返回值、服务拒绝、糟糕随机性、超前交易、时间操纵和短地址。当两个工具都能定位到同一个漏洞,并且为同一个类型时,认定它是一个正确的漏洞。
由于两个工具使用的检测方法不同,一般不会给出相同的检测结果,但是它们大致可以根据漏洞的成因与逻辑划分成上述的九种结果。其中,可重入攻击、访问控制、算术错误、未确认返回值、服务拒绝是从语言层面出发,由于代码编写逻辑导致的问题。糟糕随机性、超前交易、时间操纵的问题在于智能合约部署在区块链上,可能是对区块链的区块进行打包的矿工恶意操纵智能合约的依赖值进行漏洞攻击。短地址是智能合约的编译器层面可能出现的问题,如果编译器层错误的接受了过短的地址,可能引发错误。
步骤104、基于目标树的漏洞结果,得到代码片段的漏洞检测结果。
可以理解的是,一个目标树对应一个完整智能合约的完整代码,故本实施例中在得到与代码片段相似的多个完整代码后,便可确定该代码片段的漏洞结果,也即对应的漏洞检测结果。
本实施例中,首先获取待检测的智能合约的代码片段,接着将代码片段中的数据转换为抽象语法树,然后将抽象语法树和代码合约库中的本地树进行对比,得到与抽象语法树相似的多个目标树,再接着基于目标树的漏洞结果,得到代码片段的漏洞检测结果。本申请中在代码合约库中确定与代码片段相似的目标树,接着便可基于目标树的漏洞结果,确定代码片段的漏洞检测结果,实现了代码片段的漏洞检测,从而解决了现有的漏洞检测方法只能在完整的、能够生成字节码的智能合约中检测漏洞,而对于局部的代码片段无法进行漏洞检测的技术问题。
以上为本申请实施例提供的一种智能合约代码片段的漏洞检测方法的实施例一,以下为本申请实施例提供的一种智能合约代码片段的漏洞检测方法的实施例二。
请参阅图2,本申请实施例中一种智能合约代码片段的漏洞检测方法的实施例二的流程示意图。
本实施例一种智能合约代码片段的漏洞检测方法包括:
步骤201、获取待检测的智能合约的代码片段。
可以理解的是,在实施例的代码片段以函数和合约的形式出现,对于合约形式的代码片段,他们往往处于一个包含多个子合约的完整程序当中,因此他们存在着对其他合约的依赖,属于代码片段。
步骤202、将代码片段中的函数数据转换为函数抽象语法树、代码片段中的合约数据转换为合约抽象语法树。
具体地,一般在使用语法树抽象化工具在进行语法树抽象化时,工具的识别数据一般为合约数据,因此语法树抽象化工具可以直接将合约数据进行抽象化,而对于函数数据,则是在函数数据的数据基础上添加合约数据的框架,使函数数据变成语法树抽象化工具可以识别的“函数数据”。
步骤203、将函数抽象语法树、合约抽象语法树和代码合约库中的各本地树进行对比,得到各本地树对应的相似度。
在将函数抽象语法树和合约抽象语法树进行对比时,将每一个函数抽象语法树与代码合约库中的本地树进行对比,得到该本地树和该函数抽象语法树的相似度。同时也将每一个合约抽象语法树和本地树进行对比,得到该本地树和合约抽象语法树的相似度。
步骤204、根据所有相似度,从本地树中选取出目标树。
在一种具体的实施方式中,根据所有相似度,从本地树中选取出目标树,具体包括:
将相似度最大的N个本地树作为目标树,其中N为2以上的自然数。
可以理解的是,对于数值N的设定,本领域技术人员可以根据需要进行选择,在本实施例中不做具体限定。
步骤205、基于目标树的漏洞结果,得到代码片段的漏洞检测结果。
可以理解的是,在一种实施方式中,代码片段的漏洞确定,可以是将代码片段在目标树中进行映射,在确定目标完整代码后,确定漏洞检测结果,也即首先确定代码片段对应的完整代码后,将该完整代码对应的漏洞作为该代码片段的漏洞,得到漏洞检测结果。可以理解的是,上述过程的具体实施步骤包括:
基于目标树的漏洞结果,得到代码片段的漏洞检测结果,具体包括:
将各目标树的完整代码和代码片段进行对比,得到与代码片段匹配的目标完整代码;
将目标完整代码的漏洞结果作为代码片段的漏洞检测结果。
具体地,将各目标树的完整代码和代码片段进行对比,得到与代码片段匹配的目标完整代码,具体包括:
对比各目标树的完整代码和代码片段,得到各完整代码对应的匹配度;
根据所有匹配度,从完整代码中选取出目标完整代码。
具体地,根据所有匹配度,从完整代码中选取出目标完整代码,具体包括:
将最大的匹配度对应的完整代码作为目标完整代码。
完整代码即对应完整合约,所谓完整合约即一个可以成功编译的,可能包含多个子合约的程序被称为完整合约,智能合约的合约概念类似于其他语言的类的概念,因此一个完整合约可能是一个多合约文件,包含多个无法直接编译的子合约。
可以理解的是,在另外的一种实施方式中,代码片段的漏洞确定,可以是将目标树的漏洞在代码片段中进行映射,根据目标树中漏洞的映射结果确定代码片段的漏洞检测结果。可以理解的是,上述过程的具体实施步骤包括:
将各目标树的各漏洞映射至代码片段,获取各漏洞对应的映射结果;
根据所有映射结果,确定代码片段的漏洞检测结果。
将各目标树的各漏洞映射至代码片段,获取各漏洞对应的映射结果,具体包括:
获取目标树中各漏洞对应的位置信息;
基于各漏洞对应的位置信息将该漏洞映射至代码片段中,当该漏洞存在于代码片段的某行中,且该漏洞出现在所有目标树的漏洞队列中时,判定该漏洞的映射结果为映射成功。
可以理解的是,上述本地树和完整代码的对比过程也可以根据如下的方式进行:
代码片段形成的抽象语法树仅包含语法信息,不包含语义信息,因此本实施例对所有的抽象语法树使用下述方法进行处理与匹配。
①、抽象语法树的每个节点包含词元信息,名称信息,对抽象语法树进行前序遍历,并且对词元信息进行哈希映射,得到一个抽象语法树的前序哈希序列。
②、对抽象语法树的名称信息,使用前序遍历得到前序名称序列。
③、由于代码合约库已经进行了合约与函数层面的抽象语法树提取,也对这部分的抽象语法树做同样的处理,生成哈希序列与名称序列。
④、现在进行代码片段与完整合约的映射,以下以合约为例,函数级别的匹配过程相同。对于一个来自代码片段的合约与一个来自完整合约的合约,要求两者的哈希序列一致的前提下,对双方的名称序列进行BELU的相似度计算,由高到低进行排序。需要说明的是,BELU为一种文本的匹配方式,在本申请中将名称序列视为文本字符串,进行相似度匹配操作。
⑤、根据排序结果,以0.8作为BELU的阈值,取出BELU大于0.8的匹配对(即确定合约对应的目标树),返回匹配队列,用于开发者与代码片段的比对。
⑥、漏洞映射。一个匹配队列意味着与输入的代码片段匹配的、来自完整合约的、存在漏洞的合约组。为了解决没有语义信息带来的不稳定性,根据这组合约的漏洞定位信息,通过预置原则进一步进行漏洞的映射。其中预置原则为:一个漏洞存在于某行当中,并且属于某种漏洞类型,对于这个匹配序列,要求该漏洞出现在该匹配序列中的每一个完整代码对应的漏洞队列中,才能被映射到输入的代码片段,即认为该漏洞为代码片段的漏洞。
本实施例中,首先获取待检测的智能合约的代码片段,接着将代码片段中的数据转换为抽象语法树,然后将抽象语法树和代码合约库中的本地树进行对比,得到与抽象语法树相似的多个目标树,再接着基于目标树的漏洞结果,得到代码片段的漏洞检测结果。本申请中在代码合约库中确定与代码片段相似的目标树,接着便可基于目标树的漏洞结果,确定代码片段的漏洞检测结果,实现了代码片段的漏洞检测,从而解决了现有的漏洞检测方法只能在完整的、能够生成字节码的智能合约中检测漏洞,而对于局部的代码片段无法进行漏洞检测的技术问题。
以上为本申请实施例提供的一种智能合约代码片段的漏洞检测方法的实施例二,以下为本申请实施例提供的一种智能合约代码片段的漏洞检测装置的实施例。
请参阅图3,本申请实施例中一种智能合约代码片段的漏洞检测装置的实施例的结构示意图。
本实施例一种智能合约代码片段的漏洞检测装置包括:
获取单元,用于获取待检测的智能合约的代码片段;
转换单元,用于将代码片段中的数据转换为抽象语法树;
对比单元,用于将抽象语法树和代码合约库中的本地树进行对比,得到与抽象语法树相似的多个目标树;
检测单元,用于基于目标树的漏洞结果,得到代码片段的漏洞检测结果。
可选地,基于目标树的漏洞结果,得到代码片段的漏洞检测结果,具体包括:
将各目标树的完整代码和代码片段进行对比,得到与代码片段匹配的目标完整代码;
将目标完整代码的漏洞结果作为代码片段的漏洞检测结果。
具体地,将各目标树的完整代码和代码片段进行对比,得到与代码片段匹配的目标完整代码,具体包括:
对比各目标树的完整代码和代码片段,得到各完整代码对应的匹配度;
根据所有匹配度,从完整代码中选取出目标完整代码。
具体地,根据所有匹配度,从完整代码中选取出目标完整代码,具体包括:
将最大的匹配度对应的完整代码作为目标完整代码。
可选地,基于目标树的漏洞结果,得到代码片段的漏洞检测结果,具体包括:
将各目标树的各漏洞映射至代码片段,获取各漏洞对应的映射结果;
根据所有映射结果,确定代码片段的漏洞检测结果。
具体地,将各目标树的各漏洞映射至代码片段,获取各漏洞对应的映射结果,具体包括:
获取目标树中各漏洞对应的位置信息;
基于各漏洞对应的位置信息将该漏洞映射至代码片段中,当该漏洞存在于代码片段的某行中,且该漏洞出现在所有目标树的漏洞队列中时,判定该漏洞的映射结果为映射成功。
具体地,根据所有映射结果,确定代码片段的漏洞检测结果,具体包括:
将映射结果为映射成功的漏洞作为代码片段的漏洞,得到代码片段对应的漏洞检测结果。
可选地,转换单元,具体用于将代码片段中的函数数据转换为函数抽象语法树、代码片段中的合约数据转换为合约抽象语法树。
本实施例中,首先获取待检测的智能合约的代码片段,接着将代码片段中的数据转换为抽象语法树,然后将抽象语法树和代码合约库中的本地树进行对比,得到与抽象语法树相似的多个目标树,再接着基于目标树的漏洞结果,得到代码片段的漏洞检测结果。本申请中在代码合约库中确定与代码片段相似的目标树,接着便可基于目标树的漏洞结果,确定代码片段的漏洞检测结果,实现了代码片段的漏洞检测,从而解决了现有的漏洞检测方法只能在完整的、能够生成字节码的智能合约中检测漏洞,而对于局部的代码片段无法进行漏洞检测的技术问题。
本申请实施例还提供了一种智能合约代码片段的漏洞检测设备的实施例,本实施例中的智能合约代码片段的漏洞检测设备包括处理器以及存储器;存储器用于存储程序代码,并将程序代码传输给处理器;处理器用于根据程序代码中的指令执行如实施例一或实施例二的智能合约代码片段的漏洞检测方法。
本申请实施例还提供了一种存储介质的实施例,本实施例中的存储介质用于存储程序代码,程序代码用于执行如实施例一或实施例二的智能合约代码片段的漏洞检测方法。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个待安装电网网络,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,RandomAccessMemory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。
Claims (10)
1.一种智能合约代码片段的漏洞检测方法,其特征在于,包括:
获取待检测的智能合约的代码片段;
将所述代码片段中的数据转换为抽象语法树;
将所述抽象语法树和代码合约库中的本地树进行对比,得到与所述抽象语法树相似的多个目标树;
基于所述目标树的漏洞结果,得到所述代码片段的漏洞检测结果。
2.根据权利要求1所述的智能合约代码片段的漏洞检测方法,其特征在于,基于所述目标树的漏洞结果,得到所述代码片段的漏洞检测结果,具体包括:
将各所述目标树的完整代码和所述代码片段进行对比,得到与所述代码片段匹配的目标完整代码;
将所述目标完整代码的漏洞结果作为所述代码片段的漏洞检测结果。
3.根据权利要求2所述的智能合约代码片段的漏洞检测方法,其特征在于,将各所述目标树的完整代码和所述代码片段进行对比,得到与所述代码片段匹配的目标完整代码,具体包括:
对比各所述目标树的完整代码和所述代码片段,得到各所述完整代码对应的匹配度;
根据所有所述匹配度,从所述完整代码中选取出目标完整代码。
4.根据权利要求3所述的智能合约代码片段的漏洞检测方法,其特征在于,根据所有所述匹配度,从所述完整代码中选取出目标完整代码,具体包括:
将最大的所述匹配度对应的完整代码作为目标完整代码。
5.根据权利要求1所述的智能合约代码片段的漏洞检测方法,其特征在于,基于所述目标树的漏洞结果,得到所述代码片段的漏洞检测结果,具体包括:
将各目标树的各漏洞映射至所述代码片段,获取各漏洞对应的映射结果;
根据所有所述映射结果,确定所述代码片段的漏洞检测结果。
6.根据权利要求5所述的智能合约代码片段的漏洞检测方法,其特征在于,将各目标树的各漏洞映射至所述代码片段,获取各漏洞对应的映射结果,具体包括:
获取所述目标树中各漏洞对应的位置信息;
基于各漏洞对应的所述位置信息将该漏洞映射至所述代码片段中,当该漏洞存在于所述代码片段的某行中,且该漏洞出现在所有所述目标树的漏洞队列中时,判定该漏洞的映射结果为映射成功。
7.根据权利要求6所述的智能合约代码片段的漏洞检测方法,其特征在于,根据所有所述映射结果,确定所述代码片段的漏洞检测结果,具体包括:
将所述映射结果为映射成功的漏洞作为所述代码片段的漏洞,得到所述代码片段对应的漏洞检测结果。
8.一种智能合约代码片段的漏洞检测装置,其特征在于,包括:
获取单元,用于获取待检测的智能合约的代码片段;
转换单元,用于将所述代码片段中的数据转换为抽象语法树;
对比单元,用于将所述抽象语法树和代码合约库中的本地树进行对比,得到与所述抽象语法树相似的多个目标树;
检测单元,用于基于所述目标树的漏洞结果,得到所述代码片段的漏洞检测结果。
9.一种智能合约代码片段的漏洞检测设备,其特征在于,所述设备包括处理器以及存储器;
所述存储器用于存储程序代码,并将所述程序代码传输给所述处理器;
所述处理器用于根据所述程序代码中的指令执行权利要求1至7中任一项所述的智能合约代码片段的漏洞检测方法。
10.一种存储介质,其特征在于,所述存储介质用于存储程序代码,所述程序代码用于执行权利要求1至7中任一项所述的智能合约代码片段的漏洞检测方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111535082.6A CN114201756A (zh) | 2021-12-15 | 2021-12-15 | 一种智能合约代码片段的漏洞检测方法和相关装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111535082.6A CN114201756A (zh) | 2021-12-15 | 2021-12-15 | 一种智能合约代码片段的漏洞检测方法和相关装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114201756A true CN114201756A (zh) | 2022-03-18 |
Family
ID=80654111
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111535082.6A Pending CN114201756A (zh) | 2021-12-15 | 2021-12-15 | 一种智能合约代码片段的漏洞检测方法和相关装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114201756A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116361816A (zh) * | 2023-06-01 | 2023-06-30 | 江西农业大学 | 一种智能合约漏洞检测方法、***、存储介质及设备 |
CN117235727A (zh) * | 2023-11-09 | 2023-12-15 | 中孚安全技术有限公司 | 基于大型语言模型的WebShell识别方法和*** |
-
2021
- 2021-12-15 CN CN202111535082.6A patent/CN114201756A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116361816A (zh) * | 2023-06-01 | 2023-06-30 | 江西农业大学 | 一种智能合约漏洞检测方法、***、存储介质及设备 |
CN116361816B (zh) * | 2023-06-01 | 2023-08-11 | 江西农业大学 | 一种智能合约漏洞检测方法、***、存储介质及设备 |
CN117235727A (zh) * | 2023-11-09 | 2023-12-15 | 中孚安全技术有限公司 | 基于大型语言模型的WebShell识别方法和*** |
CN117235727B (zh) * | 2023-11-09 | 2024-02-23 | 中孚安全技术有限公司 | 基于大型语言模型的WebShell识别方法和*** |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9990583B2 (en) | Match engine for detection of multi-pattern rules | |
CN107506256B (zh) | 一种崩溃数据监控的方法和装置 | |
CN108491228B (zh) | 一种二进制漏洞代码克隆检测方法及*** | |
CN114201756A (zh) | 一种智能合约代码片段的漏洞检测方法和相关装置 | |
CN110581864B (zh) | 一种sql注入攻击的检测方法及装置 | |
CN105653949B (zh) | 一种恶意程序检测方法及装置 | |
WO2021175053A1 (zh) | 一种在虚拟机中执行功能模块的方法和装置 | |
CN109714356A (zh) | 一种异常域名的识别方法、装置及电子设备 | |
CN109460220A (zh) | 报文预定义代码生成方法、装置、电子设备和存储介质 | |
CN113961768B (zh) | 敏感词检测方法、装置、计算机设备和存储介质 | |
CN113381963B (zh) | 一种域名检测方法、装置和存储介质 | |
CN111159329A (zh) | 敏感词检测方法、装置、终端设备和计算机可读存储介质 | |
CN112989348A (zh) | 攻击检测方法、模型训练方法、装置、服务器及存储介质 | |
CN110362995A (zh) | 一种基于逆向与机器学习的恶意软件检测及分析*** | |
CN111240772B (zh) | 一种基于区块链的数据处理方法、装置及存储介质 | |
CN102929596B (zh) | 代码排查方法和相关装置 | |
Wang et al. | Gvd-net: Graph embedding-based machine learning model for smart contract vulnerability detection | |
CN114510717A (zh) | 一种elf文件的检测方法、装置、存储介质 | |
CN114186233A (zh) | 代码的反混淆方法、装置、电子设备及存储介质 | |
CN114637988A (zh) | 一种面向二进制的函数级软件随机化方法 | |
CN114201176A (zh) | 一种智能合约编译匹配方法、装置、设备和存储介质 | |
KR20220077847A (ko) | 교차 아키텍처 바이너리에 대한 이진 비교 방법 | |
CN112035890B (zh) | 一种数据完整性验证方法及装置 | |
CN117201138B (zh) | 一种基于漏洞子图的智能合约漏洞检测方法、***和设备 | |
CN117972399B (zh) | 用于二进制sca的特征提取方法、装置、设备及介质 |
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 |