一种基于状态锁的智能合约的安全函数的设计方法及系统技术方案

技术编号:21201693 阅读:21 留言:0更新日期:2019-05-25 01:46
本发明专利技术属于区块链安全技术领域,公开了一种基于状态锁的智能合约的安全函数的设计方法及系统,当EVM执行到call函数时,以太坊其余执行路径将被封锁;当call整体执行完毕后,其余路径被打开;当以太坊其余执行路径被封锁时,withdraw被再次请求,EVM将直接拒绝;EVM回到初始状态,完成攻击防御。本发明专利技术利用状态锁控制call函数有效解决重入漏洞;在本发明专利技术中,攻击过后账户b余额中,攻击者仅仅取出了自己在DAO中存储的5个以太币,并没有成功夺取DAO中剩余的50个以太币,因此,可以看出本发明专利技术的库函数成功阻止了重入攻击。

A Design Method and System of Security Function for Intelligent Contracts Based on State Lock

The invention belongs to the field of block chain security technology, and discloses a design method and system of security function of intelligent contract based on state lock. When EVM executes the call function, the rest of the execution paths of EVM will be blocked; when the call is executed as a whole, the rest of the execution paths will be opened; when the rest of the execution paths of EVM are blocked, withdraw will be requested again, and EVM will refuse directly. EVM returns to its initial state and completes attack defense. The invention effectively solves the reentry vulnerability by using the state lock control call function; in the balance of account B after the attack, the attacker only takes out five ether coins stored in the DAO, but fails to successfully capture the remaining 50 ether coins in the DAO. Therefore, it can be seen that the library function of the invention successfully prevents the reentry attack.

【技术实现步骤摘要】
一种基于状态锁的智能合约的安全函数的设计方法及系统
本专利技术属于区块链安全
,尤其涉及一种基于状态锁的智能合约的安全函数的设计方法。
技术介绍
目前,业内常用的现有技术是这样的:重入漏洞:每一个以太坊智能合约都有且仅有一个没有名字的函数,该函数称为fallback函数,当合约接收到以太币时,这个函数会被执行,用于向以太坊表明收到了以太币,攻击者利用这一机制,在fallback函数中,写入攻击的代码,当被攻击合约向恶意合约传送以太币时,以太坊虚拟机EVM就会直接执行攻击者合约的fallback函数,来获取以太币。具体来说攻击者调用withdraw函数取回合约中的以太币,在call将以太币发送给接收方,此时接收方的fallback被EVM调用,fallback里则再次调用Dao的withdraw,但是Dao的余额更新代码一直未被执行(该行代码用于减去调用方在该函数中的余额),也就是说这里就形成了一个循环,withdraw将一直被重复调用,直到Dao的以太币被盗取完为止。综上所述,现有技术存在的问题是:现有技术中,不能有效解决重入漏洞问题。技术人员运用transfer等指令代替call从而避免fallback函数被重复调用,然而从EVM上来说,transfer函数需要消耗更多gas,且不如call函数灵活,所以call函数并不能被完全代替。如果不考虑使用transfer,技术人员只能通过自身经验,在状态量改变后调用call函数,仍然很难预防重入攻击。解决上述技术问题的难度和意义:该技术问题难度:主要在于锁的创建必须在本地建立的library中用结构体存放锁。本专利技术的意义:在于在开发过程中,call函数又能重新被运用,发挥本来的作用,不用担心遭遇重入攻击。
技术实现思路
针对现有技术存在的问题,本专利技术提供了一种基于状态锁的智能合约的安全函数的设计方法,本专利技术是这样实现的,一种基于状态锁的智能合约的安全函数的设计方法包括:步骤一:当EVM执行到call函数时,以太坊其余执行路径将被封锁;步骤二:当call整体执行完毕后,其余路径被打开;步骤三:当以太坊其余执行路径被封锁时,withdraw被再次请求,EVM将直接拒绝;EVM回到初始状态,完成攻击防御。进一步,在EVM进入call函数之前,把锁关闭,当攻击者再次调用withdraw进入_call()时,锁n还处于真状态,断言无法通过,直接退回到原状态,交易失败;当_call完整运行完毕,锁n被打开。进一步,基于状态锁的智能合约的安全函数的设计方法进一步包括:步骤一:编写安全库函数如图2所示;步骤二:编译图2所示的安全函数库;步骤三:其他智能合约函数通过调用安全函数库实现call功能。本专利技术的另一目的在于提供一种实施所述基于状态锁的智能合约的安全函数的设计方法的基于状态锁的智能合约的安全函数的控制系统。本专利技术的另一目的在于提供一种搭载所述基于状态锁的智能合约的安全函数的控制系统的基于状态锁的智能合约的安全函数的安全网络平台。本专利技术的另一目的在于提供一种实现所述基于状态锁的智能合约的安全函数的设计方法的计算机程序。本专利技术的另一目的在于提供一种终端,所述终端实现所述基于状态锁的智能合约的安全函数的设计方法的控制器。本专利技术的另一目的在于提供一种计算机可读存储介质,包括指令,当其在计算机上运行时,使得计算机执行所述的基于状态锁的智能合约的安全函数的设计方法。进一步,本专利技术的所述基于状态锁的智能合约的安全函数包括:在EVM进入call函数之前,把锁关闭,当攻击者再次调用withdraw进入_call()时,第49行的锁n还处于真状态,所以49行断言无法通过,直接退回到原状态,交易失败,预防了攻击,只有当一个_call完整运行完毕,n才会被第52行的代码打开,避免进入重复取币的困境。综上所述,本专利技术的优点及积极效果为:在现有的技术中,技术人员利用transfer代替call来避免被重入攻击,本专利技术从EVM字节码的角度审视transfer函数相对于call函数的弊端:Call函数的字节码:JUMPDESTDUP2PUSHFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFANDDUP2PUSH40MLOADPUSH0PUSH40MLOADDUP1DUP4SUBDUP2DUP6DUP8GASCALLSWAP3POPPOPPOPPOPPOPPOPJUMP[out]transfer函数的字节码JUMPDESTDUP2PUSHFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFANDPUSH8FCDUP3SWAP1DUP2ISZEROMULSWAP1PUSH40MLOADPUSH0PUSH40MLOADDUP1DUP4SUBDUP2DUP6DUP9DUP9CALLSWAP4POPPOPPOPPOPISZEROISZEROPUSH[tag]21JUMPIPUSH0DUP1REVERTtag21JUMPDESTPOPPOPJUMP[out].data0从消耗gas的角度上来讲,transfer函数比call函数消耗更多的gas,所运用的指令更多。其次call仅仅是从头执行到尾,而transfer却有可能执行tag21这一代码块,若这一代码块被执行将消耗更多gas。从字节码可以看出这两个函数是很大不同的函数,实际执行也很不相同,所以用transfer来代替call并不完全合适。本专利技术利用状态锁控制call函数有效解决重入漏洞。在本专利技术中,攻击过后账户b余额中,攻击者仅仅取出了自己在DAO中存储的5个以太币,并没有成功夺取DAO中剩余的50个以太币,因此,可以看出本专利技术的库函数成功阻止了重入攻击;在调用_Call()函数时,需要创建锁及调用开关锁函数,提高了安全性;性价比较高。如果不用该项技术,直接使用call函数,则极容易被盗取以太币,其效果如图7、图8所示。成功盗取了50个以太币。附图说明图1是本专利技术实施例提供的基于状态锁的智能合约的安全函数流程图。图2是本专利技术实施例提供的状态锁代码图。图3是本专利技术实施例提供的被状态锁控制的call函数代码图。图4是本专利技术实施例提供的改进的DAO合约。图5是本专利技术实施例提供的DAO合约与Attack合约的部署情况。图6是本专利技术实施例提供的被状态锁控制的账户b进行重入攻击后的余额状况图。图7是未运用本专利技术DAO合约与Attack合约的部署情况。图8是未运用本专利技术实施例账户b进行重入攻击后的余额状况图。具体实施方式为了使本专利技术的目的、技术方案及优点更加清楚明白,以下结合实施例,对本专利技术进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本专利技术,并不用于限定本专利技术。现有技术中,不能有效解决重入漏洞问题。为解决上述问题,下面结合具体方案对本专利技术的应用原理作详细描述。如图1所示,本专利技术实施例提供的基于状态锁的智能合约的安全函数的设计方法包括:S101:当EVM执行到call函数时,以太坊其余执行路径将被封锁。S102:当call整体执行完毕后,其余路径被打开。S103:当以太坊其余执行路径被封锁时,withdraw被再次请求,EVM将直接拒绝;EVM回到初始状态,完成攻击防御。在本专利技术本文档来自技高网
...

【技术保护点】
1.一种基于状态锁的智能合约的安全函数的设计方法,其特征在于,所述基于状态锁的智能合约的安全函数的设计方法包括:步骤一:当EVM执行到call函数时,以太坊其余执行路径将被封锁;步骤二:当call整体执行完毕后,其余路径被打开;步骤三:当以太坊其余执行路径被封锁时,withdraw被再次请求,EVM将直接拒绝;EVM回到初始状态,完成攻击防御。

【技术特征摘要】
1.一种基于状态锁的智能合约的安全函数的设计方法,其特征在于,所述基于状态锁的智能合约的安全函数的设计方法包括:步骤一:当EVM执行到call函数时,以太坊其余执行路径将被封锁;步骤二:当call整体执行完毕后,其余路径被打开;步骤三:当以太坊其余执行路径被封锁时,withdraw被再次请求,EVM将直接拒绝;EVM回到初始状态,完成攻击防御。2.如权利要求1所述基于状态锁的智能合约的安全函数的设计方法,其特征在于,在EVM进入call函数之前,把锁关闭,当攻击者再次调用withdraw进入_call()时,锁n还处于真状态,断言无法通过,直接退回到原状态,交易失败;当_call完整运行完毕,锁n被打开。3.如权利要求1所述基于状态锁的智能合约的安全函数的设计方法,其特征在于,所述基于状态锁的智能合约的安全函数的设计方法进一步包括:第一步...

【专利技术属性】
技术研发人员:陈中育赵相福林飞龙郑忠龙骆宾逸
申请(专利权)人:浙江师范大学
类型:发明
国别省市:浙江,33

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

1