【技术实现步骤摘要】
一种基于符号执行的智能合约漏洞检测方法
[0001]本专利技术属于网络安全
,涉及一种基于符号执行的智能合约漏洞检测方法。
技术介绍
[0002][0003]然而,智能合约同样带来了严重的安全问题,原因可分为以下三点:一、以太坊智能合约由图灵完备的高级语言Solidity编写,图灵完备虽然意味着更高的智能性,但安全性方面的表现远远不及图灵不完备语言。Solidity语言自身设计的缺陷,以及开发人员在开发过程中引入的错误,都使得智能合约的安全性受到威胁;二、智能合约功能强大,在区块链上不仅仅是一段可自动触发执行的计算机程序,还可以接收和回应消息、收发数字货币,一个合约的执行往往会导致状态变量和账户余额的变化。智能合约包含巨大的经济价值,成为攻击者长期觊觎的目标;三、由于区块链不可更改的特性,智能合约一旦被部署上链,即使由开发人员发现了合约中的漏洞,也无法对其进行更改或升级。
[0004]历史上曾发生过多起智能合约相关安全事件,造成了巨额的经济损失,也损害了人们对区块链的信任,智能合约的安全问题成为研究者和开发者共
【技术保护点】
【技术特征摘要】
1.一种基于符号执行的智能合约漏洞检测方法,其特征及具体步骤如下:S1,对数据集进行分类,根据输入智能合约的文件类型分为Solidity源代码和EVM字节码两种类型;S2,根据字节码和汇编指令的对应关系,将字节码反汇编为EVM指令序列;S3,将EVM指令序列划分为若干基本块,根据基本块之间的跳转关系构建边,构建控制流图;S4,定义关键指令,在控制流图中定位关键指令,根据关键指令在控制流图中提取出关键路径,符号执行搜集到的关键路径,在执行过程中记录关键路径的路径约束;S5,使用约束求解器对关键路径的路径约束进行求解,将约束求解产生的交易实例输出,报告漏洞;S6,在本地网络搭建以太坊私链,创建必要的账户并进行转账,将待验证的合约部署到私链,向合约发送约束求解器产生的交易实例,观察交易结束后合约的账户余额变化,并输出验证结果。2.根据权利要求1所述的一种基于符号执行的智能合约漏洞检测方法,其特征在于,对于步骤S1,本发明需要对输入的智能合约进行分类,如果输入的智能合约是Solidity源码文件,使用编译器对其进行编译,获取并保留编译之后的runtime字节码,如果输入的智能合约是EVM字节码文件,则转入下一步进行反汇编处理。3.根据权利要求1所述的一种基于符号执行的智能合约漏洞检测方法,其特征在于,对于步骤S2,本发明需要将EVM字节码反汇编为EVM汇编指令,以太坊字节码由144个操作码组成,每个操作码被编码为一个字节,以十六进制格式表示,并且每个指令都有固定的参数长度,设计一个字节码和操作码指令的对应表,加上每个指令与其参数长度的对应表,设计一个智能合约字节码反汇编算法,实现由EVM字节码到EVM指令序列的汇编指令生成过程。4.根据权利要求1所述的一种基于符号执行的智能合约漏洞检测方法,其特征在于,对于步骤S3,本发明需要构建控制流图,首先将EVM指令序列划分为基本块,每个基本块以非跳转指令或JUMPDEST指令作为起点,以跳转指令或STOP、RETURN、SELFDESTRUCT指令作为结束,完成基本块的划分之后,根据指令间的跳转关系初步构建边,EVM只提供间接跳转的控制流指令,无条件跳转指令JUMP和有条件跳转指令JUMPI都读取栈顶元素以确定跳转地目标地址,有些情况下,跳转目标可以简单访问获取,但在其他情况下,跳转指令的跳转目标在函数调用前就被写入栈中,因此不可直接访问,对此,本发明采用后向切片法迭代重建控制流图,最初,控制流图只包含简单的边,连接这些边的JUMP指令和JUMPI指令被标记为已访问,其他的JUMP指令和JUMPI指令被标记为未访问,接下来,选择一个未被访问的JUMP指令或JUMPI指令,计算其跳转目标的后向切片集,如果能够找到一个完整的后向切片,就执行该切片上的指令集,计算出跳转目标,此时,一条新的边会被加入到控制流图中,对应的JUMP指令或JUMPI指令被标记为已访问,由于引入新的跳转关系可能会导致构建的控制流图子图中出现新的跳转指令,因此该控制流图子图中的所有的跳转指令再次标记为未访问,重复上述过程,直到所有的跳转指令都被标记为已访问。5.根据权利要...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。