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

文档序号:34663623发布日期:2023-07-05 12:06阅读:62来源:国知局
基于多示例和注意力机制的智能合约分析方法及装置

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


背景技术:

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

2、现有的合约分析技术采用了模式匹配(smartcheck和slither)、符号执行(oyente和mythril)、模糊测试(contractfuzzer和ilf)和机器学习(dr-gcn和s-gram)来识别漏洞(包含合约漏洞bug和代码优化)。然而,目前还存在以下三个关键的挑战。

3、挑战1:(需求)支持智能合约的源代码、字节码/操作码的分析。

4、智能合约通常使用高级编程语言开发,例如solidity。当开发人员将智能合约部署到以太坊时,合约将首先被编译成以太坊虚拟机(ethereum virtual machine,evm)字节码。然后,以太坊系统上的每个节点都将收到合约字节码,并在其账本中拥有一份副本。在以后运行合约时,evm会将字节码解析为操作码序列并执行。智能合约的源代码由于其易读性而被许多方法分析,例如模式匹配(neucheck和zeus),相似代码匹配(smartembed)和机器学习(peculiar和deescvhunter)。然而,根据最新记录,在以太坊上运行的100万个智能合约中,只有不到2%的人公开了它们的源代码。因此,这些工具很难被直接用于分析以太坊上庞大数量的智能合约。同时基于字节码分析由于存在以下原因,很难进行实现。1)字节码丢失了一些合约原始语义。2)合约中往往会引入了很多无关的干扰,即那些与漏洞无关的语句,称为噪声代码,可能会混淆代码匹配。

5、挑战2:(智能化&无人化)降低对预先人工定义规则/模式的依赖和专家的参与。

6、尽管已经有一些基于字节码的漏洞检测研究,如符号执行(teether和defectchecker)和模糊测试(contractfuzzer和smartian),检测和预防越来越多的合约漏洞的需求仍然在增长。这些方法的一个主要不足是它们需要专家定义的某些漏洞模式/预言或规则(统称为模式)来构建漏洞检测器或代码检查器。然而由于以下原因,使得他们不足以应对以太坊上多变的合约漏洞。1)人工定义的模式具有容易出错的风险,并且一些复杂漏洞的规则较难制定。同时,攻击者可能会使用技巧绕过规则的固定模式。2)随着solidity编译器的发展,字节码具有可变的表现形式,字节码生成的多样性会给固定的规则形式带来困难。3)随着攻击者和防御者之间的竞争,不断编写新模式以响应攻击者创建的新漏洞可能太慢且成本太高。

7、挑战3:(实用化)帮助开发者更安全地完成合约生命周期,例如漏洞识别、验证、修复、模拟和监控。

8、基于机器学习的方法(contractward)常被用于自动学习合约漏洞特征,从而充分利用现有的漏洞合约来表达漏洞。然而,这些方法在可扩展性、通用性和可解释性方面存在一定的限制,导致它们的检测准确性和运行速度不足。更为重要的是,他们仅能检查智能合约是否存在漏洞,而不能输出其他有效的信息以支持开发人员修复这些漏洞,更不支持漏洞验证、漏洞模拟和异常行为监控。因此,以有效、高效和可解释的方式检测合约中的不同漏洞(例如重入和时间戳依赖),同时帮助开发人员在现实生活中更安全地完成合约生命周期,是一个新兴而且至关重要的问题。具体来说,1)在合约开发和部署阶段向合约开发人员报告有缺陷的源代码语句、关键字节码片段以及可能的建议,以便进一步修复合约;2)支持自动化漏洞验证,减少误报和人工审核的工作量;3)提供触发合约漏洞可能的调用输入;4)监控合约调用,判断合约执行和合约销毁阶段的异常行为。解决这个问题的一种方法是使用机器学习技术来关注合约的执行序列,而不是盲目地检查整个合约字节码。然而,由于字节码较差的可读性以及合约往往包含若干个执行序列,因此识别者很难根据合约的标签推断相应合约字节码序列的标签。也就是说,在训练数据集中,本发明仅能知道哪些合约是否包含某个漏洞,但不知道其哪些字节码序列是恶意的,即能够导致漏洞发生。这使得分类器(即基于ml的模型)在缺乏细粒度标签的情况下,无法基于合约执行序列进行训练,也就很难实现合约漏洞执行序列的识别。这可以归因为训练数据的细粒度标签缺失问题。因此,为更好地在真实环境中部署智能的合约识别模型,发现并指导合约开发者/审计者修复合约漏洞,亟需设计和研制一种面向合约字节码执行序列的合约智能分析模型。


