一种基于深度学习的智能合约漏洞检测方法技术

技术编号:24168291 阅读:210 留言:0更新日期:2020-05-16 02:07
本发明专利技术属于区块链领域,涉及一种基于深度学习的智能合约漏洞检测方法,包括以下步骤:1)学习训练阶段:针对智能合约代码进行处理,选择合适的神经网络进行训练;2)检测阶段:将需要检测代码进行处理,输入到训练好的神经网络进行检测,得出结果。本发明专利技术漏洞检测方法通过深度学习的方法进行漏洞检测,实现了自动化,提高了效率。

A vulnerability detection method of smart contract based on deep learning

【技术实现步骤摘要】
一种基于深度学习的智能合约漏洞检测方法
本专利技术属于区块链领域,涉及一种基于深度学习的智能合约漏洞检测方法。
技术介绍
智能合约是区块链的核心技术之一,是多方参与场景中的共识规则,更是价值传递的中枢。智能合约本质是一段运行在区块链网络中的代码,它完成用户所赋予的业务逻辑。以以太坊体系的代币为例,其业务逻辑是代币发币和交易。以太坊在设计之初,将智能合约设计成了一旦部署就不能修改的模式,这种设计有可能是为了提高智能合约的可信性。在区块链应用中,由于区块链的不可篡改性,智能合约一旦上线并出现安全隐患,对用户造成的损失是巨大且不可挽回的。一旦出现黑客事件,需要整个社区的共识才能回滚交易,所以每次遭受攻击都回滚交易也是不现实的。因此,区块链应用开发的过程需要用大量的测试和检验以获取足够的安全性,而反过来牺牲迭代的速度。要应对区块链智能合约的安全漏洞问题,未来需要普遍考虑设计相应的智能合约协商更新机制,降低漏洞修复的成本。同时,在智能合约上线之前,对其进行全面深入的代码安全检测,尽可能的消除漏洞,降低安全风险。因此,我们需要一种可以自动化检测智能合约代码漏洞的方法及系统来减少该问题的产生。通过漏报率、误报率、命中率、测试时限等评估维度,来整体判别某种验证和检测工具的可行性,是当前智能合约及区块链应用发展的必经阶段,也是作为区块链从业者需要认真践行的使命。目前主流的智能合约漏洞检测分为三类,第一类就是特征代码的匹配,第二类就是基于形态化验证的自动化检测,以及第三类,基于符号执行和符号抽象的自动化检测。1)特征代码匹配:对恶意代码进行一些提取抽象,类似于代码静态检测,通过抽样成一种语义匹配,然后再去匹配它的静态源代码。这种检测的方法的优点是速度很快,因为它就是对原码进行一个字符串的匹配。第二是它能够迅速的响应新的漏洞,因为这种检测方法大部分是以插件形式开发,比如出现了一个新的漏洞,那么就可以快速的提交一些新的匹配模式。2)基于形式化验证的自动化检测:形式化方法是采用某种严格的数学理论,对目标对象进行准确且无二异性的严格数学建模,描述以及推导与证明。形式化验证是用逻辑来验证程序的可靠性,把一段程序用逻辑的方法证明一遍,证明它能得到预期的结果,没有bug。形式化验证来检测智能合约安全,最早是在16年,由Hirai提供,使用Isabelle高阶逻辑交互定理证明器,将EVM的一些OPCODE(机器码),通过lemlanguage转化成一个形式化模型,然后通过形式化模型的验证来去判断代码中的逻辑是否存在问题。3)基于符号执行、符号抽象的自动化检测:在对代码进行检测时,通过源代码或者编译,可以形成一个OPCODE,并输入到自动化分析引擎。在输入到引擎后,会转化成一个CFG(ControlFlowGraph控制流程图),CFG会将合约代码里的逻辑包装成块,当逻辑有分叉的时候,将其分叉。CFGBuilder主要是对OPCODE这种智能合约代码,把它形成一个十分庞大完善的一个CFG。CFG生成后,有以下两种分析方法:a.符号执行验证:OyenteOyente的逻辑是在CFGbuild形成之后,首先通过EXPLORER验证,将代码当中的每一个流程都去验证一遍。接下来是CodeAnalysis,将刚刚输出的EXPLORER路径转化,进行一些漏洞验证,目前只提供TOD、Timestampdependence、Mishandledexceptions这三种验证,最后系统为了保证误报率和漏报率,采用了微软的Z3Bit-VectorSolver开源的验证器,然后来进行整体架构的一个封装。b.符号抽象分析:SecurifySecurify提供了另外一种方法,智能合约代码容易解耦合,比如Transfer等一些比较固定解耦合的一些结构和模块,因此并不是需要对整个智能合约的逻辑进行的校验,可以对智能合约解耦合的各个模块进行校验分析,从而提高自动化程度。Securify将ContractBytecode转化成一种自定义的语义语言,然后通过自定义的语义语言的验证模块进行验证(类似于模式匹配,将一些漏洞转化成一种验证语言的模式匹配框架,然后去验证其语意是否正确),并生成一个安全报告。特征代码匹配的缺点:1)我们所理解的现在的区块链都应该是公开透明的,但实际情况并不是这样,我们大概做了一个统计,目前代码的开源率仅仅只占48.62%,在以太坊上其实有超过一半的智能合约是不开源的,只暴露它的一个OPCODE,对于OPCODE的分析对于安全人员来说其实也是面临着巨大的挑战,逆向OPCODE需要花费大量的成本,因此使用范围有限。2)漏报率高,智能合约里面的一些函数、特征等等,还是变化性很多的,所以漏报率会比较高。基于形式化验证的自动化检测的缺点:1)适配困难,不同的区块链平台存在多种智能合约开发语言,需要花费大量的精力进行适配。基于符号执行、符号抽象的自动化检测:1)对于Oyente来说,在CFG转EXPLORER验证的时候,需要对每次的循环都进行一个验证,所以说这种分析方法特别耗时,并且也不一定成功。2)Oyente的漏报率很高,对于Parity的钱包代码来说,它的Oyente覆盖率仅仅达到20%,剩下80%的代码,无法进行验证。3)对于Securify来说,虽然降低了漏报率,但是误报率会增加。4)两种方法对于漏洞描述都不精确,无法对漏洞进行准确的描述,不便于修正。以上三类技术共有的缺点:需要人工定义漏洞特征,且只能针对设置好的漏洞进行识别和分析。
技术实现思路
为解决上述
技术介绍
中存在的问题,本专利技术提出一种基于深度学习的智能合约漏洞检测方法,该方法通过深度学习的方法进行漏洞检测,实现了自动化,提高了效率。本专利技术解决上述问题的技术方案是:一种基于深度学习的智能合约漏洞检测方法,其特殊之处在于,包括以下步骤:1)学习训练阶段:针对智能合约代码进行处理,选择合适的神经网络进行训练;2)检测阶段:将需要检测代码进行处理,输入到训练好的神经网络进行检测,得出结果。进一步地,所述步骤1)学习训练阶段,具体包括以下步骤:1.1)针对智能合约漏洞,以此为关键点对智能合约代码进行数据流分析,从合约代码中提取函数调用。数据流分析是一项编译时使用的技术,它能从智能合约代码中收集语义信息,并通过代数的方法在编译时确定变量的定义和使用。然后从函数调用中提取一个或多个智能合约代码分片,代码分片之间是有语义相关的。1.2)将多个代码分片组合成一个程序分片,然后将每个程序分片标记为真实数据,有漏洞的标为“1”,没有漏洞的标为“0”,作为基本事实。真实数据标签是可用的,我们就知道训练程序是否有漏洞,以及漏洞的位置。1.3)将程序分片转化为特定的符号表示,以用来保存训练智能合约代码的语义信息;同时建立符号表,并构建一个编码器,编码器的编码方法传入一行符号,返回一个整数列表,使这些符号转化本文档来自技高网
...

