网赚论坛

标题: 太阳风暴:一个严重的安全漏洞利用,以太坊的,不仅仅是DAO的 ... [打印本页]

作者: jyw14749xdh    时间: 2017-10-21 18:30
标题: 太阳风暴:一个严重的安全漏洞利用,以太坊的,不仅仅是DAO的 ...
太阳风暴:一个严重的安全漏洞利用,以太坊的,不仅仅是DAO的2016-06-21 [url=]区块链与智能合约[/url]
作者:Muneeb Ali ,BLockstack实验室联合创始人 普利斯顿在读博士

译者:几何级数 比特天空网

原文链接:

https://blog.blockstack.org/solar-storm-a-serious-security-exploit-with-ethereum-not-just-the-dao-a03d797d98fa#.la1s9v1gz

Solidity,以太坊用于开发智能合约的类java-script语言,被发现有一个安全漏洞,可以影响整个以太坊,而不仅仅是DAO

以太坊合约常规性的调用其他合约。这是社区鼓励采用的行为,愿景是智能合约在任何地方进行互动。

结果是,当一个以太坊合约与另一个合约交互时,它会丧失对自己的程序控制和状态。这个脆弱性由Joey Krug和Martin Köppelmann发现,由 Cornell的博士生Philip Daian,公开。

1 如果你使用Solidity的调用功能(call),同时你自己的合约有一个可以被外部调用的函数可以修改状态,那么你无法对你的合约在调用外部函数之后的状态做任何假设。

2 上述问题,在DAO攻击时并非公知的。搜索Solidity调用的相关文件.它没有针对这个大规模的安全漏洞作任何提示,误导了开发者错误的觉得使用这个架构很正常很安全。

非常重要的,应区分这个漏洞和可重入性——一个已知的漏洞,并被用于攻击DAO。我们把这个漏洞叫做太阳风暴吧(因为它冲击以太坊智能合约,就像太阳风暴冲击地球上的通讯基础设施)。Daian并未给它命名,但是喜欢太阳风暴这个名字。


太阳风暴vs可重入性:

可重入攻击在下述情况下可发生:

1 合约A,函数A调用合约B。

2 合约B 调用合约A,函数A。

Daian的关键洞见是,甚至任何一个合约的一次外部调用都足以被攻击。太阳风暴攻击会在以下情况发生:

1 合约A调用任何外部合约

2 合约A有外部函数来修改状态(多数情况下都有)

所以,一个太阳风暴攻击的例子是:

1 合约A,函数A调用合约B。

2 合约A有另外一个函数C,与函数A共享状态。

2 合约B 调用合约A,函数C。

这意味着对于以太坊合约,要么(a)不能使用外部调用(b)不能有外部函数与执行外部调用的函数共享状态。

由于(b)实际操作很难,所以这意味着基本上合约就不能调用外部函数了。如果你一定要有外部调用,那么你只能在自己的逻辑都完成之后,当外部调用之后,你无法对你的合约在调用外部函数之后的状态做任何假设。

太阳风暴可以被理解为可重入性的一个变种,但是这是比可重入性更广泛的漏洞,而且容易被忽略。

这意味着什么?

小结:

1 这会冲击以太坊上的所有智能合约,不仅仅是DAO。这是以太坊用于开发智能合约的类java-script语言Solidity的问题。

2 可能在以太坊已经发布的合约中存在这种漏洞。开发者应当检查是否他们的合约具备脆弱性,并采取相应措施(转移资金,发布新合约)。

3 开发者在未来的合约中,应当对进行外部调用极度谨慎。避免外部调用,直到本问题被解决。


下一步:

需要对所有的已发布智能合约进行全面评估。我们也需要一个静态的分析器,来查找这些脆弱性,而且Solidity编译器应该能够发现这个问题。这个脆弱性并未被广泛知晓,Solidity文档应当提出警告。


译者评论:

1 这个漏洞是智能合约的开发陷阱,并不是以太坊系统的漏洞。也即,不用担心以太坊区块链和以太币的安全问题。

2 图灵完备的开发平台,程序开发中自然有许多陷阱,程序开发者应当对自身程序健壮性负责,不能程序崩溃了就怨开发平台。

3 以太坊团队存在未尽到告知义务的问题。相反,以太坊团队一直宣传开发智能合约是多么的简单。当然,以太坊团队可以辩解说他们没有意识到这个问题。但是,至少,进行笼统的安全提示是必要的,例如“智能合约程序可能存在漏洞,参与者可能损失部分甚至全部的资产。请在充分评估风险后再参与”。

4 基于墨菲定律,如果谨(bei)慎(guan)一点,可以认为当前已发布的所有智能合约都是不安全的。所有的智能合约都应当在修改后重新发布。那么我们可以认为当前的以太坊区块链数据已经是垃圾数据了。那么,以太坊被克隆或者山寨的可能性将付出水面,这是一个极度重要的话题,因为涉及到价值9亿美元的以太币。

5 智能合约的开发门槛并不像以太坊团队所描述的那样低,相反,其门槛甚至要高于区块链系统的开发门槛,因为区块链系统只能被数据攻击,而不能被代码攻击。所有的智能合约都应当像区块链系统一样,由开发团队进行全方位的攻击,确认安全后再发布。或者,在测试链(testnet)上先公开,由全网进行攻击,确认安全后再发布。

6 很显然,这个漏洞的公开对与以太币、智能合约,甚至整个区块链概念都是负面的。

7 一切客观的揭露风险和提示未来风险的行为,都可以被理解为以太黑。老猫发明了“反智”一词。

转自https://mp.weixin.qq.com/s?__biz=MzAxODk3MjEzOA==&mid=2247483660&idx=1&sn=a5c4a87e93f3d94bd9d936a60d0ffc45&scene=1&srcid=0621mJzOzWL1JOwVpSJiw4Yn&pass_ticket=GBIi6pB3aBOUiPX9i9boTBGpQrU5rrudTl4VgAV19vdR7HJ1Kq2U%2FFl0QJnRGUD7#rd








欢迎光临 网赚论坛 (http://www.caifuba.net/) Powered by Discuz! X3.1