一种智能合约二进制代码的漏洞检测方法技术

技术编号:29080951 阅读:22 留言:0更新日期:2021-06-30 09:41
本发明专利技术属于区块链智能合约安全检测技术领域,具体涉及一种智能合约二进制代码的漏洞检测方法。面向复杂漏洞类型,本发明专利技术采用动静态结合的检测方法,使用符号执行方法帮助减少模糊匹配方法的开销。针对一般漏洞,本发明专利技术提出基于关键指令的静态检测方法,首先反编译字节码生成控制流图CFG,同时为不同类别的漏洞定义了不同的关键指令及规则,使用Z3约束求解引擎进行符号表达式建模,解决了EVM中数据长度为符号表达式的指令的符号建模问题,并通过提取关键路径生成可能利用漏洞的执行路径。本发明专利技术解决了智能合约漏洞检测技术手段单一、漏洞检测大多针对合约源代码问题,实现了在仅给定一个合约二进制代码的情况下对其进行漏洞检测。检测。检测。

【技术实现步骤摘要】
一种智能合约二进制代码的漏洞检测方法


[0001]本专利技术属于区块链智能合约安全检测
,具体涉及一种智能合约二进制代码的漏洞检测方法。

技术介绍

[0002]以太坊智能合约安全漏洞问题日益重要,目前已被以太坊验证的合约多达百万级别,其中,有上传源码的合约只占了小部分,二进制代码成为以太坊的主流。不同于传统高级程序言语,solidity开发的智能合约有很多自己的特色,比如fallback函数和转账函数。鉴于智能合约的不可篡改,近几年也发生很多针对合约的安全攻击(比如DAO),导致了巨额经济损失。为了解决上述问题,本专利技术提出针对智能合约二进制代码的漏洞检测方法。不同于传统智能合约的静态漏洞检测方法,我们提出基于关键指令识别二进制代码漏洞的检查模式,同时形成静态规则匹配与动态模糊匹配结合的优化策略,实现对逻辑复杂漏洞(比如可重入漏洞)的精准安全检测。
[0003]目前主要的智能合约漏洞检测手段有:形式化验证、模糊测试、符号执行等方法,具体分析:形式化方法的优点在于整个验证过程具有数学逻辑上的完备性,能保证100%的检测精度,缺点在本文档来自技高网...

【技术保护点】

【技术特征摘要】
1.一种智能合约二进制代码的漏洞检测方法,其特征在于,包括以下步骤:步骤1:输入待检测的字节码文件,对字节码文件执行反编译,生成EVM指令及相应的参数;根据反编译后的EVM指令重建控制流图CFG;步骤2:利用A*路径探索算法进行路径探索,生成初步路径集合;步骤3:根据每种漏洞的相应规则对初步路径集合进行逻辑表达式匹配,提取关键路径,生成可能存在漏洞隐患的执行路径;步骤3.1:使用Z3固定大小的位向量表达式对数据长度是固定值的CALL、REVERT、GAS、TIMESTAMP以及NUMBER指令进行建模;以CALL指令为例,使用Z3固定大小的位向量表达式对CALL指令进行建模:α

m
[retOffset+i]

BitVector('instruction_name+i',8)其中,α
m
表示内存存储;BitVector即Z3的位向量表达式;retOffset为CALL指令的第6个参数,表示CALL指令返回数据的内存地址;instruction_name是指令的名称,这里为

CALL

;i为数据长度,从0一直循环到数据总长度,即CALL指令的第7个参数;步骤3.2:使用Z3的If表达式对数据长度为符号表达式的DELEGATECALL、SELFDESTRUCT、CALLDATACOPY、CALLDATALOAD以及CALLVALUE指令进行建模;以CALLDATACOPY为例,使用Z3的If表达式对CALLDATACOPY指令进行建模:α

m
[destOffset+i]

If(i<length,E
I
[offset+i],α
m
[destoffset+i])其中,CALLDATACOPY指令表示将字节从给定的调用数据复制到内存中,它对可变长度数据进行操作,CALLDATALOAD指令会读取CALLDATACOPY指令所复制的数据;E
I
为当前指令执行的符号环境;destOffset、offset、length为CALLDATACOPY指令的前三个参数,分别代表目的数据地址、源数据地址、数据长度;If即Z3的If表达式,i为复制数据的长度,从0循环到length;步骤3.3:可重入漏洞规则匹配;检查路径中CALL指令调用链,...

【专利技术属性】
技术研发人员:庄园高乐孙建国武俊鹏王宝宝
申请(专利权)人:哈尔滨工程大学
类型:发明
国别省市:

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

1