4月22日中午,有黑客利用以太坊 ERC-20智能合约中BatchOverFlow漏洞攻击BEC(美链的代币“美蜜”)智能合约,成功向两个地址转出了天量级别的 BEC代币,致使市场上海量BEC被抛售。此事使得当日BEC的价值几乎归零。64亿人民币瞬间蒸发。程序员
4月25日,仅仅三天后,另外一个智能合约SmartMesh(SMT)曝出漏洞,交易所表示,因SMT出现异常交易,各交易平台暂停SMT的充提和交易。web
这已经不是以太坊第一次被曝出智能合约漏洞问题。虽然以太坊仅仅诞生了四年,可是随着人们愈来愈多地了解区块链技术,以太坊的热度逐渐增长。然而,最新的研究显示,基于以太坊架构,被称做是“最安全、最可靠、最方便”的智能合约技术却漏洞百出。编程
2016年6月17日,发生了在区块链历史上沉重的一次攻击事件。因为以太坊的智能合约存在着重大缺陷,区块链业界最大的众筹项目The DAO(被攻击前拥有1亿美圆左右资产)遭到攻击,致使300多万以太币资产被分离出The DAO 资产池。promise
同年11月,一样基于以太坊的电子钱包服务商Parity,也出现了严重的安全问题,大约有1.5亿美圆的用户资金遭到影响,忽然没法正常使用和交易。浏览器
2017年7月21日,智能合约编码公司Parity警告1.5版本及以后的钱包软件存在漏洞,据Etherscan.io的数据确认有价值3000万美圆的15万以太币被盗。安全
2017年11月8日,以太坊Parity钱包再出现重大bug,多重签名漏洞被黑客利用,致使上亿美圆资金被冻结。网络
为什么智能合约漏洞频出?难道就没有办法解决了吗?架构
智能合约如今是区块链中最为你们熟知的概念。但智能合约到底是什么?不少人仍是只知其一;不知其二。智能合约就是一种储存在区块链中的计算机程序。分布式
区块链从本质上来讲,就是一种共享的会计分类帐簿,能够利用虚拟加密货币和计算机网络来追踪与记录各类资产的状态,同时有效保证分类帐簿的安全,以防出现一些恶意篡改现象。学习
第一代区块链技术就是比特币。它能为互不相识的交易双方提供牢固保障,保证双方资金可以按照合同规定顺利完成转帐。简单地说,就是保证交易双方不会受到欺诈等负面事件影响。
第二代区块链技术就是以太坊。有了智能合约,交易双方能够建立一个系统,从某一方的帐户中取钱再存进余额不足的另外一方帐户中。从理论上来讲,智能合约可以用于各类各样金融协议的代码编写,其中包括衍生合同、拍卖合同以及各类基于区块链的第三方保管帐户合同等等。
以太坊是一个开源的区块链底层系统,就像安卓同样,提供了很是丰富的API和接口,让许多人在上面可以快速开发出各类区块链应用。目前已经有超过200多个应用在以太坊上开发。
而以太坊很大的特点就是可以实现智能合约。所谓智能合约(Smart Contract),是密码学家Nick Szabo在1994年首次提出以数字形式定义的一系列承诺(promises) ,包括合约参与方能够在上面执行这些承诺的协议。
智能合约的智能在英语中对应的单词是Smart,和智能手机(Smart Phone)中的Smart意义相同,表示很是灵活的意思,并非指人工智能(AI)。智能合约一旦设立指定后,可以无需中介的参与自动执行,而且没有人能够阻止它的运行。
以太坊去中心化的核心是其能够运行图灵完备的脚本语言,而开发以太坊智能合约则有四种语言:Serpent、Solidity、Mutan、LLL。这些语言都是面向底层设计的语言。目前来看,Solidity 是首选语言,这是因为它内置了 Serpent 语言的全部特性,语法类则似于使用普遍的 JavaScript。再加上 Solidity 的语言特性较少,该语言则能够更简单地实现完备的智能合约体系。
以太坊是一个开源的有智能合约功能的公共区块链平台。区块链上的全部用户均可以看到基于区块链的智能合约。可是,这会致使包括安全漏洞在内的全部漏洞均可见。智能合约语言 Solidity 自身与合约设计均可能存在漏洞。若是智能合约开发者疏忽或者测试不充分,而形成智能合约的代码有漏洞的话,就很是容易被黑客利用并攻击。而且越是功能强大的智能合约,就越是逻辑复杂,也越容易出现逻辑上的漏洞。
根据伦敦大学学院计算机科学系副教授伊利亚•谢尔盖最新的研究论文中显示,经过基于以太坊平台的近100 万份智能合约进行每份合约/10秒的分析后发行,有大34200份智能合约很容易遭到黑客攻击。
此外,他们还经过3759份智能合约抽样调查,发现其中3686份合约有89%的几率含有漏洞。以太坊做为一个分布式应用平台,如此高的漏洞产生几率,不知道V神对此作何感想。
那么问题来了,以太坊智能合约为什么充满漏洞?
区块链为智能合约提供可信执行环境,智能合约为区块链扩展应用。而在以太坊上的智能合约,可以控制区块链上各类数字资产进行复杂的操做,随着智能合约开始得到愈来愈多的使用,人们也发现,就像现实世界的合同同样,若是没有认真审核的话,其中就有可能出现漏洞,而且被坏人利用。
开发智能合约须要一个全新的工程思惟,它不一样于咱们以往项目的开发。由于它犯错的代价是巨大的,而且很难像传统软件那样轻易的打上补丁。就像直接给硬件编程或金融服务类软件开发,相比于web开发和移动开发都有更大的挑战。
据有关调查统计,以太坊主要漏洞状况描述以下表:
(本图为雷锋网设计并整理)
但其实究其根本,之因此如此多的智能合约出现同类漏洞,其背后是混乱的数字代币发行现状。
一些ICO(数字货币发行)经过智能合约发行代币的代价,成本已经低之又低。业内人士指出,一个程序员只要花5分钟,从网上抄一些智能合约代码,稍作修改,就能够发行一个代币。若是再写个白皮书,找几个知名顾问站台,就能够在数字货币交易所里发行几千万甚至上亿的项目。既没有交易所的监管,又抱着“一晚上暴富”的期待,这些发币团队的技术实力、对安全的防范意识,天然很可贵到保证。
内参君仍是要提醒的是,在数字货币的世界里,各类漏洞都潜伏其中,投资者须要作好漏洞随时暴露的心理准备,同时,平台自身的资质,也是投资者须要仔细考虑的重要因素。
据腾讯玄武实验室的信息安全人员宋凯透露,其实不少虚拟货币交易在过程当中都出现过安全问题,过后的解决方案大可能是回滚,也就是将交易数据回溯到攻击以前的状态。这样的补救措施只能使用户帐户中拥有一样数量的新币,但由于攻击致使BEC币价大跌,事实上,用户并没能真正挽回损失。
近日,以太坊基金会(Ethereum Foundation)开发者Alex Van de Sande公布了的一项有关“保险池”的提议,他认为这个方案可以下降网络分裂的风险——因为智能合约代码漏洞形成资金冻结的事故,在寻找解决方案的过程当中可能产生分歧,从而带来分裂网络的风险。
Van de Sande是以太坊Mist浏览器团队的领导者,他在一篇文章中提到,建立一个存有专用保险资金的“赎回合约”(recovery contract)可以下降我的或组织经过争议性硬分叉来得到部分或所有由于代码漏洞而失去的资金。最典型的例子就是,在Parity的多重签名钱包合约代码库爆出漏洞以后,钱包中价值3.2亿美圆的以太坊(ETH)被冻结,维持在没法花费的状态。
不过,Van de Sande的提议最具争议性的部分应该是其涉及了为超过51.3万ETH发行赎回代币的计划,即因合约代码库错误锁定在Parity多种签名钱包中的以太坊数量。
Parity团队表示无心经过争议性硬分叉的方式取回资金,所以,Van de Sande认为他的这项计划将会让受害者(包括大多数以太坊核心开发者)成为这个新基金的利益相关者。这样一来,这个保险池的创立将更有机会引发更多人的关注。
内容来源:链内参
如下是咱们的社区介绍,欢迎加入各类合做、交流、学习)