项目背景
The DAO项目是区块链物联网公司Slock.it发起的一个众筹项目。原本该公司只想采用DAO(去中心化自治)来运作自己的系统Universal Sharing Network (USN)。后来发现这个机制也适合其他项目,因此决定创建The DAO,意为“DAO之母”
事件经过
由于智能合约上存在重大缺陷,当时区块链界最大的项目,The DAO被攻击,具体经过如下:
6月15日左右此攻击合约被创立,6月17日攻击开始,Vitalik Buterin得知攻击消息后立刻通知了中国社区
TheDAO监护人提议社区发送垃圾交易阻塞以太坊网络,以减缓DAO资产被转移的速度。
随后V神在以太坊官方博客发布[紧急状态更新:关于DAO的漏洞]公告。解释了被攻击的一些细节以及提出软分叉解决方案,不会有回滚。不会有交
易和区块被撤销。软分叉将从块高度1760000开始把任何与 The DAO和child DAO相关的交易认做无效交易,以此阻止攻击者在27天之后提走被盗
的以太币。这之后会有一次硬分叉将以太币找回。
上文发布后攻击暂停。
以太坊社区的Ethcore团队发布了支持软分叉的Parity客户端。
6月19日自称攻击者的人通过匿名访谈宣布会通过智能合约的形式奖励不支持软分叉的矿工100万以太币和100比特币,来对抗以太坊基金会提议的软分叉。
6月19日攻击又起,但只有少量DAO被分离。
6月22日白帽黑客开展罗宾汉行动将TheDAO资产转移到安全的子DAO中。
随后黑帽黑客(攻击者)开始攻击白帽黑客所创建的为安全转移TheDAO资产的智能合约。
7月20日晚,备受瞩目的以太坊区块链硬分叉已成功实施,中国的以太坊矿池BW.com成功挖得以太坊第192,000个区块,几秒钟过后,该矿池还
挖到了新区块链的首个区块。也预示着由未知黑客持有的价值约4000万美元的以太币,已被转移到了一个新的地址
(0xbf4ed7b27f1d666546e30d74d50d173d20bca754),从而“夺回”黑客所控制的DAO合约的币。从而形成两条链,一条为原链(ETC),一条
为新的分叉链(ETH),各自代表不同的社区共识以及价值观。
攻击方法
攻击者组合了2个漏洞攻击。攻击者利用的第一个漏洞是递归调用splitDAO函数。也就是说splitDAO函数被第一次合法调用后会非法的再次调用自己,然后不断重复这 个自己非法调用自己的过程。这样的递归调用可以使得攻击者的DAO资产在被清零之 前,数十次的从TheDAO的资产池里重复分离出来理应被清零的攻击者的DAO资产。 攻击者利用的第二个漏洞是DAO资产分离后避免从heDAO资产池中销毁。正常情况 下,攻击者的DAO资产被分离后,TheDAO资产池会销毁这部分DAO资产。但是攻击 者在递归调用结束前把自己的DAO资产转移到了其他账户,这样就可以避免这部分 DAO资产被销毁。在利用第一个漏洞进行攻击完后把安全转移走的DAO资产再转回原 账户。这样攻击者做到了只用2个同样的账户和同样DAO资产进行了200多次攻击。