【技术保护点】
1.一种基于深度学习的智能合约漏洞检测方法,其特征在于,包括以下步骤:/n1)学习训练阶段:/n针对智能合约代码进行处理,选择合适的神经网络进行训练;/n2)检测阶段:/n将需要检测代码进行处理,输入到训练好的神经网络进行检测,得出结果。/n

【技术特征摘要】
1.一种基于深度学习的智能合约漏洞检测方法,其特征在于,包括以下步骤:
1)学习训练阶段:
针对智能合约代码进行处理,选择合适的神经网络进行训练;
2)检测阶段:
将需要检测代码进行处理,输入到训练好的神经网络进行检测,得出结果。


2.根据权利要求1所述的一种基于深度学习的智能合约漏洞检测方法,其特征在于:
所述步骤1)学习训练阶段,具体包括以下步骤:
1.1)针对智能合约漏洞,以此为关键点对智能合约代码进行数据流分析,从合约代码中提取函数调用;
1.2)将多个代码分片组合成一个程序分片,然后将每个程序分片标记为真实数据,有漏洞的标为“1”,没有漏洞的标为“0”,作为基本事实;
1.3)将程序分片转化为特定的符号表示,以用来保存...

【专利技术属性】
技术研发人员:王锐叶可江须成忠
申请(专利权)人:中国科学院深圳先进技术研究院
类型:发明
国别省市:广东;44

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

1