CN114662119A - 一种智能合约漏洞检测方法及装置 - Google Patents
一种智能合约漏洞检测方法及装置 Download PDFInfo
- Publication number
- CN114662119A CN114662119A CN202210264346.7A CN202210264346A CN114662119A CN 114662119 A CN114662119 A CN 114662119A CN 202210264346 A CN202210264346 A CN 202210264346A CN 114662119 A CN114662119 A CN 114662119A
- Authority
- CN
- China
- Prior art keywords
- vulnerability
- data set
- syntax tree
- function
- names
- 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 29
- 230000006870 function Effects 0.000 claims abstract description 184
- 238000000034 method Methods 0.000 claims abstract description 37
- 230000003068 static effect Effects 0.000 claims abstract description 32
- 238000012549 training Methods 0.000 claims description 39
- 238000013145 classification model Methods 0.000 claims description 28
- 230000008569 process Effects 0.000 claims description 17
- 239000011159 matrix material Substances 0.000 claims description 16
- 238000002372 labelling Methods 0.000 claims description 13
- 238000011176 pooling Methods 0.000 claims description 12
- 238000006243 chemical reaction Methods 0.000 claims description 7
- 238000013507 mapping Methods 0.000 claims description 7
- 238000004891 communication Methods 0.000 description 7
- 238000010586 diagram Methods 0.000 description 6
- 238000012545 processing Methods 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 238000013527 convolutional neural network Methods 0.000 description 3
- 238000013528 artificial neural network Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000003062 neural network model Methods 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 238000012038 vulnerability analysis Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/21—Design or setup of recognition systems or techniques; Extraction of features in feature space; Blind source separation
- G06F18/214—Generating training patterns; Bootstrap methods, e.g. bagging or boosting
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/24—Classification techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/37—Compiler construction; Parser generation
-
- 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
- G06F8/42—Syntactic analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/084—Backpropagation, e.g. using gradient descent
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Artificial Intelligence (AREA)
- Evolutionary Computation (AREA)
- Life Sciences & Earth Sciences (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Health & Medical Sciences (AREA)
- Mathematical Physics (AREA)
- Evolutionary Biology (AREA)
- Bioinformatics & Computational Biology (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Stored Programmes (AREA)
Abstract
本申请公开一种智能合约漏洞检测方法及装置,本申请通过获取待测智能合约代码,将待测智能合约代码转化成静态单赋值形式,利用编译器将静态单赋值形式的待测智能合约代码编译成抽象语法树,根据预设规则对抽象语法树进行拆分,得到多个包含函数的函数级语法树,针对每一函数级语法树,根据预设的函数数据集,查找与函数级语法树中包含的函数对应的漏洞标签,并将函数级语法树与对应的漏洞标签组成目标数据集,对所述目标数据集进行漏洞分类,得到分类结果。由于本申请通过将待测智能合约代码转化成静态单赋值形式,并转化拆分成函数级语法树,对函数级语法树进行漏洞检测,相比于现有技术,提高了从函数程度上找出智能合约的代码漏洞的效率。
Description
技术领域
本申请涉及漏洞检测领域,特别是一种智能合约漏洞检测方法及装置。
背景技术
随着社会科学技术的发展,区块链技术得到广泛应用,其中大量的智能合约被应用到不同领域,包括金融服务、公共服务、物联网等。随着智能合约应用范围的增大以及实现的功能更加复杂化,出现了许多严重的漏洞。
针对智能合约的漏洞安全问题,现在的大部分做法是人为的静态分析智能合约代码,由于漏洞代码只占整个智能合约代码的极小部分,导致分析漏洞需要巨大的运行成本和花费大量的时间,从而造成资源浪费,如何提高从函数程度上找出智能合约的代码漏洞的效率是人们关注的问题。
发明内容
有鉴于此,本申请提供了一种智能合约漏洞检测方法及装置,用于提高从函数程度上找出智能合约的代码漏洞的效率。
为了实现上述目的,现提出的方案如下:
一种智能合约漏洞检测方法,包括:
获取待测智能合约代码;
将所述待测智能合约代码转化成静态单赋值形式;
利用编译器将所述静态单赋值形式的待测智能合约代码编译成抽象语法树;
根据预设规则对所述抽象语法树进行拆分,得到多个包含函数的函数级语法树;
针对每一函数级语法树,根据预设的函数数据集,查找与所述函数级语法树中包含的函数对应的漏洞标签,并将所述函数级语法树与对应的漏洞标签组成目标数据集,所述函数数据集预先存储有函数与漏洞标签的对应关系;
对所述目标数据集进行漏洞分类,得到分类结果。
可选的,所述抽象语法树由包含类型名和变量名的节点构成,在对所述目标数据集进行漏洞分类之前,还包括:
将所述抽象语法树的节点中的类型名和变量名分别对应填入预设的对照表中,得到目标对照表,所述对照表用于记录类型名和变量名及对应标号;
将所述函数级语法树中相同的节点进行合并,并将合并后的函数级语法树转化成函数级代码图;
根据所述目标对照表,将所述函数级代码图的节点中的类型名及变量名转化成对应的标号,得到标号形式的函数级代码图;
将所述标号形式的函数级代码图与所述漏洞标签组成新的目标数据集;
对所述目标数据集进行漏洞分类,得到分类结果的过程,包括:
对所述新的目标数据集进行漏洞分类,得到分类结果。
可选的,所述对所述目标数据集进行漏洞分类,得到分类结果,包括:
将所述目标数据集输入漏洞分类模型,得到所述漏洞分类模型输出的所述目标数据集的漏洞分类结果;
所述漏洞分类模型以训练数据集作为训练样本,以训练数据集的漏洞分类结果作为训练标签训练得到。
可选的,所述漏洞分类模型包括输入层、卷积层、池化层、输出层;
所述漏洞分类模型的训练过程,包括:
通过输入层,获取训练数据集;
通过卷积层,对所述训练数据集进行特征提取,得到特征矩阵;
通过池化层,对所述特征矩阵进行池化,得到统一大小的特征矩阵;
通过输出层,基于所述统一大小的特征矩阵,确定并输出漏洞分类结果;
基于确定的训练数据集的漏洞分类结果与所述训练数据集的漏洞分类标签的差值,确定漏洞分类损失值;
根据所述漏洞分类损失值,更新漏洞分类模型的参数。
可选的,在将所述抽象语法树的节点中的类型名和变量名分别对应填入预设的对照表中之前,还包括:
删除所述抽象语法树的节点中,除类型名和变量名之外的内容,得到由类型名和变量名组成的二元对;
将所述抽象语法树的节点中的类型名和变量名分别对应填入预设的对照表中的过程包括:
将所述抽象语法树的节点的二元对中的类型名和变量名分别对应填入预设的对照表中。
可选的,所述对照表包括类型词汇表和变量名词汇表,将所述抽象语法树的节点中的类型名和变量名分别对应填入预设的对照表中,包括:
将所述抽象语法树的节点中的类型名填入所述类型词汇表并根据记录顺序进行标号;
将所述抽象语法树的节点中的变量名填入所述变量名词汇表并根据记录顺序进行标号;
其中,所述类型词汇表记录的类型名不重复,及所述变量名词汇表记录的变量名不重复。
可选的,在将所述抽象语法树的节点中的类型名和变量名分别对应填入预设的对照表中之前,还包括:
构建对照表,所述对照表包括类型词汇表及变量名词汇表,所述类型词汇表用于记录需保留的抽象语法树中的类型名并根据记录顺序进行标号,所述变量名词汇表用于记录需保留的抽象语法树中的变量名并根据记录顺序进行标号。
可选的,在将所述抽象语法树的节点中的类型名和变量名分别对应填入预设的对照表中之前,还包括:
构建函数数据集,所述函数数据集包括合约名、函数名、漏洞标签,所述漏洞标签包括有漏洞或没有漏洞。
一种智能合约漏洞检测装置,包括:
代码获取单元,用于获取待测智能合约代码;
代码转化单元,用于将所述待测智能合约代码转化成静态单赋值形式;
代码编译单元,用于利用编译器将所述静态单赋值形式的待测智能合约代码编译成抽象语法树;
语法树拆分单元,用于根据预设规则对所述抽象语法树进行拆分,得到多个包含函数的函数级语法树;
数据集组成单元,用于针对每一函数级语法树,根据预设的函数数据集,查找与所述函数级语法树中包含的函数对应的漏洞标签,并将所述函数级语法树与对应的漏洞标签组成目标数据集,所述函数数据集预先存储有函数与漏洞标签的对应关系;
漏洞分类单元,用于对所述目标数据集进行漏洞分类,得到分类结果。
可选的,本装置还包括:
对照表填入单元,用于在对所述目标数据集进行漏洞分类之前,将所述抽象语法树的节点中的类型名和变量名分别对应填入预设的对照表中,得到目标对照表,所述对照表用于记录类型名和变量名及对应标号;
语法树合并单元,用于将所述函数级语法树中相同的节点进行合并,并将合并后的函数级语法树转化成函数级代码图;
标号转化单元,用于根据所述目标对照表,将所述函数级代码图的节点中的类型名及变量名转化成对应的标号,得到标号形式的函数级代码图;
目标数据集组成单元,用于将所述标号形式的函数级代码图与所述漏洞标签组成新的目标数据集;
所述漏洞分类单元还用于对所述新的目标数据集进行漏洞分类,得到分类结果。
从以上技术方案可以看出,本申请实施例具有以下优点:
本申请提供的一种智能合约漏洞检测方法及装置,本申请通过获取待测智能合约代码,将待测智能合约代码转化成静态单赋值形式,利用编译器将静态单赋值形式的待测智能合约代码编译成抽象语法树,根据预设规则对抽象语法树进行拆分,得到多个包含函数的函数级语法树,针对每一函数级语法树,根据预设的函数数据集,查找与函数级语法树中包含的函数对应的漏洞标签,并将函数级语法树与对应的漏洞标签组成目标数据集,对所述目标数据集进行漏洞分类,得到分类结果。由于本申请通过将待测智能合约代码转化成静态单赋值形式,并转化拆分成函数级语法树,对函数级语法树进行漏洞检测,相比于现有技术,提高了从函数程度上找出智能合约的代码漏洞的效率。
附图说明
图1为本申请实施例提供的一种智能合约漏洞检测方法流程图;
图2为本申请实施例提供的一种静态单赋值形式代码转化示意图;
图3为本申请实施例提供的一种抽象语法树拆分示意图;
图4为本申请实施例提供的一种智能合约漏洞检测装置结构示意图;
图5为本申请实施例提供的一种智能合约漏洞检测设备的硬件结构框图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
图1为本申请实施例提供的一种智能合约漏洞检测方法流程图,该方法可以包括以下步骤:
步骤S100、获取待测智能合约代码。
具体的,智能合约代码可以是保存在区块链上的一段代码,可以通过多种途径获取待测智能合约代码,示例如可以是电脑、手机及拥有获取待测智能合约代码的电子设备。
步骤S110、将所述待测智能合约代码转化成静态单赋值形式。
具体的,为了体现相同名字的变量具有不同值的现象,可以引用静态单赋值形式,静态单赋值形式(static single assignment form,通常简写为SSA form或是SSA)可以是代码的一种中间表示形式,在这种表示形式下,每个变量在运维审计系统中仅被赋值一次,即变量每改变一次都会得到一个新的赋值,如图2所示,原始代码中的变量x在变为SSA形式代码即静态单赋值形式代码后,变量x每改变一次都会与上一次有所区别,即x1和x2,可以通过将待测智能合约代码转化成静态单赋值形式,为转化成抽象语法树做准备。
步骤S120、利用编译器将所述静态单赋值形式的待测智能合约代码编译成抽象语法树。
具体的,抽象语法树(Abstract Syntax Tree,AST),是源代码语法结构的一种抽象表示,它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构,可以利用编译器将静态单赋值形式的待测智能合约代码编译成抽象语法树。
步骤S130、根据预设规则对所述抽象语法树进行拆分,得到多个包含函数的函数级语法树。
具体的,由于需要从函数级层面来对智能合约漏洞进行识别,因此需要对整个智能合约的抽象语法树进行拆分,如图3所示,抽象语法树可以是多层结构,可以根据预设规则对抽象语法树进行拆分,得到多个包含函数的函数级语法树。
步骤S140、针对每一函数级语法树,根据预设的函数数据集,查找与所述函数级语法树中包含的函数对应的漏洞标签,并将所述函数级语法树与对应的漏洞标签组成目标数据集。
具体的,所述函数数据集可以预先存储有函数与漏洞标签的对应关系,可以通过查找函数数据集的方式,查询与函数级语法树对应的漏洞标签,为方便后续对查询结果的应用,可以并将函数级语法树与对应的漏洞标签组成目标数据集。
步骤S150、对所述目标数据集进行漏洞分类,得到分类结果。
具体的,由于智能合约包含多种函数,为了从函数层面得到漏洞检测结果,以及为了方便技术人员对漏洞函数进行分析,可以对目标数据集进行漏洞分类,得到分类结果。
从上述的技术方案可以看出,本申请实施例提供的一种智能合约漏洞检测方法及装置,通过获取待测智能合约代码,将待测智能合约代码转化成静态单赋值形式,利用编译器将静态单赋值形式的待测智能合约代码编译成抽象语法树,根据预设规则对抽象语法树进行拆分,得到多个包含函数的函数级语法树,针对每一函数级语法树,根据预设的函数数据集,查找与函数级语法树中包含的函数对应的漏洞标签,并将函数级语法树与对应的漏洞标签组成目标数据集,对所述目标数据集进行漏洞分类,得到分类结果。由于本申请通过将待测智能合约代码转化成静态单赋值形式,并转化拆分成函数级语法树,对函数级语法树进行漏洞检测,相比于现有技术,提高了从函数程度上找出智能合约的代码漏洞的效率。
进一步的,在步骤S140、针对每一函数级语法树,根据预设的函数数据集,查找与所述函数级语法树中包含的函数对应的漏洞标签之前,还可以包括如下步骤:
构建函数数据集。
具体的,函数数据集可以包括合约名、函数名、漏洞标签,漏洞标签包括有漏洞或没有漏洞,示例如函数数据集可以是(合约名,函数名,漏洞标签)的形式,漏洞标签可以是用1表示有漏洞,0表示没有漏洞。
在本申请的一些实施例中,考虑到智能合约中可能含有大量相同函数代码的情况,以及在代码处理过程中,为了减少识别抽象语法树的过程中可能出现的过长的类型名及变量名,并且为了减少数据处理时长,可以在步骤S150、对所述目标数据集进行漏洞分类,得到分类结果之前,还包括以下步骤:
步骤S160、将所述抽象语法树的节点中的类型名和变量名分别对应填入预设的对照表中,得到目标对照表。
具体的,对照表可以是用于记录类型名和变量名及对应标号,可以将抽象语法树的节点中的类型名和变量名分别对应填入预设的对照表中,得到目标对照表。
进一步的,对照表可以包括类型词汇表和变量名词汇表,填入预设的对照表的过程可以包括以下步骤:
步骤S161、将所述抽象语法树的节点中的类型名填入所述类型词汇表并根据记录顺序进行标号。
具体的,类型名示例如Unit、String、Expression、doWhileStatement等,可以将抽象语法树的节点中的类型名填入类型词汇表中,示例如类型词汇表Ltype,并对其按记录顺序进行标号,标号示例如(a,1)这样的有序数对。
步骤S162、将所述抽象语法树的节点中的变量名填入所述变量名词汇表并根据记录顺序进行标号。
具体的,变量名示例如a、b、user、has、100等,可以将抽象语法树的节点中的变量名填入变量名词汇表中,示例如变量名词汇表Lname,并根据记录顺序对其进行标号。
其中,所述类型词汇表记录的类型名不重复,及所述变量名词汇表记录的变量名不重复,示例如可以通过仅记录第一次出现的类型名及变量名的方式。
进一步的,在步骤S160、将所述抽象语法树的节点中的类型名和变量名分别对应填入预设的对照表中,得到目标对照表之前,还可以包括如下步骤:
构建对照表。
具体的,对照表可以包括类型词汇表及变量名词汇表,类型词汇表可以用于记录需保留的抽象语法树中的类型名并根据记录顺序进行标号,变量名词汇表可以用于记录需保留的抽象语法树中的变量名并根据记录顺序进行标号。
步骤S170、将所述函数级语法树中相同的节点进行合并,并将合并后的函数级语法树转化成函数级代码图。
具体的,可以对每一个函数级语法树进行分析,检查是否有相同值的节点,即包含相同的类型名和变量名,如果完全相同,则将这两个节点进行合并,合并方式可以是删除其中一个重复节点,并将指向被删除的节点的边连接到保留下来的节点上,直到没有相同节点为止,由于修改了树结构,可能存在树结构不再成立,因此可以将合并后的函数级语法树转化成函数级代码图。
步骤S180、根据所述目标对照表,将所述函数级代码图的节点中的类型名及变量名转化成对应的标号,得到标号形式的函数级代码图。
具体的,考虑到抽象语法树中可能出现过长的类型名及变量名,为了减少数据处理时长,可以根据目标对照表,将函数级代码图的节点中的类型名及变量名转化成对应的标号,得到标号形式的函数级代码图。
步骤S190、将所述标号形式的函数级代码图与所述漏洞标签组成新的目标数据集。
具体的,由于得到了标号形式的函数级代码图,为了方便数据读取,可以将标号形式的函数级代码图与所述漏洞标签组成新的目标数据集。
进一步的,可以在步骤S150的基础上,可以对新的目标数据集进行漏洞分类,得到分类结果。
在本申请的一些实施例中,下面对步骤S150、对所述目标数据集进行漏洞分类,得到分类结果的过程进行介绍,该过程可以包括:
步骤S151、将所述目标数据集输入漏洞分类模型,得到所述漏洞分类模型输出的所述目标数据集的漏洞分类结果。
其中,所述漏洞分类模型以训练数据集作为训练样本,以训练数据集的漏洞分类结果作为训练标签训练得到。
具体的,漏洞分类模型可以是采用神经网络模型,所采用的神经网络模型的结构可以有多种,如卷积神经网络(CNN,Convolutional Neural Network)、反向传播网络(BP,Back Propagation Net-work)、循环注意力神经网络(RA-CNN,Recurrent AttentionConvolutional Neural Network)和CenterNet网络等,或者是对现有的网络进行改进后的网络结构,可以将目标数据集输入漏洞分类模型,得到漏洞分类模型输出的目标数据集的漏洞分类结果。
进一步的,漏洞分类模型可以包括输入层、卷积层、池化层、输出层,漏洞分类模型的训练过程可以包括如下步骤:
S1、通过输入层,获取训练数据集。
S2、通过卷积层,对所述训练数据集进行特征提取,得到特征矩阵。
S3、通过池化层,对所述特征矩阵进行池化,得到统一大小的特征矩阵。
S4、通过输出层,基于所述统一大小的特征矩阵,确定并输出漏洞分类结果。
S5、基于确定的训练数据集的漏洞分类结果与所述训练数据集的漏洞分类标签的差值,确定漏洞分类损失值。
S6、根据所述漏洞分类损失值,更新漏洞分类模型的参数。
在本申请的一些实施例中,为了进一步减少数据运行时长,将一些除类型名及变量名之外的数据删除,在步骤S160、将所述抽象语法树的节点中的类型名和变量名分别对应填入预设的对照表中之前,还可以包括如下步骤:
步骤S200、删除所述抽象语法树的节点中,除类型名和变量名之外的内容,得到由类型名和变量名组成的二元对。
具体的,除函数名和变量名之外的内容示例如该函数的性质,二元对的形式可以是(类型名,变量名),考虑到其中可能存在类型名或变量名为空的情况,可以将其设为None,可以删除抽象语法树的节点汇总除类型名和变量名之外的内容,仅保留类型名及变量名,为了方便后续对数据的读取,可以将类型名及边量名组成二元对。
进一步的,将所述抽象语法树的节点中的类型名和变量名分别对应填入预设的对照表中的过程可以包括如下步骤:
步骤S163、将所述抽象语法树的节点的二元对中的类型名和变量名分别对应填入预设的对照表中。
具体的,步骤S163与前述实施例中步骤S160对应,详细参照前述介绍,此处不再赘述。
下面对本申请实施例提供的智能合约漏洞检测装置进行描述,下文描述的智能合约漏洞检测装置与上文描述的智能合约漏洞检测方法可相互对应参照。
参见图4,图4为本申请实施例提供的一种智能合约漏洞检测装置结构示意图,该装置可以包括:
代码获取单元10,用于获取待测智能合约代码;
代码转化单元20,用于将所述待测智能合约代码转化成静态单赋值形式;
代码编译单元30,用于利用编译器将所述静态单赋值形式的待测智能合约代码编译成抽象语法树;
语法树拆分单元40,用于根据预设规则对所述抽象语法树进行拆分,得到多个包含函数的函数级语法树;
数据集组成单元50,用于针对每一函数级语法树,根据预设的函数数据集,查找与所述函数级语法树中包含的函数对应的漏洞标签,并将所述函数级语法树与对应的漏洞标签组成目标数据集,所述函数数据集预先存储有函数与漏洞标签的对应关系;
漏洞分类单元60,用于对所述目标数据集进行漏洞分类,得到分类结果。
可选的,本装置还可以包括:
对照表填入单元,用于在对所述目标数据集进行漏洞分类之前,将所述抽象语法树的节点中的类型名和变量名分别对应填入预设的对照表中,得到目标对照表,所述对照表用于记录类型名和变量名及对应标号;
语法树合并单元,用于将所述函数级语法树中相同的节点进行合并,并将合并后的函数级语法树转化成函数级代码图;
标号转化单元,用于根据所述目标对照表,将所述函数级代码图的节点中的类型名及变量名转化成对应的标号,得到标号形式的函数级代码图;
目标数据集组成单元,用于将所述标号形式的函数级代码图与所述漏洞标签组成新的目标数据集;
所述漏洞分类单元60还可以用于对所述新的目标数据集进行漏洞分类,得到分类结果。
可选的,所述漏洞分类单元60可以包括:
分类模型单元,用于将所述目标数据集输入漏洞分类模型,得到所述漏洞分类模型输出的所述目标数据集的漏洞分类结果;
所述漏洞分类模型以训练数据集作为训练样本,以训练数据集的漏洞分类结果作为训练标签训练得到。
可选的,所述漏洞分类模型包括输入层、卷积层、池化层、输出层;
所述漏洞分类模型的训练过程,包括:
通过输入层,获取训练数据集;
通过卷积层,对所述训练数据集进行特征提取,得到特征矩阵;
通过池化层,对所述特征矩阵进行池化,得到统一大小的特征矩阵;
通过输出层,基于所述统一大小的特征矩阵,确定并输出漏洞分类结果;
基于确定的训练数据集的漏洞分类结果与所述训练数据集的漏洞分类标签的差值,确定漏洞分类损失值;
根据所述漏洞分类损失值,更新漏洞分类模型的参数。
可选的,本装置还包括:
内容删除单元,用于在执行所述对照表填入单元之前,删除所述抽象语法树的节点中,除类型名和变量名之外的内容,得到由类型名和变量名组成的二元对;
所述对照表填入单元还可以用于将所述抽象语法树的节点的二元对中的类型名和变量名分别对应填入预设的对照表中。
可选的,所述对照表可以包括类型词汇表和变量名词汇表,所述对照表填入单元可以包括:
类型名填入单元,用于将所述抽象语法树的节点中的类型名填入所述类型词汇表并根据记录顺序进行标号;
变量名填入单元,用于将所述抽象语法树的节点中的变量名填入所述变量名词汇表并根据记录顺序进行标号;
其中,所述类型词汇表记录的类型名不重复,及所述变量名词汇表记录的变量名不重复。
可选的,本装置还可以包括:
对照表构建单元,用于在执行对照表填入单元之前,构建对照表,所述对照表包括类型词汇表及变量名词汇表,所述类型词汇表用于记录需保留的抽象语法树中的类型名并根据记录顺序进行标号,所述变量名词汇表用于记录需保留的抽象语法树中的变量名并根据记录顺序进行标号。
可选的,本装置还可以包括:
函数数据集构建单元,用于在执行数据集组成单元50之前,构建函数数据集,所述函数数据集包括合约名、函数名、漏洞标签,所述漏洞标签包括有漏洞或没有漏洞。
本申请实施例提供的智能合约漏洞检测装置可应用于智能合约漏洞检测设备。智能合约漏洞检测设备可以是终端。图5示出了智能合约漏洞检测设备的硬件结构框图,参照图5,智能合约漏洞检测设备的硬件结构可以包括:至少一个处理器1,至少一个通信接口2,至少一个存储器3和至少一个通信总线4;
在本申请实施例中,处理器1、通信接口2、存储器3、通信总线4的数量为至少一个,且处理器1、通信接口2、存储器3通过通信总线4完成相互间的通信;
处理器1可能是一个中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路等;
存储器3可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatilememory)等,例如至少一个磁盘存储器;
其中,存储器存储有程序,处理器可调用存储器存储的程序,所述程序用于:
获取待测智能合约代码;
将所述待测智能合约代码转化成静态单赋值形式;
利用编译器将所述静态单赋值形式的待测智能合约代码编译成抽象语法树;
根据预设规则对所述抽象语法树进行拆分,得到多个包含函数的函数级语法树;
针对每一函数级语法树,根据预设的函数数据集,查找与所述函数级语法树中包含的函数对应的漏洞标签,并将所述函数级语法树与对应的漏洞标签组成目标数据集,所述函数数据集预先存储有函数与漏洞标签的对应关系;
对所述目标数据集进行漏洞分类,得到分类结果。
可选的,所述程序的细化功能和扩展功能可参照上文描述。
本申请实施例还提供一种存储介质,该存储介质可存储有适于处理器执行的程序,所述程序用于:
获取待测智能合约代码;
将所述待测智能合约代码转化成静态单赋值形式;
利用编译器将所述静态单赋值形式的待测智能合约代码编译成抽象语法树;
根据预设规则对所述抽象语法树进行拆分,得到多个包含函数的函数级语法树;
针对每一函数级语法树,根据预设的函数数据集,查找与所述函数级语法树中包含的函数对应的漏洞标签,并将所述函数级语法树与对应的漏洞标签组成目标数据集,所述函数数据集预先存储有函数与漏洞标签的对应关系;
对所述目标数据集进行漏洞分类,得到分类结果。
可选的,所述程序的细化功能和扩展功能可参照上文描述。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间可以相互组合,且相同相似部分互相参见即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种智能合约漏洞检测方法,其特征在于,包括:
获取待测智能合约代码;
将所述待测智能合约代码转化成静态单赋值形式;
利用编译器将所述静态单赋值形式的待测智能合约代码编译成抽象语法树;
根据预设规则对所述抽象语法树进行拆分,得到多个包含函数的函数级语法树;
针对每一函数级语法树,根据预设的函数数据集,查找与所述函数级语法树中包含的函数对应的漏洞标签,并将所述函数级语法树与对应的漏洞标签组成目标数据集,所述函数数据集预先存储有函数与漏洞标签的对应关系;
对所述目标数据集进行漏洞分类,得到分类结果。
2.根据权利要求1所述的方法,其特征在于,所述抽象语法树由包含类型名和变量名的节点构成,在对所述目标数据集进行漏洞分类之前,还包括:
将所述抽象语法树的节点中的类型名和变量名分别对应填入预设的对照表中,得到目标对照表,所述对照表用于记录类型名和变量名及对应标号;
将所述函数级语法树中相同的节点进行合并,并将合并后的函数级语法树转化成函数级代码图;
根据所述目标对照表,将所述函数级代码图的节点中的类型名及变量名转化成对应的标号,得到标号形式的函数级代码图;
将所述标号形式的函数级代码图与所述漏洞标签组成新的目标数据集;
对所述目标数据集进行漏洞分类,得到分类结果的过程,包括:
对所述新的目标数据集进行漏洞分类,得到分类结果。
3.根据权利要求1所述的方法,其特征在于,所述对所述目标数据集进行漏洞分类,得到分类结果,包括:
将所述目标数据集输入漏洞分类模型,得到所述漏洞分类模型输出的所述目标数据集的漏洞分类结果;
所述漏洞分类模型以训练数据集作为训练样本,以训练数据集的漏洞分类结果作为训练标签训练得到。
4.根据权利要求3所述的方法,其特征在于,所述漏洞分类模型包括输入层、卷积层、池化层、输出层;
所述漏洞分类模型的训练过程,包括:
通过输入层,获取训练数据集;
通过卷积层,对所述训练数据集进行特征提取,得到特征矩阵;
通过池化层,对所述特征矩阵进行池化,得到统一大小的特征矩阵;
通过输出层,基于所述统一大小的特征矩阵,确定并输出漏洞分类结果;
基于确定的训练数据集的漏洞分类结果与所述训练数据集的漏洞分类标签的差值,确定漏洞分类损失值;
根据所述漏洞分类损失值,更新漏洞分类模型的参数。
5.根据权利要求2所述的方法,其特征在于,在将所述抽象语法树的节点中的类型名和变量名分别对应填入预设的对照表中之前,还包括:
删除所述抽象语法树的节点中,除类型名和变量名之外的内容,得到由类型名和变量名组成的二元对;
将所述抽象语法树的节点中的类型名和变量名分别对应填入预设的对照表中的过程包括:
将所述抽象语法树的节点的二元对中的类型名和变量名分别对应填入预设的对照表中。
6.根据权利要求2所述的方法,其特征在于,所述对照表包括类型词汇表和变量名词汇表,将所述抽象语法树的节点中的类型名和变量名分别对应填入预设的对照表中,包括:
将所述抽象语法树的节点中的类型名填入所述类型词汇表并根据记录顺序进行标号;
将所述抽象语法树的节点中的变量名填入所述变量名词汇表并根据记录顺序进行标号;
其中,所述类型词汇表记录的类型名不重复,及所述变量名词汇表记录的变量名不重复。
7.根据权利要求2所述的方法,其特征在于,在将所述抽象语法树的节点中的类型名和变量名分别对应填入预设的对照表中之前,还包括:
构建对照表,所述对照表包括类型词汇表及变量名词汇表,所述类型词汇表用于记录需保留的抽象语法树中的类型名并根据记录顺序进行标号,所述变量名词汇表用于记录需保留的抽象语法树中的变量名并根据记录顺序进行标号。
8.根据权利要求1所述的方法,其特征在于,在查找与所述函数级语法树中包含的函数对应的漏洞标签之前,还包括:
构建函数数据集,所述函数数据集包括合约名、函数名、漏洞标签,所述漏洞标签包括有漏洞或没有漏洞。
9.一种智能合约漏洞检测装置,其特征在于,包括:
代码获取单元,用于获取待测智能合约代码;
代码转化单元,用于将所述待测智能合约代码转化成静态单赋值形式;
代码编译单元,用于利用编译器将所述静态单赋值形式的待测智能合约代码编译成抽象语法树;
语法树拆分单元,用于根据预设规则对所述抽象语法树进行拆分,得到多个包含函数的函数级语法树;
数据集组成单元,用于针对每一函数级语法树,根据预设的函数数据集,查找与所述函数级语法树中包含的函数对应的漏洞标签,并将所述函数级语法树与对应的漏洞标签组成目标数据集,所述函数数据集预先存储有函数与漏洞标签的对应关系;
漏洞分类单元,用于对所述目标数据集进行漏洞分类,得到分类结果。
10.根据权利要求9所述的装置,其特征在于,还包括:
对照表填入单元,用于在对所述目标数据集进行漏洞分类之前,将所述抽象语法树的节点中的类型名和变量名分别对应填入预设的对照表中,得到目标对照表,所述对照表用于记录类型名和变量名及对应标号;
语法树合并单元,用于将所述函数级语法树中相同的节点进行合并,并将合并后的函数级语法树转化成函数级代码图;
标号转化单元,用于根据所述目标对照表,将所述函数级代码图的节点中的类型名及变量名转化成对应的标号,得到标号形式的函数级代码图;
目标数据集组成单元,用于将所述标号形式的函数级代码图与所述漏洞标签组成新的目标数据集;
所述漏洞分类单元还用于对所述新的目标数据集进行漏洞分类,得到分类结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210264346.7A CN114662119A (zh) | 2022-03-17 | 2022-03-17 | 一种智能合约漏洞检测方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210264346.7A CN114662119A (zh) | 2022-03-17 | 2022-03-17 | 一种智能合约漏洞检测方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114662119A true CN114662119A (zh) | 2022-06-24 |
Family
ID=82028629
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210264346.7A Pending CN114662119A (zh) | 2022-03-17 | 2022-03-17 | 一种智能合约漏洞检测方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114662119A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115146282A (zh) * | 2022-08-31 | 2022-10-04 | 中国科学院大学 | 基于ast的源代码异常检测方法及其装置 |
-
2022
- 2022-03-17 CN CN202210264346.7A patent/CN114662119A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115146282A (zh) * | 2022-08-31 | 2022-10-04 | 中国科学院大学 | 基于ast的源代码异常检测方法及其装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107423391B (zh) | 网页结构化数据的信息提取方法 | |
CN112882974A (zh) | 一种json数据转换方法、装置、计算机设备和存储介质 | |
CN111562920A (zh) | 小程序代码相似度确定方法、装置、服务器及存储介质 | |
CN114662119A (zh) | 一种智能合约漏洞检测方法及装置 | |
CN111813744A (zh) | 文件的搜索方法、装置、设备及存储介质 | |
CN115048382A (zh) | 基于二叉树的层级数据搜索方法、装置、设备及存储介质 | |
CN113254024A (zh) | 代码继承关系优化方法、装置、设备及存储介质 | |
CN107463578B (zh) | 应用下载量统计数据去重方法、装置和终端设备 | |
CN113065322A (zh) | 一种代码段注释生成方法、系统及可读存储介质 | |
CN113535798A (zh) | 基于大数据挖掘的网络训练方法及数字内容中心 | |
CN113806647A (zh) | 识别开发框架的方法及相关设备 | |
CN114490673B (zh) | 数据信息处理方法、装置、电子设备及存储介质 | |
CN104376000A (zh) | 确定网页属性的方法及装置 | |
CN110781310A (zh) | 目标概念图谱的构建方法、装置、计算机设备和存储介质 | |
CN114880673A (zh) | 针对小程序源代码进行隐私数据泄露检测的方法及系统 | |
CN113076089B (zh) | 一种基于对象类型的api补全方法 | |
CN112130860B (zh) | Json对象解析方法、装置、电子设备及存储介质 | |
CN114840642A (zh) | 事件抽取方法、装置、设备及存储介质 | |
CN112069236A (zh) | 关联文件的展示方法、装置、设备及存储介质 | |
CN114580533A (zh) | 特征提取模型的训练方法、装置、设备、介质及程序产品 | |
CN108897832B (zh) | 一种自动分析价值信息的方法与装置 | |
CN108132971B (zh) | 数据库碎片文件的分析方法和装置 | |
CN112711480B (zh) | 数据链路解析方法及系统 | |
CN113138936B (zh) | 数据处理方法、装置、存储介质及处理器 | |
CN116383883B (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 |