作者 ChinaLedge联盟 段玺(Andy Dan)

简介

北京时间2016年6月17日发生了在区块链历史上留下沉重一笔的攻击事件。由于 其编写的智能合约存在着重大缺陷,区块链业界最大的众筹项目TheDAO(被攻击前 拥有1亿美元左右资产)遭到攻击,目前已导致300多万以太币资产被分离出TheDAO 资产池。TheDAO编写的智能合约中有一个splitDAO函数,攻击者通过此函数中的漏 洞重复利用自己的DAO资产来不断从TheDAO项目的资产池中分离DAO资产给自己。

攻击方法

攻击者组合了2个漏洞攻击。攻击者利用的第一个漏洞是递归调用splitDAO函数。也就是说splitDAO函数被第一次合法调用后会非法的再次调用自己,然后不断重复这 个自己非法调用自己的过程。这样的递归调用可以使得攻击者的DAO资产在被清零之 前,数十次的从TheDAO的资产池里重复分离出来理应被清零的攻击者的DAO资产。 攻击者利用的第二个漏洞是DAO资产分离后避免从heDAO资产池中销毁。正常情况 下,攻击者的DAO资产被分离后,TheDAO资产池会销毁这部分DAO资产。但是攻击 者在递归调用结束前把自己的DAO资产转移到了其他账户,这样就可以避免这部分 DAO资产被销毁。在利用第一个漏洞进行攻击完后把安全转移走的DAO资产再转回原 账户。这样攻击者做到了只用2个同样的账户和同样DAO资产进行了200多次攻击。

事件经过

6月15日左右此次的攻击合约被创立,北京时间6月17日攻击开始。
Vitalik Buterin在知晓攻击后立刻通知了中国社区。
TheDAO监护人提议社区发送垃圾交易阻塞以太坊网络,以减缓DAO资产被分离 的出去的速度。
随后Vitalik在以太坊官方博客发布题为[紧急状态更新:关于DAO的漏洞]的文 章。该文章解释了被攻击的细节以及解决方案提议。提议方案为进行一次软分叉。不 会有回滚,不会有任何交易或者区块被撤销。软分叉将从块高度1760000开始把任何与 The DAO和child DAO相关的交易认做无效交易,以此阻止攻击者在27天之后提走被盗 的以太币。这之后会有一次硬分叉将以太币找回。
上述文章公布后攻击暂时停止。
以太坊社区的Ethcore团队发布了支持软分叉的Parity客户端。
北京时间6月19日自称攻击者的人通过网络匿名访谈宣布会通过智能合约的形式
奖励不支持软分叉的矿工100万以太币和100比特币,来对抗以太坊基金会提议的软分叉。
北京时间6月19日攻击再次开始,但是只有少量DAO被分离。 
北京时间6月22日白帽黑客开展罗宾汉行动将TheDAO资产转移到安全的子DAO中。
随后黑帽黑客(攻击者)开始攻击白帽黑客所创建的为安全转移TheDAO资产的智能合约。

事前警告

