基于多示例和注意力机制的智能合约分析方法及装置制造方法及图纸

技术编号:38086775 阅读:14 留言:0更新日期:2023-07-06 08:55
本发明专利技术公开了一种基于多示例和注意力机制的智能合约分析方法及装置。所述方法包括:获取智能合约的操作码;基于所述操作码,构建所述智能合约的程序控制流图;对所述程序控制流图执行深度优先遍历,以得到由T个操作码组成的实例;对所述实例进行编码,并基于注意力机制的双向长短期循环神经网络对编码结果进行分类,以得到该实例的安全结论以及权重;基于各实例的安全结论以及权重,得到所述智能合约的分析结果。本发明专利技术可以有效地保护区块链上运行的智能合约安全以及用户的隐私及财产安全。全。全。

【技术实现步骤摘要】
基于多示例和注意力机制的智能合约分析方法及装置


[0001]本专利技术涉及以太坊智能合约安全
,具体涉及一种基于多示例和注意力机制的智能合约分析方法及装置。

技术介绍

[0002]智能合约是在区块链上运行的程序。目前,数以万计的智能合约被部署在以太坊区块链平台上,已经在钱包、众筹、在线游戏和跨行业金融等领域实现了广泛的应用。这使得智能合约持有价值超过100亿美元的虚拟货币。一旦智能合约存在安全漏洞,恶意用户可能会利用漏洞发起攻击,窃取用户账户中的财产。除了智能合约所承载的经济价值外,这些攻击还源于:1)智能合约运行在一个无需许可的网络中,这意味着攻击者可以自由地检查所有的交易和字节码,并试图找出合约中的漏洞。2)共识协议使得智能合约一旦部署就不可更改,这需要开发者预测合约未来可能遇到的所有可能状态,这无疑是困难的。因此,在将智能合约部署到以太坊之前,对合约进行有效漏洞审查,确保智能合约无错误且设计良好非常重要。
[0003]现有的合约分析技术采用了模式匹配(SmartCheck和Slither)、符号执行(Oyente和Mythril)、模糊测试(Contractfuzzer和ILF)和机器学习(DR

GCN和S

gram)来识别漏洞(包含合约漏洞Bug和代码优化)。然而,目前还存在以下三个关键的挑战。
[0004]挑战1:(需求)支持智能合约的源代码、字节码/操作码的分析。
[0005]智能合约通常使用高级编程语言开发,例如Solidity。当开发人员将智能合约部署到以太坊时,合约将首先被编译成以太坊虚拟机(Ethereum Virtual Machine,EVM)字节码。然后,以太坊系统上的每个节点都将收到合约字节码,并在其账本中拥有一份副本。在以后运行合约时,EVM会将字节码解析为操作码序列并执行。智能合约的源代码由于其易读性而被许多方法分析,例如模式匹配(NeuCheck和Zeus),相似代码匹配(SMARTEMBED)和机器学习(Peculiar和DeeSCVHunter)。然而,根据最新记录,在以太坊上运行的100万个智能合约中,只有不到2%的人公开了它们的源代码。因此,这些工具很难被直接用于分析以太坊上庞大数量的智能合约。同时基于字节码分析由于存在以下原因,很难进行实现。1)字节码丢失了一些合约原始语义。2)合约中往往会引入了很多无关的干扰,即那些与漏洞无关的语句,称为噪声代码,可能会混淆代码匹配。
[0006]挑战2:(智能化&无人化)降低对预先人工定义规则/模式的依赖和专家的参与。
[0007]尽管已经有一些基于字节码的漏洞检测研究,如符号执行(teEther和DefectChecker)和模糊测试(Contractfuzzer和SMARTIAN),检测和预防越来越多的合约漏洞的需求仍然在增长。这些方法的一个主要不足是它们需要专家定义的某些漏洞模式/预言或规则(统称为模式)来构建漏洞检测器或代码检查器。然而由于以下原因,使得他们不足以应对以太坊上多变的合约漏洞。1)人工定义的模式具有容易出错的风险,并且一些复杂漏洞的规则较难制定。同时,攻击者可能会使用技巧绕过规则的固定模式。2)随着Solidity编译器的发展,字节码具有可变的表现形式,字节码生成的多样性会给固定的规
则形式带来困难。3)随着攻击者和防御者之间的竞争,不断编写新模式以响应攻击者创建的新漏洞可能太慢且成本太高。
[0008]挑战3:(实用化)帮助开发者更安全地完成合约生命周期,例如漏洞识别、验证、修复、模拟和监控。
[0009]基于机器学习的方法(Contractward)常被用于自动学习合约漏洞特征,从而充分利用现有的漏洞合约来表达漏洞。然而,这些方法在可扩展性、通用性和可解释性方面存在一定的限制,导致它们的检测准确性和运行速度不足。更为重要的是,他们仅能检查智能合约是否存在漏洞,而不能输出其他有效的信息以支持开发人员修复这些漏洞,更不支持漏洞验证、漏洞模拟和异常行为监控。因此,以有效、高效和可解释的方式检测合约中的不同漏洞(例如重入和时间戳依赖),同时帮助开发人员在现实生活中更安全地完成合约生命周期,是一个新兴而且至关重要的问题。具体来说,1)在合约开发和部署阶段向合约开发人员报告有缺陷的源代码语句、关键字节码片段以及可能的建议,以便进一步修复合约;2)支持自动化漏洞验证,减少误报和人工审核的工作量;3)提供触发合约漏洞可能的调用输入;4)监控合约调用,判断合约执行和合约销毁阶段的异常行为。解决这个问题的一种方法是使用机器学习技术来关注合约的执行序列,而不是盲目地检查整个合约字节码。然而,由于字节码较差的可读性以及合约往往包含若干个执行序列,因此识别者很难根据合约的标签推断相应合约字节码序列的标签。也就是说,在训练数据集中,本专利技术仅能知道哪些合约是否包含某个漏洞,但不知道其哪些字节码序列是恶意的,即能够导致漏洞发生。这使得分类器(即基于ML的模型)在缺乏细粒度标签的情况下,无法基于合约执行序列进行训练,也就很难实现合约漏洞执行序列的识别。这可以归因为训练数据的细粒度标签缺失问题。因此,为更好地在真实环境中部署智能的合约识别模型,发现并指导合约开发者/审计者修复合约漏洞,亟需设计和研制一种面向合约字节码执行序列的合约智能分析模型。

技术实现思路

[0010]为了克服上述现有技术的不足,本专利技术提供一种基于多示例和注意力机制的智能合约分析方法及装置,用于自动化学习以太坊智能合约漏洞特征,检测潜在的智能合约安全风险并输出合约缺陷代码语句、关键操作码片段、执行序列等有效信息,有效地保护区块链上运行的智能合约安全以及用户的隐私及财产安全。
[0011]为达到上述目的,本专利技术提供如下技术方案:
[0012]一种基于多示例和注意力机制的智能合约分析方法,所述方法包括:
[0013]获取智能合约的操作码;
[0014]基于所述操作码,构建所述智能合约的程序控制流图;
[0015]对所述程序控制流图执行深度优先遍历,以得到由T个操作码组成的实例;
[0016]对所述实例进行编码,并基于注意力机制的双向长短期循环神经网络对编码结果进行分类,以得到该实例的安全结论以及权重;
[0017]基于各实例的安全结论以及权重,得到所述智能合约的分析结果。
[0018]进一步地,所述获取智能合约的操作码,包括:
[0019]将智能合约的源代码编译成字节码;
[0020]使用Geth提供的API对所述字节码,以得到智能合约的操作码。
[0021]进一步地,所述基于所述操作码,构建所述智能合约的程序控制流图,包括:
[0022]将所述操作码拆分为若干个基本块;其中每一基本块表示为一个没有分支的代码序列;
[0023]根据所述代码序列的退出指令定义基本块的类型;所述类型包括:条件块、终端块和无条件块;
[0024]基于以太坊虚拟机堆栈对每个基本块中的指令执行本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于多示例和注意力机制的智能合约分析方法,其特征在于,所述方法包括:获取智能合约的操作码;基于所述操作码,构建所述智能合约的程序控制流图;对所述程序控制流图执行深度优先遍历,以得到由T个操作码组成的实例;对所述实例进行编码,并基于注意力机制的双向长短期循环神经网络对编码结果进行分类,以得到该实例的安全结论以及权重;基于各实例的安全结论以及权重,得到所述智能合约的分析结果。2.如权利要求1所述的方法,其特征在于,所述获取智能合约的操作码,包括:将智能合约的源代码编译成字节码;使用Geth提供的API对所述字节码,以得到智能合约的操作码。3.如权利要求1所述的方法,其特征在于,所述基于所述操作码,构建所述智能合约的程序控制流图,包括:将所述操作码拆分为若干个基本块;其中每一基本块表示为一个没有分支的代码序列;根据所述代码序列的退出指令定义基本块的类型;所述类型包括:条件块、终端块和无条件块;基于以太坊虚拟机堆栈对每个基本块中的指令执行符号推理,将条件块划分为有条件跳转块和无条件跳转块;依据各基本块的类型,构建所述智能合约的程序控制流图。4.如权利要求3所述的方法,其特征在于,所述对所述程序控制流图执行深度优先遍历,以得到由T个操作码组成的实例,包括:在所述程序控制流图获得没有输入的初始块;从所述初始块执行深度优先遍历;在遍历过程中出现连续的n
cycle
个基本块为已搜索过的基本块的情况下,结束遍历,并基于当前的操作码序列生成一实例;在遍历过程中的路径长度超过限制数量的情况下,结束遍历,并基于当前的操作码序列生成一实例;在遍历过程中触及终端块的情况下,结束遍历,并基于当前的操作码序列生成一实例。5.如权利要求1所述的方法,其特征在于,训练所述基于注意力机制的双向长短期循环神经网络,包括:构建原始数据集;所述原始数据集由若干个合约样本组成;获取所述合约样本中的实例样本;通过将实例样本中的操作码转换成字节码,得到实例样本编码结果;基于注意力机制的双向长短期循环神经网络的Bi

LSTM层,构建所述实例样本编码结果的向量矩阵H;基于注意力机制的双向长短期循环神经网络的注意力层,对所述向量矩阵H进行注意力计算,以得到用于分类的最终序列对表示h
*
和该实例样本的权重向量;基于注意力机制的双向长短期循环神经网络的分类器,对所述最终序列对表示h
*
进行分类,得到该实例的分类结果;
根据所述分类结果计算交叉熵损失,以更新所述注意力机制的双向长短期循环神经网络;基于...

【专利技术属性】
技术研发人员:章睿李兆轩薛锐
申请(专利权)人:中国科学院信息工程研究所
类型:发明
国别省市:

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

1