由于以太坊的智能合约存在重视大缺点,你必需阅读那多个攻击的深入深入分析

2020-04-21 作者:威尼斯城所有登入网址   |   浏览(192)

安全对于区块链的开发是绝对必要的。智能合约一直受到灾难性黑客攻击的困扰,包括DAO黑客攻击、Parity钱包黑客攻击,以及第二次Parity钱包黑客攻击。如果你想要编写智能合约,你必须阅读这三个攻击的分析。事实是,智能合约很难搞好。虽然编程工具链将会得到改进,使这些精确的攻击变得更加困难,但最终它们都是由于程序员的错误造成的。还有许多由智能合约编程产生的更微妙的bug,比如在前端集群(frontrunning)或安全生成随机性(secure generation of randomness)等方面。作为一名智能合约开发者,你必须将安全性视为最重要的事情。在智能合约编程中没有“快速行动和打破常规”。这意味着任何处理大量资金流动的代码都应该通过像Oyente或Securify这样的静态分析程序来运行,进行彻底的测试,然后由经验丰富的智能合约审核员进行审计。你还应该尝试依赖预审计的组件,比如OpenZeppelin的开源合约。为了加强你的安全性,我建议你使用OpenZeppelin开发的Ethernaut,这是一款你可以在智能合约中发现并攻击漏洞的游戏。他们中的很多人已经复制了对这个领域发生的智能合约的真实攻击。Phil Daian也有一套优秀的智能合约黑客挑战称为 Hack This Contract。在你做到了这些以后,我强烈建议你整本阅读由ConsenSys编译的Smart Contract Best Practices。希望在你的智能合约编程生涯中多次重温这个文档。bibliography 也值得安全专家进一步阅读。

来源:苏宁财富资讯

图片 1image

作者:洪蜀宁 苏宁金融研究院高级研究员

4月22日中午,有黑客利用以太坊 ERC-20智能合约中BatchOverFlow漏洞攻击BEC(美链的代币“美蜜”)智能合约,成功向两个地址转出了天量级别的 BEC代币,导致市场上海量BEC被抛售。此事使得当日BEC的价值几乎归零。64亿人民币瞬间蒸发。

北京时间2017年7月20日凌晨,以太坊钱包Parity爆出极其严重的漏洞,导致15万个以太币(价值约3200万美元)被盗。

4月25日,仅仅三天后,另一个智能合约SmartMesh曝出漏洞,交易所表示,因SMT出现异常交易,各交易平台暂停SMT的充提和交易。

该漏洞是由Parity钱包的多重签名智能合约代码造成的,其他钱包尚未发现该漏洞。黑客反复调用了Parity钱包的enhanced-wallet.sol文件中的initMultiowned和initDayLimit两个智能合约,这两个初始化代码按理说只允许调用一次,但代码实现时未做限制,导致了资金被非法转移。

这已经不是以太坊第一次被曝出智能合约漏洞问题。虽然以太坊仅仅诞生了四年,但是随着人们越来越多地了解区块链技术,以太坊的热度逐渐增加。然而,最新的研究显示,基于以太坊架构,被称作是“最安全、最可靠、最方便”的智能合约技术却漏洞百出。

截至笔者发稿时,Parity官方正在处理这个漏洞,但还未正式修复,所以建议所有使用多重签名协议的客户将全部资金转出,待漏洞修复后再转回来。

2016年6月17日,发生了在区块链历史上沉重的一次攻击事件。由于以太坊的智能合约存在着重大缺陷,区块链业界最大的众筹项目The DAO(被攻击前拥有1亿美元左右资产)遭到攻击,导致300多万以太币资产被分离出The DAO 资产池。

Parity钱包被盗对以太币影响几何?

同年11月,同样基于以太坊的电子钱包服务商Parity,也出现了严重的安全问题,大约有1.5亿美元的用户资金遭到影响,突然无法正常使用和交易。

Parity是目前以太坊使用最广泛的钱包之一,这次被盗事件与2016年6月份发生的the DAO事件相类似。The DAO事件也是由于智能合约代码的漏洞导致350万个以太币(当时价值5000万美元,如果以目前价格计算则为7亿多美元)被盗。

