【技术实现步骤摘要】
一种基于语法和语义特征融合的智能合约漏洞检测方法及装置
[0001]本专利技术涉及区块链和信息安全
,尤其涉及一种基于语法和语义特征融合的智能合约漏洞检测方法及装置。
技术介绍
[0002]智能合约由Nick Szabo于1995年提出,定义为“执行合约条款的计算机交易协议”。智能合约以数字形式定义一个合同,当合约参与方满足合约所需的条件时,合约就会自动执行。与传统合约相比,智能合约可以提高交易效率,具有去中心化、不可篡改等特性。智能合约提供了优于传统合约的安全方法,但如其他编程语言一样,智能合约也存在着一些安全漏洞。在以太坊上,绝大部分智能合约负责管理用户的数字资产交易,如果智能合约存在漏洞将会造成数字资产的损失。同时区块链不可篡改的特性使得智能合约一旦产生漏洞就很难修复,因此在智能合约部署上链之前对其进行漏洞检测具有必要性。
[0003]早期的漏洞检测方法按照检测时是否执行代码分为静态分析和动态分析两种方法。静态分析是指在不运行代码的方式下,通过词法分析、语法分析、控制流、数据流分析等技术对程序代码进行自动扫描,发现隐含的程序问题;动态分析方法借助调试器工具,在调试器中运行目标程序,对运行程序的运行状态、内存使用状况和执行路径进行分析,从而发现程序中存在的漏洞。静态分析和动态分析两种方法对智能合约进行检测时都需要依赖专家预先人工定义的规则,检测效率低、时间长。近年来,考虑到深度学习在特征学习方面的优异特性,研究人员开始使用深度学习方法进行漏洞检测,自动从源代码中提取有效特征,不再需要依赖于专家定义的 ...
【技术保护点】
【技术特征摘要】
1.一种基于语法和语义特征融合的智能合约漏洞检测方法,其特征在于,包括:步骤1:收集智能合约源代码,分别统计存在漏洞的智能合约的数量与不存在漏洞的智能合约的数量,若无漏洞合约数量与有漏洞合约数量之比大于2,则使用加权随机采样方法平衡智能合约数据集;步骤2:将智能合约源代码转为抽象语法树形式,经过标准化和序列化操作将抽象语法树转化为token序列,使用词嵌入模型Word2vec对token序列的每个token进行嵌入表示;步骤3:将源代码编译为字节码,通过字节码获取智能合约的控制流图,使用Word2vec向量化控制流图节点中的每个操作码,然后对控制流图节点的操作码加权求和获取控制流图的节点特征;步骤4:使用文本分类模型Text CNN从抽象语法树token序列中获取语法特征;使用图神经网络学习控制流图的语义和结构嵌入获取语义特征;结合语法向量和语义向量,利用多层感知机对语法和语义特征融合向量进行学习以训练检测器;步骤5:获取待检测合约的抽象语法树和控制流图,利用嵌入矩阵和训练得到的检测器实现智能合约源代码的漏洞检测。2.根据权利要求1所述的一种基于语法和语义特征融合的智能合约漏洞检测方法,其特征在于,所述步骤1中,加权随机采样方法包括:计算每个智能合约的权重,权重为该合约所对应的类别的合约总数的倒数,然后利用每个合约的权重值对合约进行采样,构造数据集。3.根据权利要求1所述的一种基于语法和语义特征融合的智能合约漏洞检测方法,其特征在于,所述步骤2包括:步骤2.1:获取智能合约的抽象语法树:使用python第三方软件包py
‑
solc
‑
x构建智能合约的抽象语法树,将智能合约源代码转换为树状结构的抽象语法树;步骤2.2:对抽象语法树进行规范化:获取智能合约中用户定义的合约名称列表、函数名称列表和变量名称列表,将用户定义的合约名称、函数名称、变量名称表示为contract_c、function_f、var_v,c、f、v表示合约名称、函数名称、变量名称在列表中的索引,并在抽象语法树中进行替换;步骤2.3:对合约的抽象语法树进行序列化:按照深度优先遍历抽象语法树的所有节点,将树状结构的抽象语法树转化为token序列,在进行序列化操作时仅保留抽象语法树的一些关键信息,忽略表示代码位置、节点id的一些次要信息;步骤2.4:对合约的抽象语法树进行向量化:运用word2vec将智能合约源代码对应的token序列向量化,将每个token表示为一个具有相同维度的向量,从而将序列化后的抽象语法树表示为向量形式,得到抽象语法树特征向量;步骤2.5:对特征向量进行截断和填充,将其表示为一个具有固定长度L的向量,当向量长度小于L时用零填充,向量长度大于L时进行截断。4.根据权利要求1所述的一种基于语法和语义特征融合的智能合约漏洞检测方法,其特征在于,所述步骤3包括:步骤3.1:获取智能合约的控制流图:首先将智能合约编译为opcode,然后通过python第三方软件包evm_cfg_builder将opcode转换为控制流图;步骤3.2:控制流图中的每个块包含了源代码的操作码,通过Word2vec对操作码进行词
嵌入表示,获得每个操作码的向量表示;步骤3.3:通过TF
‑
IDF加权平均词向量获取控制流图的节点特征:将每个操作码按照TF
‑
IDF获取权重,根据权重将控制流图节点的操作码加权平均,控制流图的每个节点得到一个固定长度的向量,将该向量作为图节点的特征。5.根据权利要求1所述的一种基于语法和语义特征融合的智能合约漏洞检测方法,其特征在于,所述步骤4包括:步骤4.1:将智能合约的抽象语法树拆分为多个小的contract级别的抽象语法树;步骤4.2:使用Text CNN提取抽象语法树的语法特征,包括:1)输入抽象语法树特征向量;2)定义多个不同宽度的一维卷积核,分别对输入向量执行卷积计算,捕获不同数目的相邻词元之间的局部特征;3)在所有输出通道上执行自适应平均池化,然后将所有标量汇聚输出连接为向量,最终获得智能合约的语法特征向量;步骤4.3:使用图神经网络对控制流图进行图嵌入表示,得到代表整个控制流图的图嵌入向量,将该向量作为源代码的语义特征向量,使用消息传递机制进行图训练;步骤4.4:将对应的语法特征向量和语义特征向量进行拼接,得到语法和语义特征融合向量;步骤4.5:将语法和语义特征融合向量输入多层感知机进行二分类,“0”为无漏洞,“1”为有漏洞;步骤4.6:对模型训练多次,不断调整和优化模型参数,得到一个性能较优的漏洞检测...
【专利技术属性】
技术研发人员:韩道军,李秋月,张磊,许涛,贾培艳,沈亚田,丁文珂,肖琦,李云松,王泽民,王耀琪,王在朝,
申请(专利权)人:河南大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。