以太坊早期智能合约编程语言之一的Serpent已不再安全,不适合继续使用。
这可能是区块链安全公司ZeppelinSolutions上周发布的一份对于以太坊编程语言Serpent的审核报告中最重大的新闻了。这一结果指出了这一编程语言的数十个问题,其中包括八个关键漏洞。
两个月前,一家基于以太坊是预测市场Augur聘请Zeppelin对这一语言进行审核。而Augur拥有近200万美元的代币保管在以Serpent编写的智能合约中,因此该公司有充分的理由对这一存在已久的语言的安全性感到担忧。
Augur是早期的以太坊项目之一,而在编写其代币合约之时,Serpent是可以使用的主要智能合约语言。但此后不久,Solidity被引入并取而代之作为以太坊的主打智能合约编程语言,至此Serpent被搁置在一边。
即便如此,Augur首席执行官JoeyKrug表示,几乎没有发布任何公开警告提示这些可能会阻止Serpent按预期执行代码的问题。
他对CoinDesk表示:
“没人曾站出来表明Serpent不安全或其作用已有所折损了。只不过该语言没有[Solidity]那么受欢迎而已。”
尽管Augur计划在将来某一时刻迁移至另一种智能合约语言,但对这一编程语言进行审核的结果基本上迫使该项目不得不尽快转移。而在Zeppelin通知Augur所涉及的安全问题之后,Augur迅速将其REP代币转移到以Solidity语言编写的安全ERC-20代币合约之中。
“质量低劣”且“漏洞百出”
而对于其他想要知道他们是否应该照做的人来说,ZeppelinSolutions已经在其长达36页的报告中对该审核结果作出了详细说明。
Zeppelin在一篇博文中称Serpent项目“质量低劣”且“漏洞百出”,警告开发人员在其许多关键问题得到解决之前,不要使用该语言。
这一消息立即促使以太坊创始人VitalikButerin发布推文,称该编程语言“技术已经过时”,并警告称它缺少足够的“安全保护措施”。
而对于Augur来说,Serpent最关键的一个漏洞就是黑客可更改REP代币合约的创建日期,从本质上讲就是冻结了代币供应。
Krug说道:
“你可以让合约认为其实际上还没有正式创建,所以基本上任何转账都无法实现。”
Krug表示,如果Serpent只存在这一个问题,那么他会很高兴地修复代码,并继续使用该语言。但是,审核中发现的问题太多了。
所以相反地,Augur按照Zeppelin概述的更新路线,重新以Solidity语言编写了其REP代币,并将其部署在了以太坊上的新ERC-20合约之中。然后再将冻结的REP代币迁移至新合约之前,其有效地入侵了自己的Serpent智能合约,冻结了REP代币。
而在另一篇博文中,Zeppelin强烈要求仍在使用Serpent语言的以太坊项目遵循类似的迁移路径,将其代币移至更为安全的Solidity合约中。
需要更多关注
Serpent编程语言和编译程序都是由Buterin编写的。但事实上,完全由一个人编写的代码本身就有可能成为Serpent存在这些问题的起因。
Zeppelin在报告中写道:
“对代码关注的越少就意味着越少的漏洞会被注意到。”
Zeppelin同时指出自2015年10月到现在,Serpent已经存在有两年了,而且很少有提交指令(commit)。而且,现在几乎没人使用Serpent,因此代码中存在的或者已经得到修复的问题就鲜少为人所发现。
另一方面,Solidity由以太坊创始人之一GavinWood领导的团队编写。而由于Solidity使用更为广泛而且相较于Serpent有更多的活动——据Zeppelin数据显示位30倍的合并申请(pullrequest)、20倍提交指令(commit)以及8倍的代码贡献者,所以较新的程序不太可能会遇到同样的问题。
而至于开发者应该使用什么语言来取代Serpent,Zeppelin的报告中表示Solidity是当前最好的替代语言。然而,报告中也建议开发者考虑Serpent的继任语言Viper,指出Viper看起来“要优于”Serpent。但在推文中,Buterin则建议开发者暂时先不要使用Viper,直到Viper首先通过外部审核。
对Solidity的审核如何?
但是,也许Zeppelin对Serpent编译程序的审核引起的更为令人担忧的问题之一就是,Solidity本身也没有经过审核。鉴于目前数百万美元的代币由以Solidity语言编写的智能合约进行管理,包括Krug在内的一些人都对这一消息感到不安。
而使得对Solidity的担忧更添不安的就在于,此次Zeppelin发布编译程序审核报告之前,Parity钱包由于其本身代码中存在的漏洞而被黑客入侵,盗取了价值3000万美元的加密货币,这一漏洞使得黑客能够将三个多重签名钱包转变为零签名钱包,从而抽走资金。
在此次攻击之后,Parity在一篇博文中指责Solidity表示“这一漏洞的一部分责任在于Solidity语言,以及其在当前版本的情况下,难以理解对功能的执行权限。”
但在一年以前发生过一次更大规模的以太坊盗窃事件,当时黑客利用Solidity的代码漏洞从一个叫做TheDAO的项目中盗走了5000万美元的以太币。这一损失如此之大,致使以太坊背后的开发者在协议中实施了硬分叉,从而回溯其交易历史。
在很多关键行业中,软件代码审核都是必需的,而Zeppelin的首席执行官DemianBrener则认为智能合约代码也进行需要同样的过程。
他在写给CoinDesk的一封邮件中写道:
“鉴于Serpent中发现的漏洞数量,我们认为编译程序审核以及代码审核应成为最佳实践。”
他补充表示,目前Zeppelin正与以太坊基金会就此进行讨论,以达成这一目标。
同时,Krug总结了他对这一事件的看法,并说道:
“总的来说,还有更多的东西需要进行审核。”
2020-02-15 11191
2018-01-03 10380
2021-03-18 7626
2018-06-01 6633
2019-06-22 6068
2019-05-03 5800