当前位置: 首页 > 专利查询>烟台大学专利>正文

一种智能合约安全漏洞检测方法和系统技术方案

技术编号:39407834 阅读:9 留言:0更新日期:2023-11-19 15:59
本发明专利技术涉及网络安全技术领域,具体为一种智能合约安全漏洞检测方法和系统,将智能合约字节码反编译处理为三地址码形式的中间语言,并构建智能合约的控制流图,提取控制流图的语义信息并存储为Datalog事实,以更好地表示智能合约的数据和控制流依赖关系,基于Datalog事实定义前提条件,获得Datalog规则,提供漏洞分析框架,分析智能合约的经典漏洞特征,定义漏洞检测逻辑,将漏洞检测逻辑和Datalog规则结合,检测智能合约,输出漏洞检测结果,该检测方法采用静态程序分析,能够无需执行合约就可以达到比较高的覆盖率,从而检测更多的漏洞,具有低漏报率和高准确率的效果。具有低漏报率和高准确率的效果。具有低漏报率和高准确率的效果。

【技术实现步骤摘要】
一种智能合约安全漏洞检测方法和系统


[0001]本专利技术涉及网络安全
,具体为一种智能合约安全漏洞检测方法和系统。

技术介绍

[0002]以太坊是一种广泛持有的加密货币,均基于区块链技术实现去中心化。以太坊内置图灵完备的编程语言,允许创建任意的应用程序,这些程序被称为智能合约。以太坊的图灵完备性使智能合约的应用场景逐渐丰富,在金融领域,智能合约控制数字资产,使智能合约的安全性不可避免地成为人们重点关注的对象。此外,智能合约永久地部署在区块链上,并且一旦部署便不可更改,再加上编写智能合约语言的不稳定性以及合约自身功能逻辑的复杂性,因此不可避免的存在软件漏洞。
[0003]智能合约漏洞一旦被利用,就可能造成巨大的经济损失。为防止今后发生攻击事件,越来越多的研究人员参与到优化和检测智能合约的研究中,开发了各种工具和框架检测智能合约漏洞。现有技术中,使用基于符号执行技术设计了第一个检测智能合约漏洞的工具——Oyente,能够很好地发现合约中的漏洞,但是该技术存在路径爆炸的问题,并且不易扩展,漏报率较高;基于逻辑驱动的静态安全分析框架——Vandal,虽然能够对合约的数据、控制流进行分析,但是并没有检测时间戳依赖、委托调用以及交易顺序依赖等重要安全漏洞问题,而且还存在漏报率高,检测准确度低的问题。

技术实现思路