2017年7月21日,智能合约编码公司Parity警告1.5版本及之后的钱包软件存在漏洞,据Etherscan.io的数据确认有价值3000万美元的15万以太币被盗。

The DAO事件发生后,以太坊创始人Vitalik Buterin提议修改以太坊代码,对以太坊区块链实施硬分叉,将黑客盗取资金的交易记录回滚,得到了社区大部分矿工的支持,但也遭到了少数人的强烈反对。最终坚持不同意回滚的少数矿工们将他们挖出的区块链命名为Ethereum Classic(以太坊经典,简称ETC),导致了以太坊社区的分裂。

2017年11月8日,以太坊Parity钱包再出现重大bug,多重签名漏洞被黑客利用,导致上亿美元资金被冻结。

图片 2

为何智能合约漏洞频出?难道就没有办法解决了吗?

但本次Parity事件发生后,Vitalik Buterin迅速表示,因被盗取资金并非巨量,不考虑像上次那样实施硬分叉回滚交易。因而,以太币的价格在事件发生后并未大幅下跌,目前以太坊ETH的价格为213美元,以太坊经典ETC的价格为15美元。

智能合约现在是区块链中最为大家熟知的概念。但智能合约究竟是什么?很多人还是一知半解。智能合约就是一种储存在区块链中的计算机程序。

什么是智能合约?

图片 3image

以太坊诞生于2014年,是继比特币之后又一个成功的区块链项目,目前市值约200亿美元,仅次于比特币(约400亿美元)。

区块链从本质上来说,就是一种共享的会计分类账簿,可以利用虚拟加密货币和计算机网络来追踪与记录各种资产的状态,同时有效保证分类账簿的安全,以防出现一些恶意篡改现象。

以太坊在比特币的基础上发展了区块链技术,维护了一个全球共享的计算平台,实现了图灵完备的虚拟机EVM,试图通过图灵完备的智能合约实现灵活、安全、全功能的计算。

第一代区块链技术就是比特币。它能为互不相识的交易双方提供牢固保障,保证双方资金能够按照合同规定顺利完成转账。简单地说,就是保证交易双方不会受到欺诈等负面事件影响。

图片 4

第二代区块链技术就是以太坊。有了智能合约,交易双方可以创建一个系统,从某一方的账户中取钱再存进余额不足的另一方账户中。从理论上来说,智能合约能够用于各种各样金融协议的代码编写,其中包括衍生合同、拍卖合同以及各种基于区块链的第三方保管账户合同等等。

而比特币的设计初衷是一个电子现金系统,其内置的脚本语言是专为资金转账交易而设计的,为了确保安全性故意放弃了图灵完备性(没有跳转、循环指令),因而仅仅是一个全球共享账本而非计算平台。

以太坊是一个开源的区块链底层系统,就像安卓一样,提供了非常丰富的API和接口,让许多人在上面能够快速开发出各种区块链应用。目前已经有超过200多个应用在以太坊上开发。

以太坊实现了一个内置了多种编程语言的区块链协议,这些编程语言都是图灵完备的,可以支持条件分支、循环、跳转、函数调用等复杂的运算逻辑,理论上可以在以太坊区块链上运行任意的应用。

而以太坊很大的特色就是能够实现智能合约。所谓智能合约(Smart Contract),是密码学家Nick Szabo在1994年首次提出以数字形式定义的一系列承诺 ,包括合约参与方可以在上面执行这些承诺的协议。

图片 5

智能合约的智能在英语中对应的单词是Smart,和智能手机(Smart Phone)中的Smart意义相同,表示非常灵活的意思,并不是指人工智能。智能合约一旦设立指定后,能够无需中介的参与自动执行,并且没有人可以阻止它的运行。

具体来说,作为在以太坊区块链上运行的某个应用,可以由程序员根据业务需要,用以太坊支持的编程语言自行设计编写代码,而不用为了一个应用去运行一个单独的区块链。基于以太坊区块链协议,使得应用开发者们可以高效快速地开发各式各样的应用程序。这样的程序被称为智能合约,智能合约代码发布到区块链上之后,能够无需中介的参与在以太坊区块链上自动执行,没有人可以阻止它的运行。

