当前位置: 首页 > 专利查询>河海大学专利>正文

基于预训练模型的以太坊智能合约漏洞检测方法及系统技术方案

技术编号:34326312 阅读:32 留言:0更新日期:2022-07-31 01:12
本发明专利技术提出了一种基于预训练模型的以太坊智能合约漏洞检测方法及系统。本发明专利技术为了获取更有效的漏洞语义或语法信息,意在基于两种不同的代码表征形式,其一,通过分析智能合约程序的数据流和控制流等信息,采用程序切片技术,自动化地提取漏洞代码切片;其二,通过分析合约的AST,采用语法解析器编译智能合约,采用自定义遍历方式,自动化地获取AST结构化信息。同时,为了达到更好的检测效果,本发明专利技术使用预训练CodeBert模型融合两种信息,实现特征的融合,最终实现对当前以太坊智能合约环境下危害等级严重的漏洞的检测。本发明专利技术面向智能合约开发人员,实现了基于代码融合表征的以太坊智能合约自动化漏洞检测,达到合约安全保障的目的。的。的。

Ethereum smart contract vulnerability detection method and system based on pre training model

【技术实现步骤摘要】
基于预训练模型的以太坊智能合约漏洞检测方法及系统


[0001]本专利技术涉及一种基于预训练模型的以太坊智能合约漏洞检测方法及系统,属于区块链安全保障和深度学习领域。

技术介绍

[0002]智能合约作为区块链技术最成功的应用之一,已经吸引了学术界和工业界的目光。智能合约是一段运行在区块链平台上的计算机程序,通常由图灵完备的高级编程语言Solidity编写。以太坊作为一个开源的公共区块链平台,也是目前为止智能合约数量部署最多的区块链平台。智能合约的安全性通常是由区块链,以太坊,以及自身编程语言Solidity共同决定的。过去,智能合约的安全问题已经造成了重大的经济损失。
[0003]智能合约极易受到攻击,合约之所以受到攻击者攻击,主要有以下三方面的原因:(1)智能合约通常处理和操纵与加密数字货币相关的交易,对智能合约进行攻击可以为攻击者带来更多的经济效益;(2)智能合约的应用场景复杂且多变,当前智能合约的编程语言仍然是新颖且粗糙的。在实际场景下,合约的开发者可能很难去测试,从而造成智能合约的资产安全问题;(3)与传统语言不同的是,智能合约一旦部署就无法进行修改。而智能合约安全漏洞的存在会使得合约产生非预期的行为,从而违背了创建公平、可信赖的合约的初衷。
[0004]智能合约漏洞检测是智能合约安全研究的一个重要话题。首先由于以太坊链上的安全性和隐私保护性,98%的智能合约都是不开放源代码的。至今为止,在智能合约漏洞检测方面,缺乏一个开放的,足够规模的漏洞数据集,这为使用源代码进行漏洞检测带来阻碍。
[0005]目前针对漏洞检测,大部分的研究工作都使用传统的方式,即根据已有的漏洞特点,依靠人类专家手动定义、总结漏洞规则去匹配待测合约,从而进行合约漏洞的检测。智能合约漏洞传统检测主要有如下两方面的限制:(1)传统漏洞分析场景的研究往往由专家们或一些自动化算法来生成漏洞规则。虽然传统方法在检测漏洞上取得一定的效果,但仍存在较低的准确率和较高的漏报率、误报率。且有些检测工具检测时间偏长,检测效果不能令人满意。(2)每年部署在以太坊平台上的智能合约数量在不断增大,人工检测漏洞的成本在增大。
[0006]与传统的智能合约漏洞检测方法相比,基于深度学习的智能合约漏洞检测拥有更高的准确率和完备性。相关基于深度学习的检测方法研究主要使用深度学习的方法对代码的词法,语法,控制流和数据流等信息进行学习和分析。通常情况下,不同的代码中间表征有着不同的表征效果。但是,现在的研究通常是基于单一的代码中间表征形式,如代码tokens、抽象语法树、控制流图等,这可能导致在漏洞检测过程中,没有包含足够丰富的代码漏洞语法或者语义信息。

