以太坊曝新漏洞,智能合约被打回原型

2016-11-03 12:05 来源:巴比特资讯 阅读:3929
一般来说,软件中存在着漏洞是很常见的事,但如果发生在以太坊(ethereum)身上,却是一件非常棘手的事情。

一般来说,软件中存在着漏洞是很常见的事,但如果发生在以太坊(ethereum)身上,却是一件非常棘手的事情。

本周,以太坊编程语言Solidity被曝存在漏洞,其已经影响了一些特定的智能合约,而且,大多数受影响的合约将无法被拆除或更改掉。

总之,去中心化智能合约(不能被一个拥有者控制的合约)的拥有者对这种漏洞感到无能无力。

bugs

在这一漏洞报告发布后的两天,开发者便推出了0.4.4. 修复版Solidity编程语言,但这一漏洞影响了一些地址及在这些合约中的数据类型,因此导致 合约拥有者无法进行升级。

好消息是,这一漏洞可能不会影响到很多智能合约。

Solidity语言创造者Christian Reitwiessner告诉记者,他对每一个列在etherscan上的程序进行了“半自动”分析,发现在12,000 个合约当中,只有4个是可用的。

Reitwiessner表示,这些合约当中并没有以太币,因此它们可能是用于测试目的。但值得注意的是,并不是所有的合约都会显示在etherscan上。(当前以太坊共计有20多万个合约,很难说剩下的合约资金都是安全的)。

总体而言,相比于The DAO项目身上出现的漏洞来说,当前的漏洞只能称的上是一个小的缺陷。然而,它也在加密货币圈内引起了大量的讨论。

例如,一位社交媒体观察家表示,这一漏洞可能是智能合约潜在漏洞问题的冰山一角。

解决这一问题的一个激进的想法,是让以太坊合约在近期内进行升级,好让合约拥有者可停用或更改掉这些出现问题的合约。但令人担心的是,这样做可能意味着剥夺了以太坊的去中心化特性。

新加坡国立大学的博士生Loi Luu说,如果以太坊用户能够学会如何以去中心化的方式,安全地部署智能合约,这将是更好地选择。

Luu说:

“我个人并不认为它是一个好主意,它基本上违背了智能合约的一切设计。如果以太坊是一个测试网络,那就让它的智能合约失败,让人们从中学习到教训。”

但Luu的言论表明,让所有的合约进行升级,可能并不是一个好主意,尤其是以太坊还是一个新的技术。

修复问题

使用以太坊高级语言(例如 Solidity或Serpent)编写的程序,在被添加到区块链之前会被编译成字节代码。而在这里发生的问题,就是发生在编译技术身上。

为了解决这一问题,Reitweissner建议开发者做两件事。一、如果编译一个新合约,开发者需要升级到新版本的Solidity语言,以避免这个漏洞。

而第二种方法则显得更为奇怪,因为它需要升级或重启你已部署的合约,而这种方案,可能没有人会选择在以太坊这类项目身上使用。

Reitwiessner阐述了一个建议,他提出了两种类型的合约:中心化控制的,以及去中心化的,其中没有人拥有“特权”。

第一种可能提供了一些升级机制,或一种方法来从合约中移除资金。

而第二种则是棘手的。另一方面,由于不可靠的以太坊智能合约一旦被部署,就无法被拆除或更改它们,如果开发者从一开始就没有使用一种中心化的智能合约,那么他们能够做的事情其实是很有限的。

然而,Reitwiessner表示,开发者可通过采用一些手段,来防范类似问题(像Solidity这样的)的发生。

“我对这类合约的建议是,要么让它们的运行时间变得短暂,以减少潜在影响的发生,要么对合约的字节码进行适当的分析。我们目前正在开发工具,帮助他们完成这一步工作,”他说。

展望未来

由于,以太坊原链(ETC)与ETH链采用的是同一套规则,其同样也受到了这一漏洞的影响。

但据其主要组织者Arvicco表示,开发者们正在探索开发一种新的编程语言,以避免更多漏洞的出现。

特别对于Solidity语言而言,如果出现另一个无法阻挡的漏洞,可能在今后会影响到其他智能合约。

Reitwiessner指出,在编译器上出现错误总是可能发生的,而Solidity或Serpent (以太坊其他的智能合约语言)还可能存在其他未被发现的漏洞。

然而,他指出,在超过两年的发展中,这是在智能合约语言中发现的首个严重漏洞。


声明:此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。本网站所提供的信息,只供参考之用。

点击阅读全文

相关阅读