[0004]本专利技术的目的是提供了一种智能合约安全漏洞检测方法和系统。
[0005]本专利技术技术方案如下:
[0006]一种智能合约安全漏洞检测方法,包括如下操作:<br/>[0007]S1:将智能合约字节码经过反编译处理,得到三地址码形式的中间语言,将所述中间语言分割成若干基本块,根据跳转指令解析若干基本块之间的跳转关系,基于所述跳转关系,创建每个基本块的前继列表和后继列表,将每个基本块连接起来,得到控制流图;
[0008]S2:提取所述控制流图中的合约信息,将所述合约信息以逻辑关系形式进行存储,获得Datalog事实;
[0009]S3:基于所述Datalog事实,定义前提条件,获得Datalog规则,所述Datalog规则结合漏洞检测逻辑,分析智能合约,检测智能合约安全漏洞。
[0010]如上所述的智能合约安全漏洞检测方法,所述反编译的操作具体为:将所述智能合约字节码转换成对应的EVM指令,基于所述EVM指令,生成三地址码指令,将所述三地址码指令添加到三地址码序列中,经过堆栈处理,得到所述三地址码形式的中间语言。
[0011]如上所述的智能合约安全漏洞检测方法,所述S3中定义前提条件包括定义指令条件和变量条件;
[0012]所述指令条件包括:指令的功能条件、指令执行顺序条件、指令间相互控制条件,指令执行的变量条件、指令检查条件,指令更改合约条件;
[0013]所述变量条件包括:变量的取值条件、变量之间的相互关系、变量可被外部操控的条件。
[0014]如上所述的智能合约安全漏洞检测方法,所述S3中的漏洞检测逻辑为:所述智能合约中存在不受gas限制的用于传输虚拟货币的CALL指令的外部调用,所述外部调用之前没有使用布尔锁进行保护,也没有更新存储变量;
[0015]所述漏洞检测逻辑结合所述Datalog规则,分析所述智能合约,检测所述智能合约中的重入漏洞。
[0016]如上所述的智能合约安全漏洞检测方法,所述S3中的漏洞检测逻辑为:所述智能合约中存在用于传输虚拟货币的CALL指令的外部调用,所述外部调用的结果能被JUMPI指令检查,且所述智能合约的状态变量的更新依赖所述外部调用的结果;
[0017]所述漏洞检测逻辑结合所述Datalog规则,分析所述智能合约,检测所述智能合约中的拒绝服务漏洞。
[0018]如上所述的智能合约安全漏洞检测方法,所述S3中的漏洞检测逻辑为:所述智能合约中存在SELFDESTRUCT指令,所述SELFDESTRUCT指令的参数是外部可操纵的,且SELFDESTRUCT指令的执行不受保护;
[0019]所述漏洞检测逻辑结合所述Datalog规则,分析所述智能合约,检测所述智能合约中的自毁漏洞。
[0020]如上所述的智能合约安全漏洞检测方法,所述S3中的漏洞检测逻辑为:所述智能合约中存在DELEGATECALL调用,所述DELEGATECALL调用的目标地址是外部可操纵的,或DELEGATECALL调用的目标函数是外部可操纵的;
[0021]所述漏洞检测逻辑结合所述Datalog规则,分析所述智能合约,检测所述智能合约中的委托调用漏洞。
[0022]如上所述的智能合约安全漏洞检测方法,所述S3中的漏洞检测逻辑为:所述智能合约中存在TIMESTAMP操作码,所述TIMESTAMP操作码与JUMPI指令存在依赖关系;
[0023]所述漏洞检测逻辑结合所述Datalog规则,分析所述智能合约,检测所述智能合约中的时间戳依赖漏洞。
[0024]如上所述的智能合约安全漏洞检测方法,所述S3中的漏洞检测逻辑为:所述智能合约中存在用于传输虚拟货币的CALL指令的外部调用,所述外部调用发送的金额依赖存储变量的值,且所述存储变量的值可以被其它函数更改;
[0025]所述漏洞检测逻辑结合所述Datalog规则,分析所述智能合约,检测所述智能合约中的交易顺序依赖漏洞。
[0026]一种智能合约安全漏洞检测系统,包括:
[0027]控制流图生成模块:用于将智能合约字节码经过反编译处理,得到三地址码形式的中间语言,将所述中间语言分割成若干基本块,根据跳转指令解析若干基本块之间的跳转关系,基于所述跳转关系,创建每个基本块的前继列表和后继列表,将每个基本块连接起来,得到控制流图;
[0028]Datalog事实生成模块:用于提取所述控制流图中的合约信息,将所述合约信息以逻辑关系形式进行存储,获得Datalog事实;
[0029]检测智能合约安全漏洞模块:基于所述Datalog事实,定义前提条件,获得Datalog
规则,所述Datalog规则结合漏洞检测逻辑,分析智能合约,检测智能合约安全漏洞。
[0030]本专利技术的有益效果在于:
[0031]本专利技术提供了一种智能合约安全漏洞检测方法,将智能合约字节码反编译处理为三地址码形式的中间语言,并构建智能合约的控制流图,提取控制流图的语义信息并存储为Datalog事实,以更好地表示智能合约的数据和控制流依赖关系,基于Datalog事实定义前提条件,获得Datalog规则,提供漏洞分析框架,分析智能合约的经典漏洞特征,定义漏洞检测逻辑,将漏洞检测逻辑和Datalog规则结合,检测智能合约,输出漏洞结果,该检测方法采用静态程序分析,能够无需执行合约就可以达到比较高的覆盖率,从而检测更多的漏洞,具有低漏报率和高准确率的效果。
附图说明
[0032]通过阅读下文优选实施方式的详细描述,本申请的方案和优点对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种智能合约安全漏洞检测方法,其特征在于,包括如下操作:S1:将智能合约字节码经过反编译处理,得到三地址码形式的中间语言,将所述中间语言分割成若干基本块,根据跳转指令解析若干基本块之间的跳转关系,基于所述跳转关系,创建每个基本块的前继列表和后继列表,将每个基本块连接起来,得到控制流图;S2:提取所述控制流图中的合约信息,将所述合约信息以逻辑关系形式进行存储,获得Datalog事实;S3:基于所述Datalog事实,定义前提条件,获得Datalog规则,所述Datalog规则结合漏洞检测逻辑,分析智能合约,检测智能合约安全漏洞。2.根据权利要求1所述的智能合约安全漏洞检测方法,其特征在于,所述反编译的操作具体为:将所述智能合约字节码转换成对应的EVM指令,基于所述EVM指令,生成三地址码指令,将所述三地址码指令添加到三地址码序列中,经过堆栈处理,得到所述三地址码形式的中间语言。3.根据权利要求1所述的智能合约安全漏洞检测方法,其特征在于,所述S3中定义前提条件包括定义指令条件和变量条件;所述指令条件包括:指令的功能条件、指令执行顺序条件、指令间相互控制条件,指令执行的变量条件、指令检查条件,指令更改合约条件;所述变量条件包括:变量的取值条件、变量之间的相互关系、变量可被外部操控的条件。4.根据权利要求1所述的智能合约安全漏洞检测方法,其特征在于,所述S3中的漏洞检测逻辑为:所述智能合约中存在不受gas限制的用于传输虚拟货币的CALL指令的外部调用,所述外部调用之前没有使用布尔锁进行保护,也没有更新存储变量;所述漏洞检测逻辑结合所述Datalog规则,分析所述智能合约,检测所述智能合约中的重入漏洞。5.根据权利要求1所述的智能合约安全漏洞检测方法,其特征在于,所述S3中的漏洞检测逻辑为:所述智能合约中存在用于传输虚拟货币的CALL指令的外部调用,所述外部调用的结果能被JUMPI指令检查,且所述智能合约的状态变量的更新依赖所述外部调用的结果;所述漏洞检测逻辑结合所述Datalog规则,分析所述智能合约,检测所述智能合约中的拒绝服务漏洞。6.根据权利要求1所述的智能合约安全漏洞检测方法,其特征在于,所述S3中的漏...

【专利技术属性】
技术研发人员:赵相福陈海悦刘兆伟赵金东王奕辰何龙甄子贤
申请(专利权)人:烟台大学
类型:发明
国别省市:

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

1