CN116561761A - 一种基于智能合约字节码的漏洞检测方法及系统 - Google Patents
一种基于智能合约字节码的漏洞检测方法及系统 Download PDFInfo
- Publication number
- CN116561761A CN116561761A CN202310505412.XA CN202310505412A CN116561761A CN 116561761 A CN116561761 A CN 116561761A CN 202310505412 A CN202310505412 A CN 202310505412A CN 116561761 A CN116561761 A CN 116561761A
- Authority
- CN
- China
- Prior art keywords
- intelligent contract
- layer
- operation code
- token
- sequence
- 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 62
- 238000012549 training Methods 0.000 claims abstract description 76
- 238000010586 diagram Methods 0.000 claims abstract description 53
- 238000000034 method Methods 0.000 claims abstract description 34
- 239000013598 vector Substances 0.000 claims description 22
- 238000011084 recovery Methods 0.000 claims description 15
- 238000011176 pooling Methods 0.000 claims description 12
- 238000006243 chemical reaction Methods 0.000 claims description 9
- 230000000873 masking effect Effects 0.000 claims description 7
- 238000013528 artificial neural network Methods 0.000 claims description 6
- 238000013507 mapping Methods 0.000 claims description 3
- 238000004088 simulation Methods 0.000 claims description 3
- 238000007781 pre-processing Methods 0.000 claims description 2
- 238000010276 construction Methods 0.000 abstract description 4
- 238000011160 research Methods 0.000 description 5
- 238000004458 analytical method Methods 0.000 description 2
- 238000013135 deep learning Methods 0.000 description 2
- 238000013136 deep learning model Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000000605 extraction Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000012512 characterization method Methods 0.000 description 1
- 238000013145 classification model Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 238000012038 vulnerability analysis Methods 0.000 description 1
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
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Computing Systems (AREA)
- General Physics & Mathematics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Mathematical Physics (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明一种基于智能合约字节码的漏洞检测方法及系统,属于智能合约安全领域,解决现有技术中模型构建的过程与漏洞类型相关,从而造成模型的通用性差的问题。本发明收集任意智能合约字节码构建智能合约操作码数据流图,再基于操作码数据流图构建预训练数据集;基于预训练数据集构建并训练、用于判断数据流图中两个基本块是否相邻的预训练模型;收集未标注的智能合约字节码构建操作码控制流图,再基于操作码控制流图构建智能合约漏洞数据集;基于训练好的预训练模型的参数和智能合约漏洞数据集构建并训练智能合约漏洞检测模型;使用训练好的智能合约漏洞检测模型对待测智能合约的控制流图进行漏洞检测。本发明用于智能合约的漏洞检测。
Description
技术领域
一种基于智能合约字节码的漏洞检测方法及系统,用于智能合约的漏洞检测,属于智能合约安全领域。
背景技术
智能合约是区块链具有应用价值和灵活性的领域。本质上,智能合约是一段用特定脚本语言实现的代码,不可避免的存在安全漏洞风险,如何准确及时地检查出各种智能合约的漏洞,就成为区块链安全研究的重点和热点。
文献《Peculiar:Smart contract vulnerability detection basedon crucialdata flow graph and pretraining techniques》提出了一种基于关键数据流图和预训练模型的智能合约漏洞检测框架Peculiar。该框架利用修改后的tree-sitter工具将智能合约源代码解析为AST,在AST中识别变量序列,然后根据变量之间的数据流向关系构数据流图DFG,从DFG提取与关键变量相关的数据节点构成的子图即CDFG,最后将CDFG作为输入对GraphCodeBert模型进行预训练,结合下游分类模型进行漏洞检测。
文献《DeeSCVHunter:A Deep Learning-Based Frame-work for Smart ContractVuln erability Detec-tion》开发了第一个系统的、模块化的基于深度学习的智能合约漏洞检测框架DeeSCVHunter,该框架包含了8个主流的深度学习模型和3个嵌入方案。该框架提出了漏洞候选切片(VCS)的概念,首先在智能合约源代码中匹配与漏洞相关的候选语句(CS),如call.value()、block.timestamp等,然后根据控制流和数据流匹配与候选语句相关的语句构成漏洞候选切片,使用嵌入方案将其转换为向量,作为深度学习模型的输入进行训练。
由于大部分智能合约是不开源的,区块链上存储的只有智能合约的EVM字节码,研究者们无法获取智能合约的源码,这限制了基于智能合约源代码的漏洞检测方法的使用场景,因此从字节码层面实现智能合约的漏洞检测是当前研究的热点。然而大多数基于深度学习的智能合约漏洞检测方法也更关注智能合约的源代码层面,对智能合约字节码层面的研究还处于较为早期的阶段,大多数研究仅仅将字节码当作文本序列进行处理,忽略了智能合约语义信息的提取和表征,缺乏可解释性。
CN113904844A-基于跨模态教师-学生网络的智能合约漏洞检测方法,虽然会用到语义信息,但教师网络的训练需要智能合约源码,且针对不同漏洞需要设计不同的源码语义图,因此对于不同的漏洞需要重新训练教师网络。
CN112990941A-一种针对智能合约中庞氏骗局的漏洞检测方法及系统,虽然应用到控制流图和数据流图使用符号执行技术,仅针对庞氏合约进行检测,同样需要对不同的漏洞设计不同的检测规则,依赖专家经验知识,且符号执行技术对于复杂智能合约存在分析时间过长的问题,效率较低。
因此,现有技术存在如下技术问题:
1.模型构建的过程与漏洞类型相关,从而造成模型的通用性差的问题;
2.针对复杂智能合约存在分析时间过长,检测效率较低的问题。
发明内容
针对上述研究的问题,本发明的目的在于提供一种基于智能合约字节码的漏洞检测方法及系统,解决现有技术中模型构建的过程与漏洞类型相关,从而造成模型的通用性差的问题。
为了达到上述目的,本发明采用如下技术方案:
一种基于智能合约字节码的漏洞检测方法,包括如下步骤:
步骤1、收集任意智能合约字节码构建智能合约操作码数据流图,再基于操作码数据流图构建预训练数据集;
步骤2、基于预训练数据集构建并训练、用于判断数据流图中两个基本块是否相邻的预训练模型;
步骤3、收集未标注的智能合约字节码构建操作码控制流图,再基于操作码控制流图构建智能合约漏洞数据集;
步骤4、基于训练好的预训练模型的参数和智能合约漏洞数据集构建并训练智能合约漏洞检测模型;
步骤5、使用训练好的智能合约漏洞检测模型对待测智能合约的控制流图进行漏洞检测。
进一步,所述步骤1的具体步骤为:
步骤2.1、将智能合约字节码反汇编得到智能合约操作码序列;
步骤2.2、将智能合约操作码序列切分为多个基本块,其中,每个基本块是一段操作码序列;
步骤2.3、基于基本块模拟执行智能合约操作码序列,以将基本块作为节点构建操作码数据流图;
步骤2.4、基于操作码数据流图构建预训练数据集。
进一步,所述步骤2中的预训练模型依次包括输入层、Embedding层、Generator层和Discriminator层;
所述输入层,用于将数据流图中基本块的操作码序列的结尾添加一个token[SEQ]作为序列片段结束标志,然后将任意两个基本块的操作码序列进行拼接,再在拼接后的操作码序列前添加token[CLS]作为分类标志,每个拼接后的操作码序列视为一个token序列,即得到多个token序列;
所述Embedding层,用于将输入层的token序列映射到高维空间,得到token向量;
所述Generator层,由多个TransformerEncoder层和一个MLP依次堆叠而成,用于将Embedding层得到的token向量作为输入,在token序列对应位置预测,得到预测操作码序列,即重构token序列,其中,Generator层中的多个Transformer层为3-5个;
所述Discriminator层,依次由一个Embedding层、多个TransformerEncoder层和一个MLP依次堆叠而成,将Generator层预测的预测操作码序列作为输入,预测对应位置的预测操作码序列是否是原始操作码token序列,在[CLS]对应位置预测两个基本块在数据流图中是否相邻,其中,Discriminator层中的多个Transformer层为3-5个。
进一步,所述训练预训练模型具体包括遮掩token恢复任务、相邻基本块预测任务和替换token检测任务三个预训练任务,其中,遮掩token恢复和相邻基本块预测同步训练后再训练替换token检测任务;
所述遮掩token恢复任务,每次训练时随机从数据流图中选择任一基本块,将输入层得到的token序列中对应位置的token替换为[MASK]token,然后训练Generator层预测被遮掩位置[MASK]token的预测操作码序列,即重构的token序列,其中,替换的token中不包括[CLS]或[SEQ];
所述相邻基本块预测任务,在输入层构建token序列时,任意选择的两个基本块在数据流图中、若具有数据依赖关系即在数据流图中是相邻的,否则,不相邻,则Discriminator层需要在[CLS]对应的位置输出token序列中两个基本块的是否相邻的预测结果,训练时,Discriminator层学习不同基本块之间的数据依赖关系;
所述替换token检测任务,遮掩token恢复任务训练后Generator层输出一个重构的token序列,该重构的token序列中在遮掩位置的token是Generator层重构的,重构的token中包括成功重构的,即恢复成了操作码token序列,也包括重构操作码token,即被替换的情况,相邻基本块预测任务训练后得到的Discriminator层将重构的token序列作为输入,需要在对应位置输出该位置的token是否被替换的预测结果,与遮掩token恢复任务相结合学习基本块内操作码的上下文关系,满足迭代次数或者loss满足下降到指定的阈值则结束训练,即得到Discriminator层中的Embedding层和Transformer层的参数,否则,任选一个基本块和任意选择的两个基本块进行下一轮的训练。
进一步,所述步骤3的具体步骤为:
使用漏洞标记工具对收集到的未标注的智能合约进行漏洞标注,其中,漏洞标记工具包括Mythril;
将收集到的标注后的智能合约的源码编译成智能合约字节码;
将智能合约字节码反汇编得到操作码序列;
将智能合约操作码序列切分为多个基本块构建操作码控制流图,操作码控制流图与对应的漏洞标签组成智能合约漏洞数据集。
进一步,所述智能合约漏洞检测模型具体包括依次设置的Encoder层、图神经网络层和输出层;
所述Encoder层由一个Embedding层和多个TransformerEncoder层依次堆叠而成,用于将单个基本块的操作码token序列作为输入,在[CLS]对应位置输出基本块的特征向量,其中,Encoder层与Discriminator层中的Embedding层和多个Transformer层构成的结构相同,且训练好的Discriminator层中的Embedding层和多个Transformer层的参数作为Encoder层的初始参数;
所述图神经网络层由多个GGNN和一个池化层依次堆叠而成,用于将操作码控制流图作为输入,最后输出相应智能合约的特征向量,包含了智能合约的语义和结构信息,其中,多个GGNN为1-3个;
所述输出层为MLP,将智能合约的特征向量作为输入,输出对应智能合约存在漏洞的预测概率。
进一步,所述操作码控制流图的节点由所述Encoder层输出的对应基本块的特征向量表示。
进一步,所述池化层为参数池化层或非参数化池化层。
进一步,所述步骤5的具体步骤为:
将待测智能合约编译成字节码并通过反汇编得到操作码序列;
将智能合约操作码序列切分为多个基本块,每个基本块是一段操作码序列;
模拟执行智能合约操作码序列,将基本块作为节点构建操作码控制流图;
将操作码控制流图输入到训练好的智能合约漏洞检测模型中进行智能合约漏洞检测。
一种基于智能合约字节码的漏洞检测系统,包括:
智能合约收集模块:分别收集任意智能合约字节码和未标注的智能合约字节码;
数据预处理模块:基于任意智能合约字节码构建智能合约操作码数据流图,再基于操作码数据流图构建预训练数据集,或未标注的智能合约字节码构建操作码控制流图,再基于操作码控制流图构建智能合约漏洞数据集;
预训练模块:基于预训练数据集构建并训练、用于判断数据流图中两个基本块是否相邻的预训练模型;
智能合约漏洞检测模块:基于训练好的预训练模型的参数和智能合约漏洞数据集构建并训练智能合约漏洞检测模型,并使用训练好的智能合约漏洞检测模型对待测智能合约的控制流图进行漏洞检测。
本发明同现有技术相比,其有益效果表现在:
一、本发明基于智能合约字节码进行语义抽取和漏洞分析,且构建过程是与漏洞类型无关的,预训练模型中加入数据流信息,可以使模型学习到的语义更加全面,大大提高了漏洞检测模型的通用性,即预训练模型通过任务无关的训练目标从智能合约字节码学习通用的代码语义和结构信息,即不针对某一特定漏洞进行训练,后续将预训练模型的参数作为漏洞检测模型的初始参数,再针对特定漏洞进行训练更新参数,可以适用于不同的漏洞类型,同时减少训练时间,提高了模型的泛化性;
二、本发明基于深度学习的漏洞检测模型框架自动化挖掘代码内部与漏洞成因相关的语义信息,且模型训练完成后,针对复杂智能合约检测效率高;
三、本发明基于智能合约字节码来实现智能合约漏洞检测,由于反汇编得到的操作码是已知的,可以避免基于源码的漏洞检测方法在对源码进行分词时遇到的Out-Of-Vocabulary(OOV)问题;
四、本发明对整个智能合约进行分析,相比于根据漏洞特征进行程序切片的方法,本发明具有良好的可扩展性,可以直接应用于新型智能合约漏洞检测上。
附图说明
图1是本发明实施例1的基于智能合约字节码的漏洞检测方法的流程图;
图2是本发明实施例2的基于智能合约字节码的漏洞检测系统的模块图;
具体实施方式
下面将结合附图及具体实施方式对本发明作进一步的描述。
实施例1
如图1所示,本发明提供的基于智能合约字节码的漏洞检测方法实施例具体如下:
步骤1、从EtherScan等平台获取以太坊上任意智能合约字节码构建智能合约操作码数据流图,再基于操作码数据流图构建预训练数据集;
具体步骤为:
步骤2.1、将智能合约字节码反汇编得到智能合约操作码序列;
步骤2.2、将智能合约操作码序列切分为多个基本块,其中,每个基本块是一段操作码序列;
步骤2.3、基于基本块模拟执行智能合约操作码序列,以将基本块作为节点构建操作码数据流图;
步骤2.4、基于操作码数据流图构建预训练数据集。
步骤2、基于预训练数据集构建并训练、用于判断数据流图中两个基本块是否相邻的预训练模型;预训练模型依次包括输入层、Embedding层、Generator层和Discriminator层;
所述输入层,用于将数据流图中基本块的操作码序列的结尾添加一个token[SEQ]作为序列片段结束标志,然后将任意两个基本块的操作码序列进行拼接,再在拼接后的操作码序列前添加token[CLS]作为分类标志,每个拼接后的操作码序列视为一个token序列,即得到多个token序列;
所述Embedding层,用于将输入层的token序列映射到高维空间,得到token向量;
所述Generator层,由多个TransformerEncoder层和一个MLP依次堆叠而成,用于将Embedding层得到的token向量作为输入,在token序列对应位置预测,得到预测操作码序列,即重构token序列,其中,Generator层中的多个Transformer层为3-5个;
所述Discriminator层,依次由一个Embedding层、多个TransformerEncoder层和一个MLP依次堆叠而成,将Generator层预测的预测操作码序列作为输入,预测对应位置的预测操作码序列是否是原始操作码token序列,在[CLS]对应位置预测两个基本块在数据流图中是否相邻,其中,Discriminator层中的多个Transformer层为3-5个。
训练预训练模型具体包括遮掩token恢复任务、相邻基本块预测任务和替换token检测任务三个预训练任务,其中,遮掩token恢复和相邻基本块预测同步训练后再训练替换token检测任务;
所述遮掩token恢复任务,每次训练时随机从数据流图中选择任一基本块,将输入层得到的token序列中对应位置的token替换为[MASK]token,然后训练Generator层预测被遮掩位置[MASK]token的预测操作码序列,即重构的token序列,其中,替换的token中不包括[CLS]或[SEQ];
所述相邻基本块预测任务,在输入层构建token序列时,任意选择的两个基本块在数据流图中、若具有数据依赖关系即在数据流图中是相邻的,否则,不相邻,则Discriminator层需要在[CLS]对应的位置输出token序列中两个基本块的是否相邻的预测结果,训练时,Discriminator层学习不同基本块之间的数据依赖关系;
所述替换token检测任务,遮掩token恢复任务训练后Generator层输出一个重构的token序列,该重构的token序列中在遮掩位置的token是Generator层重构的,重构的token中包括成功重构的,即恢复成了操作码token序列,也包括重构操作码token,即被替换的情况,相邻基本块预测任务训练后得到的Discriminator层将重构的token序列作为输入,需要在对应位置输出该位置的token是否被替换的预测结果,与遮掩token恢复任务相结合学习基本块内操作码的上下文关系,满足迭代次数或者loss满足下降到指定的阈值则结束训练,即得到Discriminator层中的Embedding层和Transformer层的参数,否则,任选一个基本块和任意选择的两个基本块进行下一轮的训练。
步骤3、从EtherScan等平台获取以太坊上大量的未标注的智能合约字节码(此处的智能合约字节码与特定漏洞相关)构建操作码控制流图,再基于操作码控制流图构建智能合约漏洞数据集;具体步骤为:
使用漏洞标记工具对收集到的未标注的智能合约进行漏洞标注,其中,漏洞标记工具包括Mythril等;
将收集到的标注后的智能合约的源码编译成智能合约字节码;
将智能合约字节码反汇编得到操作码序列;
将智能合约操作码序列切分为多个基本块构建操作码控制流图,操作码控制流图与对应的漏洞标签组成智能合约漏洞数据集。
步骤4、基于训练好的预训练模型的参数和智能合约漏洞数据集构建并训练智能合约漏洞检测模型;
智能合约漏洞检测模型具体包括依次设置的Encoder层、图神经网络层和输出层;
所述Encoder层由一个Embedding层和多个TransformerEncoder层依次堆叠而成,用于将单个基本块的操作码token序列作为输入,在[CLS]对应位置输出基本块的特征向量,其中,Encoder层与Discriminator层中的Embedding层和多个Transformer层构成的结构相同,且训练好的Discriminator层中的Embedding层和多个Transformer层的参数作为Encoder层的初始参数;
所述图神经网络层由多个GGNN和一个池化层依次堆叠而成,用于将操作码控制流图作为输入,最后输出相应智能合约的特征向量,包含了智能合约的语义和结构信息,其中,多个GGNN为1-3个;
所述输出层为MLP,将智能合约的特征向量作为输入,输出对应智能合约存在漏洞的预测概率。操作码控制流图的节点由所述Encoder层输出的对应基本块的特征向量表示。所述池化层为参数池化层或非参数化池化层。
步骤5、使用训练好的智能合约漏洞检测模型对待测智能合约的控制流图进行漏洞检测。具体步骤为:
将待测智能合约编译成字节码并通过反汇编得到操作码序列;
将智能合约操作码序列切分为多个基本块,每个基本块是一段操作码序列;
模拟执行智能合约操作码序列,将基本块作为节点构建操作码控制流图;
将操作码控制流图输入到训练好的智能合约漏洞检测模型中进行智能合约漏洞检测。
以上仅是本发明众多具体应用范围中的代表性实施例,对本发明的保护范围不构成任何限制。凡采用变换或是等效替换而形成的技术方案,均落在本发明权利保护范围之内。
Claims (10)
1.一种基于智能合约字节码的漏洞检测方法,其特征在于,包括如下步骤:
步骤1、收集任意智能合约字节码构建智能合约操作码数据流图,再基于操作码数据流图构建预训练数据集;
步骤2、基于预训练数据集构建并训练、用于判断数据流图中两个基本块是否相邻的预训练模型;
步骤3、收集未标注的智能合约字节码构建操作码控制流图,再基于操作码控制流图构建智能合约漏洞数据集;
步骤4、基于训练好的预训练模型的参数和智能合约漏洞数据集构建并训练智能合约漏洞检测模型;
步骤5、使用训练好的智能合约漏洞检测模型对待测智能合约的控制流图进行漏洞检测。
2.根据权利要求1所述的一种基于智能合约字节码的漏洞检测方法,其特征在于,所述步骤1的具体步骤为:
步骤2.1、将智能合约字节码反汇编得到智能合约操作码序列;
步骤2.2、将智能合约操作码序列切分为多个基本块,其中,每个基本块是一段操作码序列;
步骤2.3、基于基本块模拟执行智能合约操作码序列,以将基本块作为节点构建操作码数据流图;
步骤2.4、基于操作码数据流图构建预训练数据集。
3.根据权利要求2所述的一种基于智能合约字节码的漏洞检测方法,其特征在于,所述步骤2中的预训练模型依次包括输入层、Embedding层、Generator层和Discriminator层;
所述输入层,用于将数据流图中基本块的操作码序列的结尾添加一个token[SEQ]作为序列片段结束标志,然后将任意两个基本块的操作码序列进行拼接,再在拼接后的操作码序列前添加token[CLS]作为分类标志,每个拼接后的操作码序列视为一个token序列,即得到多个token序列;
所述Embedding层,用于将输入层的token序列映射到高维空间,得到token向量;
所述Generator层,由多个TransformerEncoder层和一个MLP依次堆叠而成,用于将Embedding层得到的token向量作为输入,在token序列对应位置预测,得到预测操作码序列,即重构token序列,其中,Generator层中的多个Transformer层为3-5个;
所述Discriminator层,依次由一个Embedding层、多个TransformerEncoder层和一个MLP依次堆叠而成,将Generator层预测的预测操作码序列作为输入,预测对应位置的预测操作码序列是否是原始操作码token序列,在[CLS]对应位置预测两个基本块在数据流图中是否相邻,其中,Discriminator层中的多个Transformer层为3-5个。
4.根据权利要求3所述的一种基于智能合约字节码的漏洞检测方法,其特征在于,所述训练预训练模型具体包括遮掩token恢复任务、相邻基本块预测任务和替换token检测任务三个预训练任务,其中,遮掩token恢复和相邻基本块预测同步训练后再训练替换token检测任务;
所述遮掩token恢复任务,每次训练时随机从数据流图中选择任一基本块,将输入层得到的token序列中对应位置的token替换为[MASK]token,然后训练Generator层预测被遮掩位置[MASK]token的预测操作码序列,即重构的token序列,其中,替换的token中不包括[CLS]或[SEQ];
所述相邻基本块预测任务,在输入层构建token序列时,任意选择的两个基本块在数据流图中、若具有数据依赖关系即在数据流图中是相邻的,否则,不相邻,则Discriminator层需要在[CLS]对应的位置输出token序列中两个基本块的是否相邻的预测结果,训练时,Discriminator层学习不同基本块之间的数据依赖关系;
所述替换token检测任务,遮掩token恢复任务训练后Generator层输出一个重构的token序列,该重构的token序列中在遮掩位置的token是Generator层重构的,重构的token中包括成功重构的,即恢复成了操作码token序列,也包括重构操作码token,即被替换的情况,相邻基本块预测任务训练后得到的Discriminator层将重构的token序列作为输入,需要在对应位置输出该位置的token是否被替换的预测结果,与遮掩token恢复任务相结合学习基本块内操作码的上下文关系,满足迭代次数或者loss满足下降到指定的阈值则结束训练,即得到Discriminator层中的Embedding层和Transformer层的参数,否则,任选一个基本块和任意选择的两个基本块进行下一轮的训练。
5.根据权利要求4所述的一种基于智能合约字节码的漏洞检测方法,其特征在于,所述步骤3的具体步骤为:
使用漏洞标记工具对收集到的未标注的智能合约进行漏洞标注,其中,漏洞标记工具包括Mythril;
将收集到的标注后的智能合约的源码编译成智能合约字节码;
将智能合约字节码反汇编得到操作码序列;
将智能合约操作码序列切分为多个基本块构建操作码控制流图,操作码控制流图与对应的漏洞标签组成智能合约漏洞数据集。
6.根据权利要求5所述的一种基于智能合约字节码的漏洞检测方法,其特征在于,所述智能合约漏洞检测模型具体包括依次设置的Encoder层、图神经网络层和输出层;
所述Encoder层由一个Embedding层和多个TransformerEncoder层依次堆叠而成,用于将单个基本块的操作码token序列作为输入,在[CLS]对应位置输出基本块的特征向量,其中,Encoder层与Discriminator层中的Embedding层和多个Transformer层构成的结构相同,且训练好的Discriminator层中的Embedding层和多个Transformer层的参数作为Encoder层的初始参数;
所述图神经网络层由多个GGNN和一个池化层依次堆叠而成,用于将操作码控制流图作为输入,最后输出相应智能合约的特征向量,包含了智能合约的语义和结构信息,其中,多个GGNN为1-3个;
所述输出层为MLP,将智能合约的特征向量作为输入,输出对应智能合约存在漏洞的预测概率。
7.根据权利要求6所述的一种基于智能合约字节码的漏洞检测方法,其特征在于,所述操作码控制流图的节点由所述Encoder层输出的对应基本块的特征向量表示。
8.根据权利要求6所述的一种基于智能合约字节码的漏洞检测方法,其特征在于,所述池化层为参数池化层或非参数化池化层。
9.根据权利要求8所述的一种基于智能合约字节码的漏洞检测方法,其特征在于,所述步骤5的具体步骤为:
将待测智能合约编译成字节码并通过反汇编得到操作码序列;
将智能合约操作码序列切分为多个基本块,每个基本块是一段操作码序列;
模拟执行智能合约操作码序列,将基本块作为节点构建操作码控制流图;
将操作码控制流图输入到训练好的智能合约漏洞检测模型中进行智能合约漏洞检测。
10.一种基于智能合约字节码的漏洞检测系统,其特征在于,包括:
智能合约收集模块:分别收集任意智能合约字节码和未标注的智能合约字节码;
数据预处理模块:基于任意智能合约字节码构建智能合约操作码数据流图,再基于操作码数据流图构建预训练数据集,或未标注的智能合约字节码构建操作码控制流图,再基于操作码控制流图构建智能合约漏洞数据集;
预训练模块:基于预训练数据集构建并训练、用于判断数据流图中两个基本块是否相邻的预训练模型;
智能合约漏洞检测模块:基于训练好的预训练模型的参数和智能合约漏洞数据集构建并训练智能合约漏洞检测模型,并使用训练好的智能合约漏洞检测模型对待测智能合约的控制流图进行漏洞检测。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310505412.XA CN116561761A (zh) | 2023-05-06 | 2023-05-06 | 一种基于智能合约字节码的漏洞检测方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310505412.XA CN116561761A (zh) | 2023-05-06 | 2023-05-06 | 一种基于智能合约字节码的漏洞检测方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116561761A true CN116561761A (zh) | 2023-08-08 |
Family
ID=87495878
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310505412.XA Pending CN116561761A (zh) | 2023-05-06 | 2023-05-06 | 一种基于智能合约字节码的漏洞检测方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116561761A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117521065A (zh) * | 2023-11-02 | 2024-02-06 | 海南大学 | 一种区块链去中心化金融的安全检测方法和装置 |
-
2023
- 2023-05-06 CN CN202310505412.XA patent/CN116561761A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117521065A (zh) * | 2023-11-02 | 2024-02-06 | 海南大学 | 一种区块链去中心化金融的安全检测方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108647520B (zh) | 一种基于脆弱性学习的智能模糊测试方法与系统 | |
CN111160008B (zh) | 一种实体关系联合抽取方法及系统 | |
CN112733137A (zh) | 一种面向漏洞检测的二进制代码相似性分析方法 | |
CN113420296A (zh) | 一种基于Bert模型与BiLSTM的C源代码漏洞检测方法 | |
CN109471793A (zh) | 一种基于深度学习的网页自动化测试缺陷定位方法 | |
CN113761893B (zh) | 一种基于模式预训练的关系抽取方法 | |
CN113641819B (zh) | 基于多任务稀疏共享学习的论辩挖掘系统及方法 | |
CN116561761A (zh) | 一种基于智能合约字节码的漏洞检测方法及系统 | |
CN114816997A (zh) | 一种基于图神经网络与双向gru特征抽取的缺陷预测方法 | |
CN116340952A (zh) | 一种基于操作码程序依赖图的智能合约漏洞检测方法 | |
CN113904844B (zh) | 基于跨模态教师-学生网络的智能合约漏洞检测方法 | |
CN115935372A (zh) | 一种基于图嵌入和双向门控图神经网络的漏洞检测方法 | |
CN113609488B (zh) | 基于自监督学习及多通道超图神经网络的漏洞检测方法与系统 | |
CN114492460A (zh) | 基于衍生提示学习的事件因果关系抽取方法 | |
CN110688312A (zh) | 一种基于Transformer的软件缺陷预测方法 | |
CN110008344B (zh) | 一种自动给代码打数据结构标签的方法 | |
CN116595537A (zh) | 一种基于多模态特征的生成式智能合约的漏洞检测方法 | |
CN115373737B (zh) | 一种基于特征融合的代码克隆检测方法 | |
CN113342982B (zh) | 融合RoBERTa和外部知识库的企业行业分类方法 | |
CN115587318A (zh) | 一种基于神经网络的源码分类方法 | |
CN115168864A (zh) | 一种基于特征交叉的智能交叉合约漏洞检测方法 | |
CN114218580A (zh) | 一种基于多任务学习的智能合约漏洞检测方法 | |
CN115700492A (zh) | 一种基于图区间神经网络的程序语义表示学习和预测方法 | |
CN116628695A (zh) | 基于多任务学习的漏洞挖掘方法及装置 | |
Shi et al. | An overview of code2vec in student modeling for programming education |
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 |