技术实现思路

[0007]专利技术目的:针对现有技术的存在的问题,本专利技术目的在于提供一种基于预训练模型的以太坊智能合约漏洞检测方法及系统,通过提取智能合约漏洞切片信息和AST结构化信息,并采用预训练模型进行特征融合,最终达到对当前以太坊智能合约环境下危害等级严重的合约漏洞的检测。
[0008]技术方案:为实现上述专利技术目的,本专利技术提供一种基于预训练模型的以太坊智能合约漏洞检测方法,包括如下步骤:
[0009]步骤1:收集智能合约数据集,根据漏洞合约的标准特征,提取智能合约中的目标函数片段,将智能合约的目标函数片段集合以及合约漏洞标签组成样本集;所述目标函数片段集合中包括一个或多个目标函数片段;
[0010]步骤2:根据漏洞标准,找到智能合约目标函数片段集合中相关的变量或者语句,经过数据流和控制流分析后,获取智能合约程序切片信息集合;
[0011]步骤3:调用语法解析器编译智能合约目标函数片段集合中各目标函数片段,并遍历生成的各目标函数片段的AST,获取智能合约AST结构化信息集合;
[0012]步骤4:对智能合约程序切片信息集合和AST结构化信息集合进行规范化、分词和编码;
[0013]步骤5:采用两个网络模型进行两种代码表征信息的训练,并采用预训练模型CodeBert拼接不同的代码表征,基于融合的特征实现智能合约漏洞的检测。
[0014]作为优选,所述步骤1中提取智能合约中目标函数片段的方法,包括如下步骤:
[0015]步骤11:根据智能合约源代码中原始合约版本,调用相应的编译器Solc版本进行合约的编译;
[0016]步骤12:对于Solc编译成功的合约,生成相应的合约抽象语法树文件;
[0017]步骤13:利用Slither生成函数全局调用图,根据合约全局函数调用路径,获得全局的函数调用关系;
[0018]步骤14:利用Slither生成单个函数内部的控制流图,获取函数内部变量的控制依赖关系和数据依赖关系;
[0019]步骤15:根据步骤13和步骤14,拼接组成合约的全局控制流图,获取一个合约完整的控制流和数据流信息;
[0020]步骤16:在步骤15全局控制流图的基础上,对于智能合约数据集,根据漏洞类型的标准和模式,分析变量关系,提取相应的函数片段。
[0021]作为优选,所述步骤2中获取智能合约程序切片信息集合的方法,包括如下步骤:
[0022]步骤21:根据漏洞分类框架或者漏洞准则,对于智能合约目标函数片段集合中的一个或者多个目标函数,确定相关的变量集合或语句集合;
[0023]步骤22:根据全局控制流图,进行变量或者语句的数据依赖分析,把所有相关数据依赖的变量或者语句全部提取出来,生成目标函数片段集合的候选数据依赖集;
[0024]步骤23:根据全局控制流图,进行变量或者语句的控制依赖分析,把所有相关的控制依赖的变量或者语句全部提取出来,生成目标函数片段集合的候选控制依赖集;
[0025]步骤24:按照原始合约中代码的顺序,合并所有候选数据依赖集和候选控制依赖集,生成智能合约程序切片信息集合。
[0026]作为优选,所述步骤3中获取智能合约AST结构化信息集合的方法,包括如下步骤:
[0027]步骤31:使用语法解析器ANTLR编译目标函数片段集合中各目标函数片段,生成编译的AST片段集合;
[0028]步骤32:采用深度优先遍历的方式,遍历编译的AST片段集合,生成AST 结构化信息集合。
[0029]作为优选,所述步骤4中包括如下步骤:
[0030]步骤41:规范化漏洞信息:使用FUN{#}替换合约中的目标函数名称,其中 #表示数字,根据目标函数的前后位置取值;去除停用词和标点符号;将单字符变量和常量替换为约定的固定字符串;拆分驼峰命名变量中的单词。
[0031]步骤42:分词:将程序切片信息集合和AST结构化信息集合中所有文本进行分词,并生成dic词典和inv_dic词典,用word表示词典中的单词,idx表示单词word在词典中的位置,则dic词典的键值对格式为“word:idx”,inv_dic 词典的键值对格式为“idx:word”;
[0032]步骤43:编码:利用word2vec模型将数据集中的本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于预训练模型的以太坊智能合约漏洞检测方法,其特征在于,包括如下步骤:步骤1:收集智能合约数据集,根据漏洞合约的标准特征,提取智能合约中的目标函数片段,将智能合约的目标函数片段集合以及合约漏洞标签组成样本集;所述目标函数片段集合中包括一个或多个目标函数片段;步骤2:根据漏洞标准,找到智能合约目标函数片段集合中相关的变量或者语句,经过数据流和控制流分析后,获取智能合约程序切片信息集合;步骤3:调用语法解析器编译智能合约目标函数片段集合中各目标函数片段,并遍历生成的各目标函数片段的AST,获取智能合约AST结构化信息集合;步骤4:对智能合约程序切片信息集合和AST结构化信息集合进行规范化、分词和编码;步骤5:采用两个网络模型进行两种代码表征信息的训练,并采用预训练模型CodeBert拼接不同的代码表征,基于融合的特征实现智能合约漏洞的检测。2.根据权利要求1所述的一种基于预训练模型的以太坊智能合约漏洞检测方法,其特征在于,步骤1中提取智能合约中目标函数片段的方法,包括如下步骤:步骤11:根据智能合约源代码中原始合约版本,调用相应的编译器Solc版本进行合约的编译;步骤12:对于Solc编译成功的合约,生成相应的合约抽象语法树文件;步骤13:利用Slither生成函数全局调用图,根据合约全局函数调用路径,获得全局的函数调用关系;步骤14:利用Slither生成单个函数内部的控制流图,获取函数内部变量的控制依赖关系和数据依赖关系;步骤15:根据步骤13和步骤14,拼接组成合约的全局控制流图,获取一个合约完整的控制流和数据流信息;步骤16:在步骤15全局控制流图的基础上,对于智能合约数据集,根据漏洞类型的标准和模式,分析变量关系,提取相应的函数片段。3.根据权利要求1所述的一种基于预训练模型的以太坊智能合约漏洞检测方法,其特征在于,步骤2中获取智能合约程序切片信息集合的方法,包括如下步骤:步骤21:根据漏洞分类框架或者漏洞准则,对于智能合约目标函数片段集合中的一个或者多个目标函数,确定相关的变量集合或语句集合;步骤22:根据全局控制流图,进行变量或者语句的数据依赖分析,把所有相关数据依赖的变量或者语句全部提取出来,生成目标函数片段集合的候选数据依赖集;步骤23:根据全局控制流图,进行变量或者语句的控制依赖分析,把所有相关的控制依赖的变量或者语句全部提取出来,生成目标函数片段集合的候选控制依赖集;步骤24:按照原始合约中代码的顺序,合并所有候选数据依赖集和候选控制依赖集,生成智能合约程序切片信息集合。4.根据权利要求1所述的一种基于预训练模型的以太坊智能合约漏洞检测方法,其特征在于,所述步骤3中获取智能合约AST结构化信息集合的方法,包括如下步骤:步骤31:使用语法解析器ANTLR编译目标函数片段集合中各目标函数片段,生成编译的AST片段集合;步骤32:采用深度优先遍历的方式,遍历编译的AST片段集合,生成AST结构化信息集
合。5.根据权利要求1所述的一种基于预训练模型的以太坊智能合约漏洞检测方法,其特征在于,所述步骤4包括如下步骤:步骤41:规范化漏洞信息:使用FUN{#}替换合约中的目标函数名称,其中#表示数...

【专利技术属性】
技术研发人员:张鹏程王奔楚涵婷吉顺慧
申请(专利权)人:河海大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1