主页 > imtoken官方app > 区块链安全事件回顾:DAO被黑

区块链安全事件回顾:DAO被黑

imtoken官方app 2024-01-26 05:09:09

曲速地带:不忘历史,才能展望未来。 在接下来的一段时间里,极速地带将带大家回顾一下区块链安全事件的总结和区块链技术的前景。

2. THE DAO黑客事件详解

今天我们来说说第二起盗窃事件:The DAO Hacking Event

区块链安全事件回顾之The DAO被黑事件

二、以太坊组织The DAO被黑事件分析

时间:2016年6月

比特币区块链交易查询_区块链和比特币的总结_区块链和比特币的关系

北京时间2016年6月17日,一场在区块链历史上留下浓重一笔的攻击事件发生了。 由于其编写的智能合约存在重大缺陷,区块链行业最大的众筹项目TheDAO(攻击前资产约1亿美元)遭到攻击,超过300万以太坊资产被剥离TheDAO 资产。 水池。 TheDAO 编写的智能合约中有一个 splitDAO 函数。 攻击者通过该函数的漏洞,复用自己的DAO资产,不断将DAO资产从TheDAO项目的资产池中分离出来归自己所有。

TheDAO 遭到攻击。 该攻击利用两个代码漏洞创建了一个子合约并提取了 360 万个 ETH。 因为攻击者是通过splitDAO开始攻击的。我们从splitDAO代码开始分析

区块链安全事件回顾之The DAO被黑事件

函数调用者只能是 TokenHolder。 它不能是以太币账户。正如预期的那样区块链和比特币的总结,这里没有问题

splitDAO的代码有点长,我们看下面的代码

区块链和比特币的总结_区块链和比特币的关系_比特币区块链交易查询

区块链安全事件回顾之The DAO被黑事件

这里是先计算要支付的金额,然后调用createTokenProxy函数。 我们需要记住这一点。 根据BLOG 2,在DAO.sol中,函数splitDAO函数有这么一行:

区块链安全事件回顾之The DAO被黑事件

合约中为msg.sender记录的dao币余额清零,从totalSupply中扣除dao币总量等都发生在发送回msg.sender之后。 这是博客 1 中指出的典型“反模式”。

接下来看withdrawRewardFor函数。 在github看到的最新代码并不是部署在以太坊livenet上的代码:

区块链和比特币的总结_区块链和比特币的关系_比特币区块链交易查询

区块链安全事件回顾之The DAO被黑事件

paidOut[_account] += reward 在原代码中放在payOut函数调用之后,在最新的github代码中移到了payOut之前。 再次查看 payOut 函数调用。 rewardAccount的类型是ManagedAccount,在ManagedAccount.sol中可以看到:

区块链安全事件回顾之The DAO被黑事件

_recipient.call.value()() 调用该函数时,转入_amount Wei,调用call默认会使用当前剩余的所有gas。 这时候call调用执行的代码步数可能会很多,基本上只受攻击者影响。 发送消息的可用气体限制。

综合这些,黑客的攻击方式就浮出水面了:

区块链和比特币的关系_区块链和比特币的总结_比特币区块链交易查询

我们现在可以建立一个攻击合同。

创建一个钱包并多次调用 splitDAO,直到达到合约的气体限制或堆栈限制。

为新的钱包地址创建拆分提案。

等待7天。

调用 splitDAO

比特币区块链交易查询_区块链和比特币的关系_区块链和比特币的总结

区块链安全事件回顾之The DAO被黑事件

splitDAO调用了两次,withdrawRewardFor也调用了两次,都成功了。 成功窃取以太币。

所以一定要在调用发送函数之前重置变量。

从代码来看区块链和比特币的总结,本次攻击成功的因素有两个:一是DAO余额扣除和Ether转账这两个步骤的顺序错误,二是未知代码不受限制地执行。

Warp Future Lab表示:这次黑客事件并不意味着以太坊甚至去中心化和区块链的终结。 虽然教训很深刻,但如果能够吸取教训,那么不仅是THE DAO、以太坊,整个区块链社区都会从中受益。

本文内容来自微信公众号【区块链安全档案】