技术实现思路

1、为了克服上述现有技术的不足,本发明提供一种基于多示例和注意力机制的智能合约分析方法及装置,用于自动化学习以太坊智能合约漏洞特征,检测潜在的智能合约安全风险并输出合约缺陷代码语句、关键操作码片段、执行序列等有效信息,有效地保护区块链上运行的智能合约安全以及用户的隐私及财产安全。

2、为达到上述目的,本发明提供如下技术方案:

3、一种基于多示例和注意力机制的智能合约分析方法,所述方法包括:

4、获取智能合约的操作码;

5、基于所述操作码,构建所述智能合约的程序控制流图;

6、对所述程序控制流图执行深度优先遍历,以得到由t个操作码组成的实例;

7、对所述实例进行编码,并基于注意力机制的双向长短期循环神经网络对编码结果进行分类,以得到该实例的安全结论以及权重;

8、基于各实例的安全结论以及权重,得到所述智能合约的分析结果。

9、进一步地,所述获取智能合约的操作码,包括:

10、将智能合约的源代码编译成字节码;

11、使用geth提供的api对所述字节码,以得到智能合约的操作码。

12、进一步地,所述基于所述操作码,构建所述智能合约的程序控制流图,包括:

13、将所述操作码拆分为若干个基本块;其中每一基本块表示为一个没有分支的代码序列;

14、根据所述代码序列的退出指令定义基本块的类型;所述类型包括:条件块、终端块和无条件块;

15、基于以太坊虚拟机堆栈对每个基本块中的指令执行符号推理,将条件块划分为有条件跳转块和无条件跳转块;

16、依据各基本块的类型,构建所述智能合约的程序控制流图。

17、进一步地,所述对所述程序控制流图执行深度优先遍历,以得到由t个操作码组成的实例,包括:

18、在所述程序控制流图获得没有输入的初始块;

19、从所述初始块执行深度优先遍历;

20、在遍历过程中出现连续的ncycle个基本块为已搜索过的基本块的情况下,结束遍历,并基于当前的操作码序列生成一实例;

21、在遍历过程中的路径长度超过限制数量的情况下,结束遍历,并基于当前的操作码序列生成一实例;

22、在遍历过程中触及终端块的情况下,结束遍历,并基于当前的操作码序列生成一实例。

23、进一步地,训练所述基于注意力机制的双向长短期循环神经网络,包括:

24、构建原始数据集;所述原始数据集由若干个合约样本组成;

25、获取所述合约样本中的实例样本;

26、通过将实例样本中的操作码转换成字节码,得到实例样本编码结果;

27、基于注意力机制的双向长短期循环神经网络的bi-lstm层,构建所述实例样本编码结果的向量矩阵h;

28、基于注意力机制的双向长短期循环神经网络的注意力层,对所述向量矩阵h进行注意力计算,以得到用于分类的最终序列对表示h*和该实例样本的权重向量;

29、基于注意力机制的双向长短期循环神经网络的分类器,对所述最终序列对表示h*进行分类,得到该实例的分类结果;

30、根据所述分类结果计算交叉熵损失,以更新所述注意力机制的双向长短期循环神经网络;

31、基于更新后的注意力机制的双向长短期循环神经网络,对原始数据集进行优化,并返回至所述构建原始数据集;

32、直至训练周期结束,得到训练后的注意力机制的双向长短期循环神经网络。

33、进一步地,所述基于各实例的安全结论以及权重,得到所述智能合约的分析结果,包括:

34、获取所述智能合约的汇编语言源码;

35、针对所述安全结论为存在漏洞的实例,计算最大的m个权重值的索引向量并提取相应的关键操作码;

36、获取所述关键操作码在所述汇编语言源码中的起始位置和终止位置,以得到所述智能合约的缺陷代码语句;

37、根据各实例的安全结论,得到漏洞执行序列;

38、基于各实例的所述关键操作码、缺陷代码语句和漏洞执行序列,生成所述智能合约的分析结果。

39、进一步地,所述方法还包括:

40、基于漏洞执行序列构建符号约束;

41、利用可满足性模理论求解器对符号约束进行计算,得到该实例的符号约束参数;

42、基于所述符号约束参数,验证该实例的约束路径是否满足可行性;

43、在满足可行性的情况下,基于符号约束与符号约束参数,识别漏洞还原和异常调用行为;

44、在不满足可行性的情况下,判定该安全结论中的漏洞为误报。

45、进一步地,所述基于各实例的安全结论以及权重,得到所述智能合约的分析结果,包括:

46、构建合约漏洞-严重性表-通用漏洞修复示例;其中,严重性包括:high、medium、low、info和opt;

47、针对所述安全结论中漏洞类型,得到所述实例的漏洞严重性和通用的漏洞修复示例,以生成所述智能合约的分析结果。

48、一种基于多示例和注意力机制的智能合约分析装置,所述装置包括:

49、数据获取模块,用于获取智能合约的操作码;

50、流图构建模块,用于基于所述操作码,构建所述智能合约的程序控制流图;

51、实例生成模块,用于对所述程序控制流图执行深度优先遍历,以得到由t个操作码组成的实例;

52、实例分析模块,用于对所述实例进行编码,并基于注意力机制的双向长短期循环神经网络对编码结果进行分类,以得到该实例的安全结论以及权重;

53、结果生成模块,用于基于各实例的安全结论以及权重,得到所述智能合约的分析结果。

54、一种电子设备,其特征在于,所述电子设备包括:处理器以及存储有计算机程序指令的存储器;所述处理器执行所述计算机程序指令时实现上述任一项所述方法。

55、一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序指令,所述计算机程序指令被处理器执行时实现上述任一项所述方法。

56、相对于现有技术,本发明的有益效果在于:

57、(1)本发明提出的智能合约分析方法可以在不使用手动预定义规则的情况下准确地分析源代码、字节码和操作码,并且易扩展识别新漏洞。同时,相较于目前的方法准确率、精准度、召回率、f1值较高,方法实现健壮,分析失败率较低。

58、(2)本发明提出的智能合约分析方法相较于现有模式匹配、符号执行、模糊测试、机器学习的方法拥有较低的时间和空间开销,平均仅需4.4s和81.3mb分析一个121kb的以太坊智能合约,可在内存资源有限的环境中快速完成合约的全流程自动化分析。

59、(3)本发明提出的智能合约分析方法可以发现以太坊上其余方法检测不到的安全问题和0day漏洞合约,同时还可以优化合约,减少合约运行过程中不必要的开销,具有更强的实际使用意义。

60、(4)本发明提出的智能合约分析方法可以通过灵活的基础模型和参数配置满足合约审计人员的各种要求,例如:通过采用决策树模型和提高恶意序列的提取比例qm来尽可能发现更多的漏洞。

61、(5)本发明提出的智能合约分析方法相较于现有方法可以提供更多的服务。例如,它可以准确地完成合约漏洞检测,同时给出缺陷源码语句、关键操作码/字节码片段、执行序列和通用的修复方法示例。这些信息可以帮助合约开发人员了解漏洞的发生机制,并指导他们研制相应的定制化漏洞修复策略。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1