iT邦幫忙

2022 iThome 鐵人賽

DAY 13
0

The DAO Hack

我們在上一篇和大家提到了第十關 Re-entrancy(可重入攻擊),那麼下一篇呢就放輕鬆點來聽個故事吧,在第十四天我想和大家說說曾在 2016 實際發生的 The DAO Hack,和事件後造成的影響,那麼就開始囉 xD

The DAO 介紹

(Decentralized Autonomous Organization),去中心化自治組織,在區塊鏈上的組織,將組織的協議、規定、章程等等都寫在合約裡,所有組織的運作皆依靠智能合約的運行,合約即為法律,在 2016 年 月時出現了一個致力於投資的眾籌組織 「The DAO」,合約上會發售 Token 來集資,再用投票的方式來決定募到的款項要投入哪個企業 or 技術(有參與 The DAO 計畫的),你可以使用你和 The DAO 購買的 Token 進行投票,而最後的獲益則依照智能合約內的程式碼來做分配。

The DAO 啟航

在 2016 年 5 月時,The DAO 開始眾籌,而這個概念在當時極度火熱,而受到大家的推崇,在極短的時間內募集到了等同於 1.5 億美元價值的以太幣,好多人都覺得 The DAO 超強,非常的看好他,只可惜,The DAO 只存活了 3 個月就被駭了 QQ。

The DAO 合約

當你使用以太幣購買 The DAO Token 後,該怎麼取回你的錢呢? 這個動作在 The DAO 的合約裡需要透過拆分的方式,就是執行 splitDAO 函數,這個 splitDAO 不只是唯一取回資金的方法,更能利用這個方法來建立自己的子基金(child DAO),它能夠將手中的 Token 換回以太幣並且匯入你的子基金內部,而如果是自己成立一個子基金,然後再把這些基金通通用來投資自己,這樣就能把錢取出;拆分前有七天的緩衝期,供大家討論此拆分是否合宜,要不要加入,而順利拆分之後會進入二十八天的鎖定期,將以太幣存入子基金裡面後需要二十八天後才能取出,

Re-entrancy


(圖片取自Youtube)
可以從圖片中看到,TheDAO 合約並沒有先扣款才轉帳,而是先轉帳才扣款,這和我們昨天提到的 Re-entrancy Attack 一致,而 Hacker 則使用這個重入攻擊轉走了近 1/3 合約內的以太幣。

討論

由於 spiltDAO 成功拆分後有二十八天的鎖定期,因此還有機會能補救。

以太坊社群展開了討論,關於該如何應對分為兩派說法,一是認為該把交易回朔,二則認為不需要理他,因為他並無不法,在區塊鏈上合約即為法律(Code is law),因此駭客並沒有做錯事,且該保持去中心化的不可竄改性的理念,不能有中心化的干預;核心開發團隊認為應該回朔,並不是要干預去中心化,而是被駭客盜走的以太幣數量過為龐大,約為當時以太幣總發行量的 14%。

補救

方案一 : 軟分岔(Soft Fork)
「與 The DAO 相關的帳戶,不得做出任何交易」
但升級後的以太坊卻出現了一個嚴重的問題,「如果你的帳戶和 The DAO 相關則判斷交易失敗」,而當交易失敗後不收取 gas,結果網路上充斥著大量失敗交易,造成了阻斷服務攻擊 (Denial-of-service attack),於是軟分岔的方案宣告失敗。

方案二 : 硬分岔(Hard Fork)
「強制把 The DAO 合約上的錢強行轉到某合約,而該合約會將錢退回投資人」
這個方案在以太坊社群吵起來了,太可怕了憑甚麼自己這樣改呢,我們可是去中心化的區塊鏈啊QQ,但以太坊社群執行了一次投票,而大部分的礦工認為應該執行硬分岔,最後也執行了硬分岔,駭客沒有成功得利。

影響

投票不足以表決這次的問題,因此部分礦工留在原先的鏈上繼續挖礦,過了好長一段時間才終於有人使用,稱為 ETC(Ethereum Classic),也為了避免兩條鏈的交易混淆,為兩條鏈加上了 ChainID,至此事件才算是真的落幕。

結語

其實在當初 The DAO 推行後過一陣子就有資安專家表示 The DAO 的合約有問題了,但畢竟智能合約是沒有辦法更改的,指出有問題也無效,只有大家都不使用這份合約時才能根除,所以問題還是發生了;希望大家也都能讀懂 The DAO Hack 的事件,明天開始就會繼續 Ethernaut 的關卡喔。

Reference

https://etherscan.io/address/0x304a554a310C7e546dfe434669C62820b7D83490#contracts
https://www.youtube.com/watch?v=ggamLQjKUiY
https://www.gemini.com/cryptopedia/the-dao-hack-makerdao
https://cypherpunks-core.github.io/ethereumbook_zh/19.html


上一篇
Day 13 - Re entrancy
下一篇
Day 16 - Privacy
系列文
智能合約漏洞演練 - Ethernaut18
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言