以太坊去中心化的核心是其可以运行图灵完备的脚本语言,而开发以太坊智能合约则有四种语言:Serpent、Solidity、Mutan、LLL。这些语言都是面向底层设计的语言。目前来看,Solidity 是首选语言,这是由于它内置了 Serpent 语言的所有特性,语法类则似于使用广泛的 JavaScript。再加上 Solidity 的语言特性较少,该语言则可以更简单地实现完备的智能合约体系。

目前在以太坊上运行的智能合约已有数百种之多,Parity和the DAO都是其中之一。

以太坊是一个开源的有智能合约功能的公共区块链平台。区块链上的所有用户都可以看到基于区块链的智能合约。但是,这会导致包括安全漏洞在内的所有漏洞都可见。智能合约语言 Solidity 自身与合约设计都可能存在漏洞。如果智能合约开发者疏忽或者测试不充分,而造成智能合约的代码有漏洞的话,就非常容易被黑客利用并攻击。并且越是功能强大的智能合约,就越是逻辑复杂,也越容易出现逻辑上的漏洞。

受到以太坊的启发,近年来出现了许多类似的项目,如Fabric、QTUM等,从不同的角度和层面对以太坊进行局部优化,但总体思路都是差不多的,核心都是图灵完备的智能合约。

根据伦敦大学学院计算机科学系副教授伊利亚•谢尔盖最新的研究论文中显示,通过基于以太坊平台的近100 万份智能合约进行每份合约/10秒的分析后发行,有大34200份智能合约很容易遭到黑客攻击。

如何防范智能合约漏洞的产生?

此外,他们还通过3759份智能合约抽样调查,发现其中3686份合约有89%的概率含有漏洞。以太坊作为一个分布式应用平台,如此高的漏洞产生概率,不知道V神对此做何感想。

值得注意的是,此次Parity事件的损失虽然比the DAO事件小一些,但问题的根源是同样的。

图片 6image

随着智能合约开始获得越来越多的使用,智能合约的流程和代码也变得越来越复杂,人们也发现,就像现实世界的合同一样,如果没有认真审核的话,在设计和编码过程中难以避免人工失误的产生,一旦被黑客找到漏洞,损失往往是巨大的。

那么问题来了,以太坊智能合约为何充满漏洞?

图片 7

区块链为智能合约提供可信执行环境,智能合约为区块链扩展应用。而在以太坊上的智能合约,能够控制区块链上各种数字资产进行复杂的操作,随着智能合约开始获得越来越多的使用,人们也发现,就像现实世界的合同一样,如果没有认真审核的话,其中就有可能出现漏洞,并且被坏人利用。

但需要强调的是,这种漏洞不是以太坊区块链本身的漏洞,人们不应对以太坊和区块链的安全性产生不必要的怀疑。此次事件也不会对区块链的应用带来严重的负面影响,类似的事件将来还会发生,这并不意味着区块链技术的末日。

开发智能合约需要一个全新的工程思维,它不同于我们以往项目的开发。因为它犯错的代价是巨大的,并且很难像传统软件那样轻易的打上补丁。就像直接给硬件编程或金融服务类软件开发,相比于web开发和移动开发都有更大的挑战。

当然,区块链从业人员应吸取教训,以尽可能减少类似的安全事故。在笔者看来,在区块链和智能合约的设计与编码实践中,需做到以下几点:

据有关调查统计,以太坊主要漏洞情况描述如下表:

1、简化区块链脚本语言设计,牺牲一部分图灵完备性换取安全性。比特币由于其设计上的非图灵完备性,加上中本聪大幅删减了许多脚本指令,所以其安全性是极高的,从2009年诞生至今8年多的时间里,平安经历了无数次的黑客攻击,从未因比特币区块链和脚本本身的原因出现过资金损失。然而,功能上的丰富性和安全性是一对永恒的矛盾,不可能兼顾,因此在设计区块链脚本语言时,尽量不要为了功能而使用通用的编程语言,要在语言的功能上有所取舍,采用最小可用指令集,同时在智能合约虚拟机的设计上要采用沙盒等隔离手段,并严格限制CALL指令的使用方式。

