区块链入门(14) — 以太坊的漏洞危机

《区块链入门(14) — 以太坊的漏洞危机》

上一篇文章我们谈到了以太坊的扩容问题来解决网络系统的拥堵问题,利用”分片“技术的法宝来解决以太坊的吞吐量问题和提高信息处理的效率,而今天,我们来聊聊以太坊的 代码漏洞: 智能合约之殇 。

《区块链入门(14) — 以太坊的漏洞危机》

1. TheDAO事件的背景

提起TheDao事件,不得不说以太坊,因为这个事件就是以太坊发展过程中发生的一起安全事故。这起安全事故也算是以太坊的一件“丑闻”了,也直接导致了以太坊的硬分叉: 以太坊经典(ETC) 和 以太坊(ETH) 。 

距 TheDAO 事件发生已经3年时间,TheDao攻击,从本质上来说是一个技术失误,但是从加密经济学上来看问题的话,也许更像一个系统问题,甚至可以是哲学问题。 

大家都知道以太坊是区块链的二代技术,与比特币这种一代技术相比,它多了智能合约,我们之前也介绍过智能合约,是可以让开发人员自定义编写所需功能的一种跨越性创新。 

人们可以在以太坊上创建数字货币(可以任由你命名的数字货币)、众筹合约(类似一个公开透明的基金账户)、自治管理组织(如创建一个租赁公司/合作翻译公司等),以太坊这些功能的拟定吸引了人们极大的关注和兴趣。因此,就有人通过这些技术的特征创建了一份众筹合约,这就是TheDao事件的开始。 

《区块链入门(14) — 以太坊的漏洞危机》

2.  DAO与TheDAO的区别

我们先大概了解一下,DAO和TheDAO其实是不同的概念: 

DAO是指去中心自治组织,是V神提出的一个概念。这个去中心组织,依靠智能合约在区块链上运行,没有法律实体,我们可以把它理解成“去中心化的公司”。

TheDAO是通过这种技术创建并运行在以太坊的一个智能合约,是由德国初创公司Slock.it开发建立的众筹项目,这种众筹合约一度融资众筹达到1.5万亿美元,每个参与众筹的人向众筹合约投资以太币,并且根据出资金额获得相应的DAO代币,出资人具有审查项目和投票表决的权利。 

简单的介绍一下这个Slock公司,是一家将区块链与物联网相结合的公司。一开始,他们只是想利用以太坊来开发他们的“全民分享网络”。随着开发的深入,他们发现,去中心分享经济很有前景。于是,就有了TheDAO项目。

3.  TheDAO攻击的事情经过

先来说说TheDAO是如何运作的: 

1. 一组人来编写运行组织的智能合约(程序)2. 到了初始融资阶段,在这一阶段人们添加资金来购买代币,来代表其所有权——这个过程叫做众销,或者首次代币发行(ICO)——为其提供所需资源。3. 当融资阶段结束后,DAO就开始运行。4. 之后人们就开始向DAO谏言献策该如何使用这笔钱,购买DAO的成员就有资格对这些提案进行投票。

在The DAO项目中,代币的持有人拥有很大的权力,比如项目资金的用途需要代币持有人投票决定,相关的提议由智能合约支撑。

创始人们都想创建一个真正的“DAO”,一个真正去中心化自治组织。

《区块链入门(14) — 以太坊的漏洞危机》

在2016年4月30 日,TheDAO项目开始众筹。项目代币DAO,众筹时间为期28天,代币价格大约是100个DAO兑换1至1.5个以太坊。The DAO项目总共筹到了超过1200万个以太坊,几乎占到了当时以太坊数量的14%,当时价值超过1.5亿美金,参与众筹的人数超过11000人。 

TheDAO是当时最大的众筹项目。项目刚开始就呈现了一片火爆繁荣的场景,市场对此很乐观,等众筹结束后,各交易所开始纷纷上架DAO代币。 

《区块链入门(14) — 以太坊的漏洞危机》

因此,由于这个项目众筹的资金非常庞大,很快就被黑客盯上了。

在6月12日宣布,他们发现了软件中存在“递归调用漏洞”问题。不过,这对DAO资金来说,不会出现风险。或许是众筹的成功让人们放松了警惕,人们已经迫不及待地等待The DAO开始应用了。当时,超过50个项目提案在等The DAO代币的持有者投票。

在6月17日,黑客利用The DAO代码里的一个递归漏洞,不停地从The DAO 资金池里分离资产;随后,黑客利用了The DAO的第二个漏洞,避免分离后的资产被销毁。(如果是正常情况,The DAO的资产被分离之后,就会被销毁。但是,黑客在调用结束前,把盗来的The DAO资产转移到了其他账户,避免了被销毁。)

最后,黑客利用这两个漏洞,进行了两百多次攻击,总共盗走了360万的以太坊,超过了该项目筹集的以太坊总数目的三分之一。

这个问题发生后,TheDAO监护人立即提议社区发送垃圾交易阻塞以太网网络,减缓TheDAO资产被转移出去的速度。 

在2016年7月,以太坊官方修改了以太坊的源码,在区块高度1920000强行把TheDAO以及其子DAO资金转移到了另一个合约地址,通过这种方式夺回被攻击者控制的DAO合约中的币,但是这样却导致了以太坊发生了分叉, 形成两条链: 一条原始的区块链(ETC),还有一条分叉出来的新的链(ETH)。 

4.  TheDAO事件教训

1、智能合约的安全问题还需要通过实践来改进,这个领域还处于早期阶段。 不用说,这个行业才刚刚起步,有太多的东西需要发展,事情得一步一步来。

2、对于未知事物要时刻保持警惕。 现在已经有不少安全方面的工具可用,我们团队也知道很多攻击手段,问题就在于,编写The DAO代码的时候没人意识到这点。

3、以太坊的工具还不成熟。 格式证明验证工具,在当时还没有开发出来。随着The DAO事件的出现,促进了这些安全工具的开发。

4、去中心化系统的治理和投票机制需要改进。 提交意见来指导去中心化软件的工具还没有开发出来,而中心化的论坛,比如Reddit,并不适合去中心化系统。

5、逐步发布产品。 The DAO在发布的时候应该更谨慎一些,逐步的推出。类似的项目在推出的时候保留部分的中心化,逐步去中心化。

6、复杂性最小化。 The DAO的代码有663行,根据统计数据,每1000行代码就会有15-50个Bug,所以,智能合约代码要尽可能简单。 

《区块链入门(14) — 以太坊的漏洞危机》 【总结】

我人认为,TheDAO事情当成是以太坊公有区块链的新纪元的标志。让大家意识到智能合约的不断建立在上面的应用逐渐伴随着许多风险,同时相关的法律法规建设以及监管制度也待建立。一个新兴事物在遭受破坏的同时,也推动着其技术的不断升级发展。因此,我认为,未来智能合约的前途还是非常可观的。

点赞