作者koucc (kcc)
看板DigiCurrency
标题Ethereum的软分叉隐藏被DOS攻击的风险
时间Wed Jun 29 02:55:10 2016
Ethereum近日发布了新的geth版本1.4.8,代号名为 DAO Wars
主要用来解决在The DAO中被偷的ether
说明文件中并解释了矿工可选择是否升级1.4.8,
以及升级与否可能有的影响与代价
执行此geth版本若加上 --dao-soft-fork 参数,则不会承认
与Dark DAO合约有关的传输,并且若某一block中含有此类
传输也将一并被拒绝
但此点却可能被攻击者拿来作为DOS攻击的手段,
其原因就在於被拒绝的传输无法收取gas费用,
因此攻击者可以故意发送一段超耗计算资源的合约,
然後在合约最後写上:
DarkDAO.splitDAO();
则矿工在执行完超耗计算资源的合约後看到最後这行
只能拒绝,并且无法收取手续费,也因此攻击者的ether
并不会减少,可以不断发起攻击
原本ethereum的设计是,若合约中有超耗计算资源的代码,
则会被收取高额的gas费用,若gas费用不够则不会被执行
今天攻击者可以附加高额的gas费用,来让他的合约看起来似乎
可被执行,如此一来许多节点将优先执行此交易,
然而产出的block却是无效的
相较於支援软分叉的矿工们,不支援软叉的矿工在此时将产出
较为有效的block,然而这些block最终可能走向分支
攻击原理大致介绍如上,但问题点很多,
例如对不支援软叉的节点来说,此合约是可以收取手续费的,
因为他们看到最後一行并不会拒绝掉,所以攻击者的ether究竟
会不会减少?
再来为何要执行到最後才发现此合约无效?
我的理解是合约由Solidity语言编译而成,既然是经过编译才部署的,
在不执行完之前是无法知道里面有什麽的
以上消息一出,eth行情又有如跳水一般直直落下
实际上软叉尚未开始运作,而DOS攻击也不可能真的发生,
但为了解决这个潜在风险,开发小组又得再找寻解决办法了,
现在被偷的那3.7M ether依然悬而未决,三种可能:
1.大方送给骇客
2.永久冻结,剩下的DAO token = 0.7eth
3.先冻结再靠硬叉搬回DAO
原本最可能的发展是2,现在又新增了变数
※ 编辑: koucc (140.96.180.33), 06/29/2016 02:58:16
1F:推 DarkerDuck: Simple is the best. ETH很早就有人说合约会BUG抓不完 06/29 03:15
2F:推 Rasin: 我觉得合约要嘛简化要嘛拿掉 但是拿掉好像就没亮点了 06/29 10:25
3F:推 john371911: 投票状况如何?会投票之後要不要硬叉吗? 06/29 23:34
4F:→ koucc: 合约算是它的精神所在,也可以写得很简单,DAO的是挺复杂没错 07/05 10:10
5F:→ koucc: 硬叉的消息一直到2hr前才有更新,目前开发团队的目标是做出 07/05 10:10
6F:→ koucc: 一个可供众人选择的硬叉,就像选择main net和test net一样 07/05 10:11
7F:→ koucc: 这次每个node可以自己选择是否叉到新的fork去,在新的fork中 07/05 10:12
8F:→ koucc: 所有HARDFORK_DAO_LIST中的帐户余额会被归0 (用最简单的 07/05 10:13
9F:→ koucc: 方式来解决这次事件)此次更动的code会有时间让所有人review 07/05 10:14
10F:→ koucc: 解决消息一出,底下留言算是一片叫好,因为算是回归了去中心 07/05 10:16
11F:→ koucc: 化的精神,开发团队提供一个选择,所有端点共同决定它的未来 07/05 10:17
12F:推 Rasin: 股价还是直直落XD 07/05 17:16
13F:推 john371911: 乙太币也跌了。那原本的代币会怎麽样? 07/05 17:49
14F:→ koucc: 原本的token据说会refund回ether 07/05 22:39
15F:→ koucc: 现在只要dev一有动作不管好坏都是跌啊,习惯它吧 07/05 22:40
16F:推 DarkerDuck: 还不错的解决方案 07/05 22:42
17F:→ koucc: 我有几批买在18,17,16高点的,看它下跌都无感了,离线储存中 07/05 22:43
18F:推 john371911: 感谢分享消息。那被盗走的呢?也可以拿回来了? 07/05 23:44