为什么会有ETH和ETC?the DAO攻击事件2周年祭

image

前两天,跟一位HiBlock区块链社区的用户私聊,他问我一个问题,同样是智能合约,为什么会有以太坊和以太经典,又为什么会有相应的ETH和ETC,两者价格还相差如此之大。

转给他一篇the DAO事件的文章后突然发现,the DAO攻击事件已经过去2年了,今年的6月17日大家都在关注父亲节、端午节以及德国和墨西哥队的比赛爆冷,无论币圈还是链圈,没有人提及the DAO。

也许今年的6月17日有人因重注墨西哥队而大赚一笔,但无论如何也比不上2年前6月17日黑客攻击the DAO转走了300多万以太币资产,当时价值6千万美元,而以今年6月18日的ETH价格计算,则价值15亿美元。

1

the DAO攻击事件回顾

DAO代表的是去中心化自治组织,是区块链法则里不可少的一环,而the DAO含义为“DAO之母”,是建立在以太坊上的一个应用,功能类似于投资机构。参与者可以使用以太币来换取DAO,也就是the DAO的token,持有DAO可以对the DAO的投资决策提出自己的意见。

the DAO在2016年5月初成立,到2016年6月16日成功募集到在当时价值1.5亿美元的以太币,短期高速发展让the DAO成为了一个明星项目,但6月17日发生了黑客攻击事件,事件的根本原因在于一行早已被发现的代码漏洞。

康奈尔大学计算机科学系副教授Emin Gün Sirer在给他的一位学生发邮件时提到他正在研究智能合约第666行代码可能存在的问题,甚至在2016年5月份也呼吁过投资者停止对DAO的投资,因为存在这样的安全漏洞。

但是,Gün教授对于代码漏洞无能为力,因为代码发布在以太坊区块链上就无法修改。事实上,发现这行代码漏洞的并不止Gün教授,2016年6月9日,在互联网上出现了与这次黑客攻击相同手法的预警,6月10日智能合约语言Solidity的作者 Christian在以太坊官方博客上发表文章说明这个问题,the DAO团队也接到了安全报告,但做出了不会受到攻击的结论。

2

the DAO被攻击的手段

说起the DAO被攻击的手段需要讲一下the DAO的运行机制。the DAO社区的每一位成员都可以利用自己手中的DAO进行投票,那么就会有一个问题,持有DAO数量越多,投票的占比就越大,会让投资决策出现偏颇,导致基金运行亏损。

所以the DAO就设计了一个“子DAO”的机制,你可以申请创建一个子DAO,审查通过后你的DAO就可以通过代码自动打入子DAO,从总资金池中剥离出来,而攻击漏洞也由此开始。

正常情况下你的DAO打入子DAO后就会从总的资金池中删除掉,但是看下图这行代码,里面的withdrawRewardFor是将钱从总dao打到你的子dao合约,注意前面提到的fallback函数,发送金额到你子dao合约时会触发fallback函数,但是如果你特别写了fallback是再调用总dao的withdrawRewardFor呢?代码会重新运行withdrawRewardFor再给你打钱,而扣钱的代码就永远不会运行到,如果你想,可以将总资金池中的DAO全部转空。

image

攻击者组合了2个漏洞,第一个漏洞是递归调用splitDAO函数,在第一次被合法调用后,会再次非法调用自己的DAO;第二个漏洞是DAO资产分离后避免从总资金池中销毁,攻击者在递归调用结束前将自己的DAO资产转移到了其他账户,就可以避免这部分DAO资产被销毁。

3

the DAO被攻击后的补救措施

那么,the DAO被攻击后,是如何应对解决的呢?在攻击事件发生后,攻击者并不能马上转走这些资产,而是有一个28天的等待期,在这28天里白帽黑客登场,V神提出方案,目的是要阻止黑客转出这些资产。

事件发生后,以太坊创始人Vitalik在以太坊官方博客发布文章,提出以软分叉的方案解决这次事件,软分叉将从高度1760000开始把任何与the DAO和child DAO相关的交易认做⽆效交易,以此来组织攻击者提现,软分叉之后会进行一次硬分叉找回被转走的以太币。

但因为软分叉的方案需要取得矿工们的同意,方案发布后黑客攻击者暂停了攻击,宣布对不支持软分叉的矿工给与100万以太币奖励。当然,软分叉方案还是顺利通过了,以太坊官方推出了针对TheDAO的软分叉版本Gethv1.4.8,但这个软分叉版本却又一次出现了漏洞。

