作者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