【技术实现步骤摘要】
一种智能合约二进制代码的漏洞检测方法
[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指令调用链,...
【专利技术属性】
技术研发人员:庄园,高乐,孙建国,武俊鹏,王宝宝,
申请(专利权)人:哈尔滨工程大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。