CN118133016A - 面向合约中间表示的智能合约安全检测模型的训练方法、检测方法、装置和设备 - Google Patents

面向合约中间表示的智能合约安全检测模型的训练方法、检测方法、装置和设备 Download PDF

Info

Publication number
CN118133016A
CN118133016A CN202410255672.0A CN202410255672A CN118133016A CN 118133016 A CN118133016 A CN 118133016A CN 202410255672 A CN202410255672 A CN 202410255672A CN 118133016 A CN118133016 A CN 118133016A
Authority
CN
China
Prior art keywords
intelligent contract
contract
intermediate representation
graph
relation
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
Application number
CN202410255672.0A
Other languages
English (en)
Inventor
董学文
陈国良
王志鹏
周丹霏
王晨辉
鲁昊奔
张晓东
沈玉龙
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xidian University
Original Assignee
Xidian University
Filing date
Publication date
Application filed by Xidian University filed Critical Xidian University
Publication of CN118133016A publication Critical patent/CN118133016A/zh
Pending legal-status Critical Current

Links

Abstract

本发明提供了一种面向合约中间表示的智能合约安全检测模型的训练方法、检测方法、装置和设备,包括构建联盟链智能合约数据集;对联盟链智能合约数据集进行预处理操作,生成多个相应的中间表示;确定各中间表示对应的多关系图;根据各多关系图对初始门控图神经网络模型进行训练,得到训练好的面向合约中间表示的智能合约安全检测模型,该方法能够捕获智能合约中隐藏的语义信息和上下文信息,有效降低误报率,同时能够减少人工参与,自动化程度高,检测效率更高。

Description