这个漏洞比较明显,简单地说,每个以太坊上的交易,验证节点(矿工)都会检查是否与TheDAO智能合约及其子DAO的地址相关。如果是则拒绝这个交易,从而锁定TheDAO(包括黑客在内)的所有资金。这个逻辑实现本身并没有问题,但是却没有收取执行交易的手续费,这就像节假日高速免费一样,导致以太坊成为了DoS的攻击目标,攻击者可以零成本发起大量交易,导致以太坊网络瘫痪,由此各个节点回滚了软件版本,软分叉方案宣告失败。

之所以提出软分叉,是为了避免回滚,软分叉失败后只能进行硬分叉,而距离黑客可以转出提现的时间只有2周,同时还要进行所有矿工的投票来通过这次硬分叉方案。最终有大约450万以太币参与了投票,近90%表示同意硬分叉。程序预设在1920000个区块时进行切换,2016年7月20日晚,第1920000个区块在中国产生,TheDAO合约里的所有资金,包括被黑客控制的资金,约1200万以太币,全部转移到了一个新的智能合约中,该合约只有一个功能:退回TheDAO众筹参与人的以太币,众筹参与人只要调用withDraw方法,就可用DAO币换回以太币。

4

the DAO事件的影响

硬分叉之后,被盗的币找回来了,同时以太坊分为了两个链,一条为原链(ETC),一条为新的分叉链(ETH),也就有了现在的ETC(以太经典)和ETH(以太币)两种TOKEN,分别代表新旧社区的共识和价值观。

对于the DAO来说,这次事件无疑意味着项目的终结,甚至直接关联到2017年7月,美国证券交易委员会发布报告时提出,DAO提供和出售的代币是证券,因此受联邦证券法的约束,DAO违反了联邦证券法,所有的投资者也违法了。

5

为什么ETH和ETC会同时存在

两年过去了,当初硬分叉产生的ETH和ETC仍然同时存在,虽然ETH在2018年6月18日的价格不到100人民币,远不及ETC3200人民币,但ETH仍然代表了一部分人对区块链的共识和价值观。

在当初硬分叉投票时,有大约10%的投票参与者反对硬分叉,这部分矿工仍然维持着旧链的算力,他们认为不能为了一己私利就随意篡改代码,代码就是法律,这才是去中心化不可篡改的真谛,而硬分叉代表着代码可以随意修改,决策仍然是中心化的。

而随后,P网宣布支持旧版以太币的交易,代号为ETC,由于价格低,有愿意冒风险的投资人买入,但由于支持人数少,并且依托于旧链的项目少,更新少等问题,价格一直不能和ETH相比。但ETC和ETH代表了区块链世界里的两种价值观。

6

两年过去了,*the DAO带给我们什么思考*

距离the DAO攻击事件已经过去了2年,这次事件让我们认识到区块链应用安全的重要性。the DAO被攻击的漏洞是项目本身产生的,与智能合约无关,就像某一个网站出现了bug,不能说是互联网技术的问题一样。

2年里,类似这样的安全事故还有很多,2017年Parity钱包漏洞导致15万个ETH被盗,导致几家公司的ICO受阻,当时价值约三千万美元。此外还有类似于CoinDash ICO攻击、Enigma项目欺诈、Tether代币攻击、比特币黄金欺诈以及EOS上线前被发现的安全漏洞。

关于区块链安全,一直是一个绕不开的话题,传统互联网上是信息的存储和传递,而区块链的信息中,包含了大量与金融相关的数据,我们可以不在乎个人信息被各种“贩子”们倒来倒去,但我们不可能不在乎自己银行账户里的钱被随意转来转去。

区块链的去中心化特点带给我们很多未来应用的场景和创意,但去中心化组织在管理逻辑和生态上更加复杂,也就意味着更加容易出现漏洞。

区块链的基础架构由数据层、网络层、共识层、激励层、合约层、应用层六部分组成,技术本身的安全需要做好这六个方面的防护体系,而除了技术本身,还有类似于the DAO事件这样由于代码漏洞产生的安全问题,需要每一个区块链开发者来维护安全,这该如何做到?是否又能有一个公链或组织来保护区块链应用的安全呢?这个问题,欢迎加入HiBlock区块链社区用户群进行讨论。

以下是我们的社区介绍,欢迎各种合作、交流、学习:)

image

猜你喜欢

转载自blog.csdn.net/HiBlock/article/details/80735663