The DAO攻击(上)

in blockchain •  4 years ago 

The DAO


区块链技术使得比特币实现了超主权的去中心化的数字货币,也让以太坊实现了去中心化的智能合约。比特币和以太坊展现出来的价值已经是皆然难否的存在了,既然由区块链技术带来的去中心化的特性有这么多优势,大家就想:为什么不把所有东西都变成去中心化的? 所以,有人就提出了 DAO 这个概念。

DAO: Decentralized Autonomous Organization 去中心化的自治组织

传统的组织都是建立在某种法律文件上的,有时候还需要到政府去登记注册。比如你在民间搞了某个行业协会,你是需要拿着你的章程去当地民政局登记注册的,这样你才能合法地开展协会的活动。而在区块链世界中,DAO 这种组织是建立在代码基础上的,所有的章程规则都用代码写死在区块链中,通过区块链中的共识协议来共同维护规章制度地正常执行。

于是,在2016年5月份,出现了一个致力于众筹优质项目的 DAO,它的名字就叫做The DAO

The DAO本质上是一个运行在以太坊系统上的智能合约,主要工作就是筹集大家的以太币,然后用筹集得来的以太币去投资那些经过大部分The DAO成员投票同意的项目。这有点像一个私募基金,只不过这个基金的投资决策不是发起基金的几个核心成员决定的,而是持有基金份额的所有人都有权投票。事实上,这是一种非常民主的基金。

正因为The DAO这种民主的运行机制,所以一经推出就引起了以太坊社区非常大的轰动,大家都认为The DAO是一次伟大地创新尝试。进而,The DAO在一个月的时间就成功募集到了当时价值1.5亿美金的以太币,这些以太币如果放到现在,价值已经有大几十亿美金了。

The DAO筹集资金的规模和速度都是历史上非常罕见的,所有人都对The DAO寄予厚望,有人甚至认为The DAO在3-5年内的影响力会超过以太坊本身。遗憾地是,The DAO没能等到那一刻,它仅仅只存活了3个月时间。

成也代码,败也代码


这不由得让人思考,The DAO问题出在哪?

想要弄清楚这个问题,我们首先需要知道The DAO的资金流向。一般来说,如果你认为The DAO是一个非常好的项目,你想要参与进去,这时候你需要将你的以太币打进The DAO这个智能合约中,然后The DAO会给你发放The DAO的代币,作为今后投票的凭证。

假设有一天,你需要用钱了,你需要赎回放到The DAO中的以太币,那么在The DAO这个智能合约中是以拆分代币(spilt DAO)的形式实现的。spilt DAO 实际上是以建立子基金(child DAO)的方式拿回自己的以太币的,这也是投资者拿回自己本金和收益的唯一方式。

The DAO设计理念的精彩之处就在于spilt DAO和child DAO,正是因为这两种机制才体现出了The DAO的民主性。换句话说,如果The DAO少部分成员中如果不同意大多数成员同意决定的项目,可以退出自己的以太币,然后在The DAO这个智能合约中建立自己的基金去投其他的项目,这个拆分出来的子基金甚至可以只有你一个人。这样一来,The DAO就做到了充分考虑到了甚至每一个成员的意见。

在拆分DAO时,有7天的讨论期,就是社区成员在这段时间内可以讨论目前这个拆分是否合理,是否需要加入等话题;而子基金建立之后,进入子基金的所有以太币会有28天的锁定期。后面我们会介绍到,正是这28天的锁定期,给了以太坊核心开发团队进行补救的宝贵时间。

实际上,拆分的理念并没有错,而且是诠释民主的一种切实可行的非常好的一种方式。在这里,我们顺便提一下民主。

民主不是绝对的少数服从多数,而是也要尊重少部分人选择的权利。

如果拆分的理念没有错的话,到底哪里出问题了呢?

后来发现,问题出现在了spilt DAO的具体实现上。接下来,我们一起看下spilt DAO的代码。

图片

代码的具体逻辑我就不介绍了,这样会显地很枯燥,大家可能也不会感兴趣,我直接说下这段代码是在干什么。

这段代码就干了一件事儿,就是将钱转给了调用这个函数的人。问题就出在上图中指向地那一条语句,这条语句的意思是将调用者账户的余额清零。这样做本来没什么问题,只是这段代码将这条语句的位置放错了,它是在将钱转出去之后才清零的,这就给了黑客进行重入攻击的口子。什么是重入攻击呢?给了黑客进行重入攻击的口子。什么是重入攻击呢?

简单来说,重入攻击就是调用者可以写一个循环语句无限次调用这个函数。在这里,调用者就是进行了重入攻击从而达到将钱无限转入自己账户的目的。

解决重入攻击的方式之一就是将上述那条语句放置在Transfer这个函数的前面,也就是在转账之前要先把账户清零就可以了。

黑客攻击


黑客发现了The DAO的漏洞之后,就在很短的时间内利用重入攻击将价值5000万美金的以太币转到了自己的账户中。这起攻击事件在以太坊社区引起了非常大的恐慌,因为The DAO这个曾经让很多人以为前途无量的巨大创举在现实生活中被证明是不堪一击的。这种恐慌很快就在市场上出现了反应,以太币的价格迅速跳水,大有跌跌不休的态势。

我们知道,整个The DAO当时募集的资金是1.5亿美金,黑客几乎在一夜之间就拿走了1/3,情势是非常严峻的。更为重要的是,The DAO募集的以太币已经达到了当时流通地所有以太币的1/10;这也意味着说,如果The DAO的问题没有及时处理好的话,那么将对整个以太坊系统造成不可想象地冲击。

关于The DAO攻击,我们暂时先介绍到这,下一篇文章,我们继续聊一下The DAO攻击的后续发展。

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!