然而, 最令人遗憾的是早在5月份,以太坊团队成员Vlad Zamfir等人就呼吁由于 安全问题冻结The DAO项目,并给出了几种可能的攻击方案。
    此外,本次攻击手法早在6月9日在网络上被提及过,智能合约语言Solidity的作者 Christian接着在6月10号也在以太坊官方博客上发表了文章提醒大家注意这个问题。6 月11号,以太坊上另外一个项目MakerDAO发现自己的合约中存在这样的问题, 所幸处 置及时,并未造成什么损失。而TheDAO的团队在收到同样的安全报告后作出了暂时 不会受到攻击的结论。
    以太坊创始人,万向区块链实验室发起人,ChinaLedger联盟顾问Vitalik Buterin早 在几周前提交给R3的以太坊评价报告里,甚至在攻击发生的前一天的上海报告讲座中 都讨论了以太坊智能合约的安全性问题。Vitalik提出,为了解决程序员作恶和程序员 出错的问题,以太坊里将会提供两类,分别为低科技的和高科技的解决方案。高科技 解决方案在理论上能够提供更好的希望,不过会带来整合的难度,以及更依赖于复杂的工具。而针对作恶问题的低科技解决方案有两个层面。第一,在以太坊里,明确应用程序的 核心(纯粹由智能合约的集合构成)以及界面(HTML 和 Javascript 代码通过读取区块链及 发送交易的方式与核心通讯) 的区别。以太坊的目标是让核心变得可信,若要实现这点, 核心就必须尽量精简,并且经过深入的审计和审查;而用户界面可能包括大量的代码,可 以无需这么信任; 以太坊一个中期的设计目标是让以太坊用户界面去保护用户,以免他 们受到来自作恶的交易界面的损害,如通过强制性的弹出一个“你是否想将带有这些数 据的 一个交易发送到这个合约里?”对话框(或其他形式的通知方法)。以太坊希望会呈 现出一些专业事务所的市场空间,就如今天律师事务所创建标准化法律合约那样,这些专 业事务所会为不同的用例创建标准化的合约,并让这些合约接受来自第三方审计人员的 深入检查。审计和标准化可以减少代码错误带来的损害,不过在错误的特例里,已经有人 进行了数十年的研究,引入了一种强类型要求的编程语言,专门用于避免错误; 这类语言 让你可以更丰富地指定每一种数据的含义,并自动防止数据被以明显错误的方式组合起 来(如时间戳加上了一个货币价值,或由区块哈希值分割的地址)。
    更高级的解决方案依赖于名为形式化验证(Formal Verification)的 技术。简单地说, 形式化验证就是使用计算机程序自动地在数学的层面上证明关 于其他计算机程序的语 句。
    现在,以太坊的高级编程语言 Solidity的主导开发者 Christian Reitwiessner正在将形 式化证明引擎 Why3 整合到 Solidity 里面,让用户可以在 Solidity 程序里面插入与某种数 学论点有关的证据,并在编译的时候进行验证;还有一个项目在将形式化证明技术 imandra整合到以太坊虚拟机的代码里。
    影响范围 此次攻击只针对编程中有漏洞的智能合约,因此以太坊系统本身(共识协议,虚拟机,数据库)没有任何伤害。但是以太坊平台上应用层项目中的智能合约代码需要 重新进行谨慎的审计。TheDAO资产池中的DAO资产都是不安全的,所有的DAO资产 都有可能被攻击者分离到自己的账户。

各方反应

Vitalik个人支持软分叉的提议,也支持软分叉的开发工作,支持矿工到时候升级客户端来支持软分叉。然而Vitalik也认识到大家对这个提议有激烈的争论,无论哪一 方的观点都有强力的反对。因为软分叉不需要回滚交易,不会对用户和交易所造成不 便,这更使Vitalik倾向于采取行动的一方。也有许多人,包括在基金会内部,倾向于 另外一方反对软分叉。Vitalik不会阻止也不会反对另一方在公开场合宣传他们的观 点,甚至是游说矿工来抵制这个软分叉。在这件事情上Vitalik会坚决的不与任何站在 相对他的另一方的人争辩。
    以太坊的联合创始人Anthony Di Iorio在推特上发言认为不能因为一个应用而改变 以太坊。
    EthFans社区在第一时间对事件的发展进行了及时的跟进,总结了中国社区对分叉 的看法,鼓励中国社区发出自己的声音。目前社区内部从公平,法律,道德,政治, 去中心化等不同角度对是否应该分叉正在进行大讨论。

反省与思考

在被攻击后以太坊基金会的问题处理对策也值得关注和借鉴。
1. 确认问题的现状:TheDAO的资产被不断分离到某个子DAO里。
2. 为研究问题对策争取必要的时间,减缓问题带来的损失:号召社区利用垃圾交易等阻断后续的资金转移。
3. 对问题原因的推断:判定函数的递归调用是根本原因,并将问题公布于官方博客上让大众知晓现状。
4. 制定临时对策:为了控制问题的外流,给予社区充分的时间来研究和讨论最终对策。组织核心开发团队开发补救版本,拟通过“软分叉”方式部署上线,以此来达 到事实上废除发生在TheDAO及其子合同之间的以太币转移交易的目的。攻击者也因此受到震撼,暂停了攻击。
5. 提案最终对策:提出不排除通过“硬分叉”方式实现全网的版本升级。以太坊基 金会只能提出修改系统的选项,经过社区对此次问题的原因和影响充分了解,深思 熟虑后,这些选项最终是否被采纳则取决由以太坊网络的维护者——矿工。
6. 制定预防复发的对策:为了防止同样的问题同时爆发,排除类似的潜在问题, 发动整个社区审核复查现有的智能合约,呼吁社区共同研究智能合约编程缺陷的解 决方案,预防此类问题再次发生。
以下几个安全设计思想可以帮助我们反省如何设计一个更安全更健壮的适合联盟链的智能合约平台。
InterLock
    必须在确定安全后才能让智能合约运行,或者是在危险察觉时让智能合约自动停止。比如在智能合约中设立触发条件,由多人签名后可触发合约的执行停止。亦或者是占有一定比率的节点投票后可触发智能合约的运行停止。
    这次TheDAO在设计的时候允许个人对自己的DAO资产进行分离,但是必须等待 27天才可以提取以太币。这个设计使的这次TheDAO被攻击仍然让攻击者需要27天才 能提走被盗的以太币。虽然这个设计并未阻止攻击的行为,但是却给TheDAO团队和 以太坊基金会,以及社区充足的时间来研讨对策,评估对策带来的风险。值得注意的 是,无论社区最后是否支持分叉,以太坊作为一个生态整体在面对这次攻击时没有被 打的措手不及,而是在经过充分讨论,合理提案,达成共识进行选择之后从容冷静的 进行了处理。
