盗走360万枚ETH、改变以太坊历史,回顾这场史上最大链上攻击始末
2 月 22 日,《Unchained》主理人 Laura Shin 在 Forbes 上发文表示,据其发现的相关证据显示,以太坊 2016 年 The DAO 事件中黑客的身份疑似为 TenX 联合创始人兼首席执行官、奥地利程序员 Toby Hoenisch。Laura Shin 表示,根据其对嫌疑人的数据追踪以及区块链分析公司 Chainalysis 的链上分析,她锁定了 TenX 位于新加坡的节点地址。这起 6 年前的史上最大黑客攻击事件,又勾起了很多人的会议。
「当时我看到以太坊创始人 Vitalik 突然发了一句话,说 The DAO 被黑客攻击了,钱正在被黑客拿走,我还以为是玩笑,然后我就懵了。」加密货币钱包 ImToken 的联合创始人 Daniel 说。
360 万 ETH,当时超过 6000 万美金,这是这场影响深远的黑客攻击事件的被盗金额。如果按照 ETH 的历史最高价格计算,360 万 ETH,价值接近 175 亿美金。
价值 6000 万美金的两行代码
直到现在,很多人在想起 6 年前加密行业这起黑客攻击事件时,估计还会心有余悸。
大家都知道比特币是一个安全地记录了所有转账记录的全球账本,可以实现无障碍的点对点转账,以太坊可以看做比特币的 2.0 版本,可以把它看做是一台「全球计算机」,开发者基于以太坊,可以高效、快速地开发出很多上层应用。
在这样一个系统之上,很多致力于解决现实痛点的项目开始出现。当时,这种通过代码自行运作、不依赖个人主观意志的运作方式被很多人追捧,也是在这样的背景下,The DAO 诞生了。
它其实是由一家名为德国初创公司 Slock.it 发起的项目,这家公司当时做的是实体资产的上链业务,但因为很难在传统行业中融资,他们就萌生了一个大胆的想法:既然没人投自己,为什么不造出一个投资机构?
分布式自治组织的理念被他们引入,通过利用合约把一群利益相关者(投资人)把钱放到一起,如果有人拿着商业计划书来寻求融资,所有人投票决定是不是要投资,如果成功了,大家共享收益。
它整个过程,其实是这样运作的:用户向它提起希望获得投资的 proposal,在提案公示后,如果被超过半数以上的用户投票同意,那么这个虚拟「VC」就会拿出一笔钱,投给项目。被投项目需要保证将来其业务会通过这个合约连本带利,持续回馈给这个机构,而「VC」里的每个 LP 都能分到相应的收益。
The DAO 这种完全凭借智能合约运行的方式得到了社区追捧。项目在 2016 年 4 月底开启募资,不到一个月时间,就吸引了 11000 名投资者参与,最终成功募集了 1150 万枚以太坊,这么多数量的 ETH,占到了当时以太坊全网 15% 的流通量,总价值超 1.5 亿美元。也让 The DAO 成为了加密史上募集到以太坊数量最多项目。
但危险的种子,在项目融资大获成功的消息传出时,就悄悄埋下了。
当时,连团队都没想到,项目能融到那么多钱,自信的他们,把所有的 ETH 都放在一个地址里。这是一件非常可怕的事情,稍微有点常识的人都知道,如果你手上有巨额 Token,最好是把 Token 分散存到多个地址,即便丢失了一部分,也不至于荡然无存。
木秀于林风必摧之。The DAO 成了别有用心的黑客攻击的「靶子」。
事实上,早在 2016 年 5 月份,以太坊团队成员就曾呼吁过,这类 DAO 项目可能存在安全问题,并给出了几种可能的攻击方案。6 月 11 日,以太坊另一个项目也发现合约就存在这样的问题,所幸处置及时,没造成损失。
不过,即使团队也收到同样的安全报告后,他们还是没引起重视,以为漏洞不会产生威胁。另外,当时已经有数十个提案等着投票,如果合约暂停进行查验,估计社区也不能接受。
就在所有人自以为万事大吉的时候,危险降临了。
黑客非常聪明,他先在 6 月 15 日悄无声息地写了一个攻击合约,安静地埋伏两天,直到 6 月 17 日才开始行动。利用合约的漏洞,黑客从主合约中成功转出了超 360 万枚 ETH,转入了一个 child DAO 中,这是一种递归式分割的方式,最终将收集到的币单次转走了。
出现问题的是下面两行代码:代码没错,就是顺序反了。
有人分析,如果程序员把两行代码的顺序上下换个位置,各个功能没有变化,但却能避免漏洞产生,没准 The DAO 就成功了。
当然,这也只是美好的幻想,黑客就是利用了这个漏洞,成功转移了 3 百多万枚 ETH,引起了加密社区的轩然大波。
这次攻击,让项目丢失了 360 万枚 ETH,按照当时的价格,总价值超过 6000 万美金,如果按 ETH 历史最高价计算,这笔丢失的资产近 175 亿美金。这个消息很快影响到二级市场,以太坊价格从 20 美金,跌破 13 美元,下跌幅度超 30%。
不过,狡猾的黑客没想到,因为 child DAO 的合约还处在创建阶段,有 27 天的锁定期,所以,他在短时间内也转不走这笔钱。
留给所有人的时间只有短短二十几天,大家必须在这笔钱被转走之前作出决策。
攻击发生后,Vitalik 发了文章,还原了 The DAO 被攻击细节,同时也给出了解决方案。他提议社区对以太坊区块链进行一次软分叉,把与之相关的交易认做无效交易,避免攻击者提走被盗的 ETH。之后,再发起一场硬分叉投票,再将这笔 ETH 找回来。
币还没转走,以太坊社区就放出了这么一个大招,黑客坐不住了。
6 月 18 日,这位自称主导了这场攻击的黑客现身,堂而皇之地发了一封致 The DAO 和以太坊社区的公开信,他表示,自己对社区定义他的行为是「盗窃」非常失望,声称他获得的 ETH 是合法并正当的,「我的律师事务所表示这样的行为完全符合法律」。
不过有人发现,他留下的签名是假的,所以这封公开信可能是有人伪造。
6 月 19 日,一位名为「daoattacker」的用户还在讨论该事件的 slack channel 出没,在一场匿名对话中,他表示会采取措施暂停有组织地对他财产的「盗窃」行为,「很快我们就会制定一个智能合约奖励那些不支持软分叉的矿工,共计 100 万枚以太币和 100 枚比特币。」试图怂恿矿工不支持分叉。有意思的是,他还给讨论区留下地址的人发了几枚 btc。
「黑客」的意思很清楚:不认可以太坊分叉。不过,对于他的辩护,社区大多数人可不会理睬。
很快,以太坊社区发起了一项是否支持硬分叉的投票,近 97% 的 ETH 持有者投出了赞成票,只有少数人不同意分叉,最终硬分叉方案一致通过。
2016 年 7 月 15 日,具体硬分叉方案公布,退币合约开始建立,由于 7 月 21 日是最终期限,硬分叉执行的最终期限确定,超过 85% 的算力支持硬分叉,以太坊硬分叉成功。
如今,我们在回顾这起加密世界的黑客攻击事件时,会发现这场攻击,不仅击垮了 The DAO,还有另一个更糟糕「副作用」:很多人开始怀疑,去中心化自治组织是不是空想,「Code is Law」到底是不是空中楼阁?以太坊社区确实是出于挽回大多数投资者损失的目前,发起了硬分叉投票,并终止了一场攻击的发生。
但从某个角度来看,「黑客」说的不无道理:The DAO 本身就是个智能合约,它的仲裁人是自己,任何其他外部节点都不能改变已经制定好的规则。而以太坊官方的做法则推翻了这种规则。
很多时候,引发黑客攻击的事件可以在开发者编写代码的过程中尽量避免,但加密世界的黑客,能利用的可不仅是一行行代码,还有人为治理中的漏洞。