面向合约中间表示的智能合约安全检测模型的训练方法、检 测方法、装置和设备
技术领域
本发明属于区块链安全检测技术领域,具体涉及一种面向合约中间表示的智能合约安全检测模型的训练方法、检测方法、装置和设备。
背景技术
区块链概念自2008年在比特币白皮书中被提出以来,因采用了去中心化基础架构与分布式存储技术,引起全世界广泛关注。随着区块链技术覆盖范围的进一步扩大,区块链技术平台逐渐形成了公链、私有链和联盟链三种形态,在诸多行业中都起到了重要作用。联盟链允许联盟之间的多个组织或实体共享同一区块链网络上的特定数据资源,更符合特定场景下的业务需求,可以在政务、金融、保险、物联网等领域实现价值交换和信息共享,因此得到了相当广泛的应用。
智能合约作为区块链支柱技术之一,往往涉及到数字资产或加密货币的交易和处理,随着使用智能合约进行交易的分布式应用逐渐增多,因智能合约的漏洞而导致的安全事件也频繁发生,频发的安全事件不仅会造成巨大的经济损失,甚至会影响区块链系统的可靠性。
基于此,近年来关于智能合约的安全检测方法的研究越来越多,基于深度学习技术对智能合约进行安全检测成为研究的重要方向之一,然而现有的针对智能合约安全检测的研究主要围绕以太坊平台展开,对联盟链平台的智能合约检测缺少针对性的研究。目前主流的智能合约安全检测技术存在以下缺点:
(1)现有技术是基于源代码级别对智能合约漏洞进行检测,难以捕获智能合约中隐藏的语义信息和上下文信息,导致误报率较高;
(2)现有技术依赖于人类专家来定义特征,自动化程度低,且需要耗费大量的人力资源,而且常常会造成漏洞遗漏,导致较高的误报率。
发明内容
为了解决现有技术中存在的上述问题,本发明提供了一种面向合约中间表示的智能合约安全检测模型的训练方法、检测方法、装置和设备。具体包括:
第一方面,本发明提供了一种面向合约中间表示的智能合约安全检测模型的训练方法,包括:
构建联盟链智能合约数据集;
对联盟链智能合约数据集进行预处理操作,生成多个相应的中间表示;
确定各中间表示对应的多关系图;
根据各多关系图对初始门控图神经网络模型进行训练,得到训练好的面向合约中间表示的智能合约安全检测模型。
第二方面,本发明还提供了一种面向合约中间表示的智能合约安全检测方法,包括:
获取待检测的智能合约;
对智能合约进行预处理操作,生成多个目标中间表示;
确定各目标中间表示对应的目标多关系图;
对各目标多关系图进行图嵌入处理,得到嵌入好的目标多关系图;
将嵌入好的目标多关系图输入根据如第一方面中所提供的任一方法训练得到的训练好的面向合约中间表示的智能合约安全检测模型中进行安全检测。
第三方面,本发明还提供了一种面向合约中间表示的智能合约安全检测模型的训练装置,包括:
处理模块,用于构建联盟链智能合约数据集;
处理模块,还用于对联盟链智能合约数据集进行预处理操作,并对处理结果进行编译,生成多个相应的中间表示;
确定模块,用于确定各中间表示对应的多关系图;
训练模块,用于根据各多关系图对初始门控图神经网络模型进行训练,得到训练好的面向合约中间表示的智能合约安全检测模型。
第四方面,本发明提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现第一方面或第二方面所提供任一方法。
第五方面,本发明提供了一种计算机可读存储介质,计算机可读存储介质内存储有计算机程序,计算机程序被处理器执行时实现实现第一方面或第二方面所提供任一方法。
本发明的有益效果:
本发明提供的面向合约中间表示的智能合约安全检测模型的训练方法、检测方法、装置和设备,通过构建联盟链智能合约数据集;对联盟链智能合约数据集进行预处理操作,生成多个相应的中间表示,从而能够基于更接近编译底层的中间表示抽象和统一智能合约的结构,为不同的智能合约提供通用的处理框架,更具通用性和可扩展性;进一步确定各中间表示对应的多关系图;根据各多关系图对初始门控图神经网络模型进行训练,得到训练好的面向合约中间表示的智能合约安全检测模型,能够通过提取中间表示的控制流和数据流生成多关系图,有助于更全面地捕捉智能合约的结构和行为特征,捕获智能合约中隐藏的语义信息和上下文信息,提高对漏洞的敏感性,从而更好地检测潜在的安全问题,有效降低误报率,于此同时该方法能够减少人工参与,自动化程度高,检测效率更高。
以下将结合附图及实施例对本发明做进一步详细说明。
附图说明
图1为本发明提供了一种面向合约中间表示的智能合约安全检测模型的训练方法的流程示意图;
图2为本发明提供的一种获取智能合约的过程示意图;
图3(a)为本发明提供的一种智能合约fabcar的ChangeCarOwner函数源代码的示意图;
图3(b)为本发明提供的一种智能合约fabcar的ChangeCarOwner函数源代码对应的中间表示的示意图;
图4为本发明提供的一种对联盟链智能合约数据集进行预处理操作的过程示意图;
图5为本发明提供的一种确定多关系图的过程示意图;
图6为本发明提供的一种多关系图的示意图;
图7为本发明提供的一种对多关系图进行图嵌入处理的过程示意图;
图8为本发明提供的一种门控图神经网络模型的架构示意图;
图9为本发明提供的一种面向合约中间表示的智能合约安全检测模型的训练装置的结构示意图;
图10为本发明提供的一种面向合约中间表示的智能合约安全检测方法的流程示意图。
具体实施方式
下面结合具体实施例对本发明做进一步详细的描述,但本发明的实施方式不限于此。
传统的智能合约安全检测方法主要是受编程语言领域已有测试方法的启发,主要围绕形式化验证法、符号执行法和模糊测试法开展。VerX是一个针对合约安全性功能属性的形式化验证工作,其结合符号执行技术,提出了一种延迟谓词抽象技术,将交易执行期间的符号执行信息与交易之间的抽象信息相结合,以对智能合约的时间安全属性进行自动化验证。teEther是一种利用符号执行法进行智能合约静态分析的工具,其考虑了智能合约漏洞自动识别以及合约生成方法,并通过分析合约字节码查找关键的执行路径以检测合约的安全问题。ContractFuzzer是第一个基于模糊测试的以太坊智能合约安全漏洞的动态分析方法,基于智能合约ABI规范生成模糊测试用例并定义测试方案来检测安全漏洞。传统的智能合约检测方法需要人工参与,根据智能合约漏洞特点编写相应规则,成本较高,且检测过程耗时久,不适合批量漏洞检测。
解决现有技术中存在的问题及缺陷的难度为:需要设计一种既适用于联盟链智能合约,又能在比源代码更高级别进行高精度、自动化漏洞检测的技术方法。
基于此,本发明提供了一种面向合约中间表示的智能合约安全检测模型的训练方法,如图1所示,该方法包括:
S101、构建联盟链智能合约数据集。
目前针对联盟链智能合约的安全检测研究不足,需要对联盟链智能合约的运行原理和存在的漏洞类型进行深入分析。由于没有公开的联盟链智能合约数据集可用,需要构建包含多种漏洞的高质量联盟链智能合约数据集。
可选的,构建联盟链智能合约数据集,包括:根据Github上与智能合约相关的项目,或者,Github上与智能合约相关的项目以及收藏数最多且采用Go语言编写的其他常规项目,构建联盟链智能合约数据集。
示例性的,如图2所示,通过将联盟链智能合约必需的链包名称(fabric-chaincode-go/shim)作为关键字在Github上进行检索以获取Github上与智能合约相关的项目。
由于联盟链的隐私性,可用的公开智能合约不多,而智能合约多采用Go语言编写,智能合约的编写规范和常规代码略有不同,但是整体是十分相似的,所以也可以进一步获取Github上收藏数满足预设条件且采用Go语言编写的其他常规项目对联盟链智能合约数据集进行扩充,进而基于代码相似性进行漏洞检测。通过该方法能够解决智能合约样本稀少的问题。另外,此方案的合理性在于,由于联盟链是一个分布式系统,只有多个节点验证结果符合背书策略,并确保数值一致才能存入区块链,如果智能合约代码包含不一致性缺陷,就会在合约执行过程中导致不同节点获的结果不一致,给系统引入异常。因此在智能合约中使用全局变量、随机数函数、时间戳函数等行为都有可能导致不同节点的计算结果不一致,从而引发异常情况出现。而这些行为在常规的代码编写中并不会被认为有问题,考虑到这种由于区块链本身特性带来的平台层漏洞,本发明采用从其他常规Go语言项目到联盟链智能合约的数据迁移方法,通过借用其他常规Go语言项目的数据,利用其相似性来进行联盟链智能合约漏洞检测。
S102、对联盟链智能合约数据集进行预处理操作,生成多个相应的中间表示。
示例性的,对联盟链智能合约数据集进行如筛选、源代码提取、函数体分割、数据库存储以及漏洞类型标注等一系列预处理操作。
如图3所示,中间表示(Intermediate Representation)是源代码经过编译器转换的一种高级抽象形式,它比源代码更加抽象和通用,需要设计算法从中间表示中提取隐藏的信息。图3所示示例中,图3(a)和图3(b)分别展示了智能合约fabcar的ChangeCarOwner函数源代码和生成的部分中间表示。
可选的,对联盟链智能合约数据集进行预处理操作,生成多个相应的中间表示,包括:批量编译联盟链智能合约数据集,以剔除联盟链智能合约数据集中无法编译的项目,得到编译结果;获取编译结果中的Go代码;分析各Go代码的抽象语法树,以将各Go代码划分为函数体;通过Go语言分析工具对各函数体进行分析,根据分析结果对各函数体进行漏洞标注,并基于标注结果得到各函数体所对应的中间表示。
示例性的,参见图4,首先,编写自动化脚本通过LLVM(Low Level Virtualmachine)编译器批量编译数据集,剔除掉无法编译的项目保证数据集的质量和可用性。下一步,通过python脚本提取项目中用Go语言编写的代码,进而,分析代码的抽象语法树将数据集切割成函数体并写入数据库,以实现函数级别的细粒度漏洞检测,进而使用现有的Go语言分析工具,对数据集进行漏洞标注。本发明关注的漏洞类型主要包括黑名单库导入、全局变量、go并发、map地址迭代、具体化对象地址、随机数生成、系统时间戳、未检查输入参数、未处理异常等漏洞类型。最后再使用LLVM将处理好的函数片段编译成中间语言LLVMIR。
由于数据集的编译需要以项目为单位,生成的中间表示包括了项目中的多个go代码,因此为了解决编译带来的函数体和中间表示匹配问题,本发明提出了行号定位算法,通过抽象语法树分析函数所在的源代码行数,结合函数所在源代码的文件名在生成的LLVMIR中进行匹配,实现函数级别的映射。LLVM IR是一种低级别的、中间表示的编程语言,包含了高级语言的结构和特性,同时提供了一种通用的、硬件无关的表示形式。LLVM IR中包含着丰富的语义信息和结构信息,有助于分析和识别潜在的安全漏洞。
S103、确定各中间表示对应的多关系图。
函数的中间表示由一系列静态单赋值形式的指令构成,每条指令包含了操作符、操作数等一系列数据,为了提取中间表示中的控制流和数据流,本发明通过基本块之间的跳转指令捕获函数中的控制依赖关系,通过指令涉及的操作数来捕获函数中的数据依赖关系。
可选的,确定中间表示对应的多关系图,包括:针对中间表示中的任一第一中间表示,遍历第一中间表示中的基本块,将获取到的所有指令确定为第一中间表示对应的第一多关系图的节点;分析各指令对应的指令类型,并将指令类型涉及内存操作的指令所对应的变量也确定为第一多关系图的节点;对各基本块内的指令序列进行数据流和控制流分析,以确定出第一多关系图中各节点对应的数据流边和控制流边。
示例性的,参见图5,首先初始化多关系图节点集合g.Nodes、控制流边集合g.ControlEdges和数据流边集合g.DataEdges,并将所有指令添加到节点集合中。接下来遍历每个基本块内的指令序列进行数据流和控制流分析。
控制流分析如下:基本块内的指令是顺序执行,因此对于基本块内的指令序列直接添加当前指令到下一指令的控制流边,对于基本块的尾指令bb.Term可通过遍历其目标指令集合bb.Term.Succs生成基本块之间的控制流边。
最后是数据流的分析,由于load指令和store指令涉及到对内存的操作,因此需要做特殊处理。如果是load指令,首先检查指令的操作数loadVar是否已在图节点中,如果无则新建操作数节点,并添加操作数节点到当前指令的数据流边。如果是store指令,检查指令的源操作数srcVar和目的操作数dstVar是否已在图节点中,如果无则新建操作数节点,并添加源操作数到当前指令以及当前指令到目的操作数的数据流边。对于其他指令,遍历指令的操作数集合,并检查操作数是否是一个LLVM IR指令,如果是则添加源指令到当前指令的数据流边,从而得到如图6所示的多关系图。
S104、根据各多关系图对初始门控图神经网络模型进行训练,得到训练好的面向合约中间表示的智能合约安全检测模型。
为了基于智能合约中间表示实现自动化、高精度的漏洞检测,还需要通过自然语言处理和深度学习等技术,设计并训练联盟链智能合约安全检测模型。
可选的,根据多关系图对初始门控图神经网络模型进行训练,得到训练好的面向合约中间表示的智能合约安全检测模型,包括:
对各多关系图进行图嵌入处理,得到多个嵌入好的多关系图;针对任一第一漏洞,从多个嵌入好的多关系图中获取预设数量个存在第一漏洞的嵌入好的多关系图,对初始门控图神经网络模型进行训练,以得到用于检测第一漏洞的训练好的面向合约中间表示的智能合约安全检测模型。
可选的,根据多关系图对初始门控图神经网络模型进行训练,得到训练好的面向合约中间表示的智能合约安全检测模型,包括:对各多关系图进行图嵌入处理,得到多个嵌入好的多关系图;根据多个嵌入好的多关系图,对初始门控图神经网络模型进行训练,以得到用于检测多种漏洞的训练好的面向合约中间表示的智能合约安全检测模型。
示例性的,根据不同的漏洞类型,按照1:1的比例从数据集中选取正样本和负样本组成训练样本,设计门控图神经网络对训练样本进行分类训练,训练样本按照7:2:1的比例划分训练集、验证集和测试集,最后通过准确性、精度、召回率和F1分数四个指标来评估模型性能。
在一种可能的实现方式中,对多关系图进行图嵌入处理,包括:对图节点进行嵌入。
示例性的,如图7所示,首先,遍历所有多关系图的节点,并通过分词工具将节点对应的指令分割成单词组成语料库;接下来通过Word2vec模型对语料库进行训练,将单词编码成对应的词向量。由于每个节点是多个单词组成的指令序列,因此需要通过词向量将节点编码成句向量,因此本发明进一步通过基于SIF(smooth inverse frequency)加权平均的句向量生成方法对节点进行编码,具体操作为:(1)使用平滑逆词频的方法计算每个词的加权系数,词w的权重为这里a为常数,p(w)为词w的词频;(2)对句子中的所有词向量进行加权平均,得到平均向量vs;(3)将一个函数对应的中间表示作为一个段落,移出vs在所有句子向量组成的矩阵的第一个主成分上的投影,得到最终的句向量。最后,本发明进一步通过0和1来分别表示多关系图中的控制流边和数据流边,以此完成多关系图的嵌入工作。
通过使用word2vec模型训练语料库,通过基于SIF加权平均的方法对多关系图节点进行表征,实现了图结构在连续向量空间的语义表示,提高了对图结构的语义理解和分析能力。
可选的,还可以使用简单平均策略或者基于TF-IDF值的加权平均策略替换上述嵌入过程中的基于SIF加权平均的方法。
将多关系图嵌入到一个向量空间可以将智能合约的结构和语义以数学表示的形式进行捕捉,更容易检测到智能合约中异常的控制流和数据流,从而帮助检测潜在的安全漏洞。
嵌入好的多关系图属于非欧几里得数据,传统的卷积神经网络模型无法处理这类数据,因此本发明提出了如图7所示的门控图神经网络对标注好的多关系图进行学习分类。
门控图神经网络模型,如图8所示,接收嵌入好的多关系图作为输入,通过迭代地更新每个节点的表示,从而捕捉节点的局部信息和全局信息。为了提高模型对图结构的适应性,通过加入门控循环单元GRU动态的控制信息的传递,通过更新门控制新信息的融合,重置门控制原始信息的遗忘,以此来允许网络学习在更新节点表示时应该保留多少原始信息和加入多少新信息。最终模型通过对节点表示进行聚合学习到全局嵌入向量,将其传递到卷积层的全连接网络,使用softmax层进行分类,实现对函数漏洞的安全检测。
通过引入门控循环单元来允许模型有选择地控制信息的传递,不断学习和调整图结构中信息的流动,使得模型更具灵活性,能够适应不同智能合约的特性,更好的捕捉潜在的安全漏洞。
示例性的,可以将多个嵌入好的多关系图按预设比例,例如7:2:1的比例,进行划分为训练集、验证集和测试集,训练门控图神经网络模型得到相应的训练好的面向合约中间表示的智能合约安全检测模型。
本发明提供的面向合约中间表示的智能合约安全检测模型的训练方法,通过建联盟链智能合约数据集;对联盟链智能合约数据集进行预处理操作,生成多个相应的中间表示;确定各中间表示对应的多关系图;根据各多关系图对初始门控图神经网络模型进行训练,得到训练好的面向合约中间表示的智能合约安全检测模型,能够基于更接近编译底层的中间表示抽象和统一智能合约的结构,为不同的智能合约提供通用的处理框架,更具通用性和可扩展性;通过提取中间表示的控制流和数据流生成多关系图,有助于更全面地捕捉智能合约的结构和行为特征,捕获智能合约中隐藏的语义信息和上下文信息,提高对漏洞的敏感性,从而更好地检测潜在的安全问题,有效降低误报率,于此同时该方法能够减少人工参与,自动化程度高,检测效率更高。
为进一步佐证上述有益效果,本发明还提供了一组实验数据,具体内容如下:
本实验使用华为云提供的AI开发平台ModelArts来对模型进行训练,实验规格为配备GPU:1*P00(16GB)|CPU:8核64GB的Ubuntu 18.04server64bit系统,环境镜像是pytorch1.8-cuda10.2-cudnn7,处理好的数据集存储在MySQL数据库中,生成训练样本时随机从数据库中抽取数据。
根据漏洞类型,本实验按照1:1的比例选取正样本和负样本组成训练样本分别训练门控图神经网络模型,并选择以下四个标准指标作为评估指标:1)准确性(Accuracy):正确标记的案例与测试案例总数的比率;2)精度(Precision):正确预测的样本与预测具有特定标签的样本总数之比;3)召回率(Recall):正确预测的样本与属于一个类别的测试样本总数的比率;4)F1分数:Precision和Recall的平均值,计算公式为:2×(Recall×Precision)/(Recall+Precision)。实验结果表示,本发明实施例所设计的智能合约安全检测模型准确性为93.16%,精度为93.75%,召回率为93.07%,F1得分为93.12%。
为了验证本实验的模型准确性,本实验在测试过程中设计了基于源代码的漏洞检测模型与本发明所提供的模型进行对比测试。具体方案为,将数据集的函数片段转换成抽象语法树后使用word2vec模型进行编码,同样采用门控图神经网络训练漏洞检测模型,本发明所提供的模型对比源代码的漏洞检测模型提升了5%的准确度。
图9为本发明提供的一种面向合约中间表示的智能合约安全检测模型的训练装置的结构示意图,如图8所示,该装置包括:
处理模块91,用于构建联盟链智能合约数据集。
处理模块91,还用于对联盟链智能合约数据集进行预处理操作,并对处理结果进行编译,生成多个相应的中间表示。
确定模块92,用于确定各中间表示对应的多关系图。
训练模块93,用于根据各多关系图对初始门控图神经网络模型进行训练,得到训练好的面向合约中间表示的智能合约安全检测模型。
图10为本发明提供的一种面向合约中间表示的智能合约安全检测方法的流程示意图,如图10所示,该方法包括:
S1001、获取待检测的智能合约。
S1002、对智能合约进行预处理操作,生成多个目标中间表示。
S1003、确定各目标中间表示对应的目标多关系图。
S1004、对各目标多关系图进行图嵌入处理,得到嵌入好的目标多关系图。
S1005、将嵌入好的目标多关系图输入根据如上述方法实施例中所提供的任一方法训练得到的训练好的面向合约中间表示的智能合约安全检测模型中进行安全检测。
本发明还提供的一种电子设备的结构示意图,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信,
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现上述方法实施例中所提供的步骤。
通信接口用于上述电子设备与其他设备之间的通信。
本发明还提供了一种计算机可读存储介质,计算机可读存储介质内存储有计算机程序,计算机程序被处理器执行时实现上述方法实施例中所提供的步骤。
对于装置/电子设备/存储介质实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,具体内容及有益效果等相关之处参见方法实施例的部分说明即可。
术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本发明的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。