Fool-Proof
    无论是谁编写智能合约都不会让问题产生。这种设计思想的目的是减少带无意识错误的智能合约。有以下的提案:
改进现有的智能合约语言的标准,使之可以升级在链上运行中的合约的安全性,
使之无法有隐藏的动作,言行一致,使之确保状态变化的时机,使之确保状态机的任何状态都可以被恢复。
将尽可能多的模块标准化。这些标准化的模块将会得到足够充分的审计,从而保证安全性供开发者使用。
准备一个更好的开发环境,可以更简单的对智能合约进行调试和检查。
与安全研究专家共同合作,用各种验证工具测试智能合约。
研发探索形式化验证技术,对智能合约进行自动化验证。
然后对于区块链上的纠错机制,目前为止似乎只有分叉这一方式。以怎么样的程序来决定是否分叉,甚至除了分叉是否有其他的方法来纠正区块链上的错误需要继续研究。
    互联网的应用可以在底层不怎么稳定的时候进行开发,因为很多互联网应用对系统的可用性要求不高,即便发生错误所带来的损失并非不可接受。但是区块链上或者 说价值网络上的应用直接关系到金钱,信用,所有权,认证,资产,控制权等,远比 互联网承载的的信息更有价值,一旦发生错误带来的损失也是不可同日而语的。在目 前区块链技术发展早期的阶段,不应该在没有稳定健壮的底层技术的基础上直接去做 应用。正如这次TheDAO出现了问题一样,多亏了控制底层技术的以太坊基金会迅速 的提出了解决方案。也多亏了以太坊底层数据结构设计与比特币的不同,即使发生硬 分叉与TheDAO无关的交易也不受任何影响。如果我们在没掌握基础技术的前提下就 去贸然的直接开发应用,特别是在金融系统中动则涉及到大额资产资金的应用的时候, 一旦发生问题,如何迅速对问题进行定性定量分析,如何迅速的确定解决方案,如何 评估解决方案的风险等一系列的流程根本无从谈起。此次TheDAO被攻击虽然是因为 应用层的智能合约编写问题,但是无论是形式化证明,智能合约编程语言,合约调试 检查工具等解决方案都属于中间层,如果说要对执行智能合约的EVM(以太坊虚拟 机)进行修改的话,那更是要修改底层设施。万丈高楼平地起,只有把健壮安全的底 层,中间层脚踏实地的建设好才能让工业级的应用百花齐放。ChinaLedger项目亦志在于此。

参考信息

1.https://en.wikipedia.org/wiki/The_DAO_organization)( 
2.https://m.reddit.com/r/ethereum/comments/4os7l5/the_big_thedao_heist_faq/ 
3.http://vessenes.com/deconstructing-thedao-attack-a-brief-code-tour/ 
4.http://ethfans.org/posts/116
5.http://ethfans.org/posts/117 
6.http://aestheticintegration.com/imandra/ 
7.http://ethfans.org/topics/356 
8.http://hackingdistributed.com/2016/05/27/dao-call-for-moratorium/ 
9.https://blog.ethereum.org/2016/06/10/smart-contract-security/ 
10.http://ethfans.org/topics/369
11.https://twitter.com/diiorioanthony 
12.http://ethfans.org/topics/361 
13.http://ethfans.org/posts/114

TheDAO被攻击事件考察报告相关推荐

  1. 计算机组成原理怎么考察的,计算机组成原理课程考察报告(论文).doc

    计算机组成原理课程考察报告 学 院:机器人科学与技术 班 级:电气三班 学 号姓 名:周陈菊 指导教师:卜伶俐 简述计算机组成原理课程的内容. 数据的表示 原码,反码,补码,移码的表示方法和之间的联系 ...

  2. 关于“南方丝路”“茶马古道”(云南段)的 考察报告

    关于"南方丝路""茶马古道"(云南段)的 考察报告 2017年11月27-12月3日,宁夏文史馆部分馆员及工作人员共8人在副馆长曾玉强的带领下,采用实地勘察.与 ...

  3. 2022 极术通讯-2021中国云数据中心考察报告发布,Arm服务器促进多元算力发展

    导读:极术社区与E-learning平台联合推出极术通讯,引入行业媒体和技术社区.咨询机构优质内容,定期分享产业技术趋势与市场应用热点. 芯方向 新一代Armv9架构如何助力CPU安全和性能提升? 本 ...

  4. 近一亿美元失窃,Horizon跨链桥被攻击事件分析

    " Tokenviewlabs Horizon跨链桥被盗1亿美元 6月24日,Harmony团队发布推特称,Horizon跨链桥遭到攻击,损失金额约1亿美元.6月26日,Harmony创始人 ...

  5. 深扒EOSDice被攻击事件始末, TA是如何把游戏体验搞臭的?

    安全是区块链领域举足轻重的话题.本期咱们聊聊 EOS 伪随机数漏洞引起的安全隐患. 「区块链大本营」携手「成都链安科技」团队重磅推出「合约安全漏洞解析连载」,以讲故事的方式,带你回顾区块链安全走过的历 ...

  6. 医疗数据之不良事件分析报告设计与实现

    0.序言 由于相关职能管理科室需要每季度进行不良事件的分析,收集不良事件上报数据,然后应用不同统计学,再用表格.趋势图.柱状图.帕累托图等表达方式去展示结果,并给出相应的结果分析,最终形成一份完整的报 ...

  7. 【权威发布】360天眼实验室:Xshell被植入后门代码事件分析报告(完整版)

    本文由 安全客 原创发布,如需转载请注明来源及本文地址. 本文地址:http://bobao.360.cn/learning/detail/4278.html 文档信息 事件概要 事件简述 近日,非常 ...

  8. 首次去中心化抢劫?近2亿美元损失:跨链桥Nomad 被攻击事件分析

    跨链互操作性协议Nomad桥经历了一场安全漏洞:黑客通过一系列交易拿走了桥内的1.9亿美元资金. Nomad 允许在 Ethereum.Evmos.Milkomeda 与 Moonbeam 之间转移代 ...

  9. Google Play市场考察报告-2

    接上文,本次继续考察App. (6)CNBETA win8平板客户端 cnBeta是国内少有的科技类资讯网站,在程序员群体中具有很大影响力.面向程序员的软件应用在APP中一向属于少数,然而程序员群体已 ...

最新文章

  1. 从源码分析DEARGUI之add_drawing
  2. asp.net cache
  3. SQL 通过syscolumns.xtype动态查找指定数据类型字段所包含的数据
  4. 遍历结构体_三菱ST语言编程(3)——结构体变量
  5. 机器学习经典算法笔记——线性回归
  6. python实现单链表快速排序升序linkedqueue_数据结构回顾
  7. MTPA 永磁同步电机 计算
  8. 手机按公式计算机,请问用手机上的自带计算器怎样进行度分秒的计算?
  9. BZOJ4816 数字表格
  10. 站群服务器用SS5 SOCKS5 配置多IP/多端口高性能代理服务器(16G内存主机支持超过100万并发S5代理)
  11. 模拟频率f、模拟角频率Ω 、数字频率ω之间的关系
  12. 计算机网络课程设计,使用MFC实现界面化创建ARP发送与接受程序(一)
  13. Tracup|工作时节省时间的三个奇异但是有用的小妙招
  14. 家用计算机做raid 2018,让电脑速度翻倍的方法,手把手教你组建RAID!
  15. Java“菜单“树递归-合并子树
  16. 11个开源测试自动化框架,如何选?
  17. 可视化—三维图的绘制
  18. python趣味案例编程 Pdf,小小的python编程故事
  19. LeetCode题解(1079):活字印刷(Python)
  20. 飞机大战(C语言版)

热门文章

  1. IPFS白皮书中文版
  2. 管理知识型员工:德鲁克日志之五月一日
  3. 小米note刷android8.1,【Android 8.1.0】RR-O For Xiaomi Mi Note Pro(小米Note顶配版)
  4. BiLSTM / BiRNN / BiLSTM-CRF / Bert-BiLSTM-CRF 全网最强大厂面试级深度的知识点整理
  5. 开心消消乐java下载_开心消消乐原版下载安装
  6. Ledger-复式记账的一个功能强大的命令行工具
  7. A500的dial过程选择phone
  8. 腾讯打击QQ宠物外挂颁布Q宠打工新规定(转)
  9. Chrome浏览器首页被hao123劫持的解决办法
  10. 小舟从此逝,江海寄馀生。