图片 8image图片 9image图片 10image

2、严格执行智能合约代码审查。和现实中的合同文本一样,智能合约代码也要经过多层次的严格的代码审查,包括业务流程/逻辑审查、代码走查、详尽的测试流程、安全性检测、专家评审等。对逻辑复杂且涉及较大资金的智能合约,要尽可能通过代码形式化验证,通过数学证明的方式验证智能合约的确定性。

(本图为雷锋网设计并整理)

3、强化对智能合约程序员的培训。虽然智能合约编程语言表面上看与传统的编程语言极其相似,但其属于一个全新的编程范式,思维方式也与传统的面向过程、面向对象、面向函数的编程范式有很大差异,需要将公平交易、诚信和其他主观概念加入智能合约的设计和编码中。为此,要加强智能合约程序员的培训工作,在实践中提炼出智能合约编程和设计模式,尤其是安全方面的模式,减少程序员出现差错的可能。

但其实究其根本,之所以如此多的智能合约出现同类漏洞,其背后是混乱的数字代币发行现状。

4、在应用实践中要谨慎渐行。在实际应用区块链智能合约时,应采用分步推进的策略,从简单到复杂,从小范围试点到全面推广,涉及的资金量也应从少到多,不贸然涉及大量的资金。如此,即便在前期出现漏洞被攻击,也不会损失过于巨大。​

一些ICO通过智能合约发行代币的代价,成本已经低之又低。业内人士指出,一个程序员只要花5分钟,从网上抄一些智能合约代码,稍做修改,就可以发行一个代币。如果再写个白皮书,找几个知名顾问站台,就可以在数字货币交易所里发行几千万甚至上亿的项目。既没有交易所的监管,又抱着“一夜暴富”的期待,这些发币团队的技术实力、对安全的防范意识,自然很难得到保证。

内参君还是要提醒的是,在数字货币的世界里,各种漏洞都潜伏其中,投资者需要做好漏洞随时暴露的心理准备,同时,平台自身的资质,也是投资者需要仔细考虑的重要因素。

据腾讯玄武实验室的信息安全人员宋凯透露,其实很多虚拟货币交易在过程中都出现过安全问题,事后的解决方案大多是回滚,也就是将交易数据回溯到攻击之前的状态。这样的补救措施只能使用户账户中拥有同样数量的新币,但因为攻击导致BEC币价大跌,事实上,用户并没能真正挽回损失。

近日,以太坊基金会(Ethereum Foundation)开发者Alex Van de Sande公布了的一项有关“保险池”的提议,他认为这个方案能够降低网络分裂的风险——由于智能合约代码漏洞造成资金冻结的事故,在寻找解决方案的过程中可能产生分歧,从而带来分裂网络的风险。

Van de Sande是以太坊Mist浏览器团队的领导者,他在一篇文章中提到,创建一个存有专用保险资金的“赎回合约”(recovery contract)能够降低个人或组织通过争议性硬分叉来获得部分或全部因为代码漏洞而失去的资金。最典型的例子就是,在Parity的多重签名钱包合约代码库爆出漏洞之后,钱包中价值3.2亿美元的以太坊被冻结,维持在无法花费的状态。

不过,Van de Sande的提议最具争议性的部分应该是其涉及了为超过51.3万ETH发行赎回代币的计划,即因合约代码库错误锁定在Parity多种签名钱包中的以太坊数量。

Parity团队表示无意通过争议性硬分叉的方式取回资金,因此,Van de Sande认为他的这项计划将会让受害者(包括大多数以太坊核心开发者)成为这个新基金的利益相关者。这样一来,这个保险池的创立将更有机会引起更多人的关注。

内容来源:链内参

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

图片 11image

本文由威尼斯官网9778818发布于威尼斯城所有登入网址,转载请注明出处:由于以太坊的智能合约存在重视大缺点,你必需阅读那多个攻击的深入深入分析

关键词: