大家好,欢迎收听众享区块链大讲堂,今天我们要讲的是安全漏洞防范。
上节课,我们介绍了什么是智能合约以及智能合约能够做什么。我相信,大家对智能合约都有了一定的了解。本节课我们会介绍智能合约存在的安全漏洞以及防范措施。
历史教训
接触过链圈的人,应该都知道以太坊。在区块链的发展中,以太坊的出现可以说是继比特币之后的又一个里程碑。因此,以太币的价值,也在不断的暴涨。暴利刺激之下,便出现了利用安全漏洞盗取以太币的行为。其中比较著名的是TheDAO事件,该事件导致了以太坊硬分叉,以太坊直接撕裂成了ETH和ETC。
北京时间2016年6月17日,由于TheDAO编写的智能合约存在重大缺陷,作为区块链业界最大的众筹项目被攻击(被攻击前拥有1亿美元左右资产),导致数万以太币资产被分离出TheDAO 资产池。
这是由于TheDAO编写的智能合约中有一个splitDAO函数,用于从资金池中分离出资产,攻击者重复利用此函数中的漏洞,不断从TheDAO项目的资产池中分离DAO资产给自己。
攻击者组合了2个漏洞攻击
攻击者利用的第一个漏洞是递归调用splitDAO函数,也就是说splitDAO函数被第一次合法调用后会非法的再次调用自己,然后不断重复这个自己非法调用自己的过程。这样的递归调用可以使得攻击者的DAO资产在被清零之前,数十次的从TheDAO的资产池里重复分离出来理应被清零的攻击者的DAO资产。
攻击者利用的第二个漏洞是DAO资产分离后避免从TheDAO资产池中销毁。正常情况下,攻击者的DAO资产被分离后,TheDAO资产池会销毁这部分DAO资产。但是攻击者在递归调用结束前把自己的DAO资产转移到了其他账户,这样就可以避免这部分 DAO资产被销毁。
在利用第一个漏洞进行攻击后,再利用第二个漏洞把安全转移走的DAO资产再转回原账户。仅仅这样,攻击者就做到了只用2个同样的账户和同样DAO资产,进行了200多次攻击,获得了巨额财产。
那么智能合约在那些场景下存在漏洞呢?
安全漏洞
(1)在发起以太坊转账交易时,如果将所有余额作为转账金额,会因为gas(相当于交易费用)过少而导致交易失败。这种情况下,如果接收方地址是一个合约地址,而不是一个普通钱包地址的话,攻击者可以通过一个漏洞攻击合约进行多次退款……
领取专属 10元无门槛券
私享最新 技术干货