Claims (10)

1.一种面向合约中间表示的智能合约安全检测模型的训练方法,其特征在于,包括:
构建联盟链智能合约数据集;
对所述联盟链智能合约数据集进行预处理操作,生成多个相应的中间表示;
确定各所述中间表示对应的多关系图;
根据各所述多关系图对初始门控图神经网络模型进行训练,得到训练好的面向合约中间表示的智能合约安全检测模型。
2.根据权利要求1所述的方法,其特征在于,所述对所述联盟链智能合约数据集进行预处理操作,生成多个相应的中间表示,包括:
批量编译所述联盟链智能合约数据集,以剔除所述联盟链智能合约数据集中无法编译的项目,得到编译结果;
获取所述编译结果中的Go代码;
分析各所述Go代码的抽象语法树,以将各所述Go代码划分为函数体;
通过Go语言分析工具对各所述函数体进行分析,根据分析结果对各所述函数体进行漏洞标注,并基于标注结果得到各所述函数体所对应的中间表示。
3.根据权利要求2所述的方法,其特征在于,所述确定所述中间表示对应的多关系图,包括:
针对所述中间表示中的任一第一中间表示,
遍历所述第一中间表示中的基本块,将获取到的所有指令确定为所述第一中间表示对应的第一多关系图的节点;
分析各所述指令对应的指令类型,并将指令类型涉及内存操作的指令所对应的变量也确定为所述第一多关系图的节点;
对各所述基本块内的指令序列进行数据流和控制流分析,以确定出所述第一多关系图中各所述节点对应的数据流边和控制流边。
4.根据权利要求3所述的方法,其特征在于,所述根据所述多关系图对初始门控图神经网络模型进行训练,得到训练好的面向合约中间表示的智能合约安全检测模型,包括:
对各所述多关系图进行图嵌入处理,得到多个嵌入好的多关系图;
针对任一第一漏洞,从所述多个嵌入好的多关系图中获取预设数量个存在所述第一漏洞的嵌入好的多关系图,对初始门控图神经网络模型进行训练,以得到用于检测所述第一漏洞的训练好的面向合约中间表示的智能合约安全检测模型。
5.根据权利要求3所述的方法,其特征在于,所述根据所述多关系图对初始门控图神经网络模型进行训练,得到训练好的面向合约中间表示的智能合约安全检测模型,包括:
对各所述多关系图进行图嵌入处理,得到多个嵌入好的多关系图;
根据所述多个嵌入好的多关系图,对初始门控图神经网络模型进行训练,以得到用于检测多种漏洞的训练好的面向合约中间表示的智能合约安全检测模型。
6.根据权利要求1-5任一所述的方法,其特征在于,所述构建联盟链智能合约数据集,包括:
根据Github上与智能合约相关的项目,或者,Github上与智能合约相关的项目以及收藏数满足预设条件且采用Go语言编写的其他常规项目,构建联盟链智能合约数据集。
7.一种面向合约中间表示的智能合约安全检测方法,其特征在于,包括:
获取待检测的智能合约;
对所述智能合约进行预处理操作,生成多个目标中间表示;
确定各所述目标中间表示对应的目标多关系图;
对各所述目标多关系图进行图嵌入处理,得到嵌入好的目标多关系图;
将所述嵌入好的目标多关系图输入根据如权利要求1-6中任一所述方法训练得到的训练好的面向合约中间表示的智能合约安全检测模型中进行安全检测。
8.一种面向合约中间表示的智能合约安全检测模型的训练装置,其特征在于,包括:
处理模块,用于构建联盟链智能合约数据集;
所述处理模块,还用于对所述联盟链智能合约数据集进行预处理操作,并对处理结果进行编译,生成多个相应的中间表示;
确定模块,用于确定各所述中间表示对应的多关系图;
训练模块,用于根据各所述多关系图对初始门控图神经网络模型进行训练,得到训练好的面向合约中间表示的智能合约安全检测模型。
9.一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现权利要求1-7任一所述的方法步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-7任一所述的方法步骤。
CN202410255672.0A 2024-03-06 面向合约中间表示的智能合约安全检测模型的训练方法、检测方法、装置和设备 Pending CN118133016A (zh)

Publications (1)

Publication Number Publication Date
CN118133016A true CN118133016A (zh) 2024-06-04

Family

ID=

Similar Documents

Publication Publication Date Title
Tufano et al. Deep learning similarities from different representations of source code
CN113360915B (zh) 基于源代码图表示学习的智能合约多漏洞检测方法及系统
CN110008703B (zh) 一种容器内恶意软件静态检测系统及方法
CN112989363B (zh) 漏洞定位方法、装置、电子设备和存储介质
CN111475820A (zh) 基于可执行程序的二进制漏洞检测方法、系统及存储介质
CN114341880A (zh) 用于使神经网络的操作可视化的技术
CN112115326B (zh) 一种以太坊智能合约的多标签分类和漏洞检测方法
CN114547611A (zh) 一种基于多模态特征的智能合约庞氏骗局检测方法及系统
Dwivedi et al. Applying learning-based methods for recognizing design patterns
CN114036531A (zh) 一种基于多尺度代码度量的软件安全漏洞检测方法
CN117354067B (zh) 一种恶意代码检测方法及系统
US20230385037A1 (en) Method and system for automated discovery of artificial intelligence (ai)/ machine learning (ml) assets in an enterprise
CN115858002B (zh) 基于图对比学习的二进制代码相似性检测方法及系统与存储介质
CN117195233A (zh) 面向开源软件供应链的物料清单sbom+分析方法及装置
CN116975881A (zh) 一种基于llvm的漏洞细粒度定位方法
Karakati et al. Software code refactoring based on deep neural network‐based fitness function
CN116226850A (zh) 应用程序的病毒检测方法、装置、设备、介质及程序产品
CN113836297B (zh) 文本情感分析模型的训练方法及装置
CN118133016A (zh) 面向合约中间表示的智能合约安全检测模型的训练方法、检测方法、装置和设备
CN116628695A (zh) 基于多任务学习的漏洞挖掘方法及装置
Luo et al. Funcnet: A euclidean embedding approach for lightweight cross-platform binary recognition
Ouyang et al. Binary vulnerability mining based on long short-term memory network
Li et al. Towards one reusable model for various software defect mining tasks
CN114579183B (zh) 一种用于分布式计算的作业分解处理方法
Zhou et al. Software Vulnerability Detection via Multimodal Deep Learning

Legal Events

Date Code Title Description
PB01 Publication