DAO 駭客事件:以太坊經典的故事
2016 年 DAO 駭客事件的故事,以及社群的應對如何導致以太坊經典作為一條獨立鏈的誕生。
Date published: 2021年12月15日
這是一部由 Junion 製作的解說影片,講述了 2016 年 DAO 駭客事件的故事。這是加密貨幣歷史上最大的數位竊案之一,以及以太坊社群分叉區塊鏈的爭議性決定如何導致了以太坊經典的誕生。
本逐字稿是 Junion 發布的原始影片逐字稿 (opens in a new tab)的無障礙副本。為了提高可讀性,已進行了輕微的編輯。
發現 (0:00)
時間是 2016 年 6 月 13 日星期一。康乃爾大學的一位電腦科學教授正在檢查 DAO 的程式碼,這是加密貨幣領域中最具野心的專案之一。幾個月來,他一直主張暫停該專案,因為他認為存在某些可能使整個專案處於危險之中的缺陷。但今天,他發現了一個嚴重的漏洞:第 666 行的一個錯誤 (bug)。
他擔心這個錯誤可能會讓駭客像在 ATM 上一樣進行無限次的提款。即使攻擊者的帳戶裡只有 10 美元,他們也能夠一次又一次地提款,直到所有的錢都被提光。DAO 中投資了 2.5 億美元,每一分錢都處於風險之中。
DAO 背後的公司 Slock.it 承認了這個潛在的漏洞,但宣稱任何攻擊都是不可行的,因此所有資金仍然安全。他們透過交換兩行程式碼向 GitHub 提交了修改——這個修復將作為 DAO 框架 1.1 版的一部分包含在內。
但正當團隊宣布勝利時,一名駭客正秘密地跟隨他們的腳步,開發出一個利用這個確切錯誤的漏洞利用程式。現在是四天後的星期五,DAO 剛剛遭到駭客攻擊,損失高達 5500 萬美元。
就像 8100 萬美元的 SWIFT 駭客事件公開了中心化銀行業的漏洞,以及 WannaCry 勒索軟體攻擊揭露了電腦作業系統中的嚴重漏洞一樣,DAO 駭客事件暴露了在一個由程式碼決定一切的世界中,智能合約安全性的早期脆弱性。這讓以太坊社群感到震驚,他們爭先恐後地試圖重新奪回對區塊鏈的控制權。
這是史上最大數位竊案之一的故事,以及為了讓它從未發生過而試圖改寫歷史的大膽嘗試。
什麼是 DAO? (2:00)
讓我們來看看 DAO——去中心化自治組織 (DAO) 的縮寫。這個想法受到群眾募資的啟發。與其為不同的專案設立多個基金,不如設立一個基金來統管所有專案,而沒有比使用 DAO 更好的方法了。
在發布時,投資者每存入 1 顆以太幣就會收到 100 個 DAO 代幣。這些代幣賦予了他們對協定的治理權,並代表了他們在 DAO 中的份額。代幣持有者可以提交提案——例如,你可以提案投資 100 萬美元以換取 XYZ 公司 10% 的股份。
一旦提案通過了初步驗證,所有其他投資者將對其進行投票。在此期間,如果代幣持有者認為該投資能產生正向的預期價值,他們可以投贊成票;如果認為會產生負向的預期價值,則可以投反對票。他們還可以使用論壇來發表自己的意見並閱讀他人的看法。
當投票期結束且達到所有代幣 20% 的法定人數時,DAO 會自動將指定的以太幣轉移到代表該提案的智能合約中。從這些提案中產生的任何以太幣隨後將退還給資金庫。這就像一個大型的去中心化避險基金,旨在創造利潤。其理念是群眾的智慧將有助於創造最佳的投資機會。
然而,仍然需要一種方法來保護少數人免受多數人的壓迫。如果少數群體強烈反對一項他們無法在投票中勝出的提案,他們可以呼叫拆分 (split) 函數,將他們的以太幣從主 DAO 轉移到子 DAO,這實際上是將 DAO 一分為二,而不是投反對票。這個拆分函數在稍後會變得非常重要。
群眾募資 (4:01)
DAO 是有史以來最大的群眾募資專案,籌集了 1270 萬顆以太幣——當時價值 1.5 億美元。它發生在以太坊的早期時代,當時該專案受到了大量的炒作和投資者的錯失恐懼症 (FOMO) 影響。
在此之前,以太坊專案主要是一些隨意的概念驗證,但這是一個功能齊全且具有巨大潛力的專案。它完全免受任何駭客攻擊,由全球數百萬礦工提供安全保障,而且它是去中心化的——整個專案由以太坊上的一系列智能合約組成。
這是託管在世界上最安全電腦上的不可變的程式碼,確保了 DAO 的關鍵屬性:一個完全去中心化且自治的組織。一旦合約在 4 月 30 日部署,沒有任何單一實體——甚至連 Slock.it 也不行——可以對協定進行更改或停止其存在。它的程式碼已經被各種以太坊開發人員審計了無數次,並且所有人都可以查看和審查。
駭客攻擊 (5:02)
「孤獨,如此孤獨 (Lonely, so lonely)」——這是 DAO 第 59 號提案的名稱。這只是一個普通的拆分提案,但它實際上是駭客攻擊的起點。在駭客提交提案後,有一個標準的七天辯論期,任何人都可以自由加入。然而,沒有人加入這個拆分。
一個人獨自呼叫拆分、建立一個子 DAO,然後建立一個將所有以太幣發送回其錢包的提案,這是標準程序。這允許使用者取回由其 DAO 代幣支持的資金。現在七天過去了,駭客現在被允許呼叫拆分函數。沒有人懷疑任何事情。
然而,當拆分函數被呼叫時,社群意識到了一些令人震驚的事情。以太幣正以每小時 800 萬美元的速度從 DAO 中流失。社群爭先恐後地想弄清楚發生了什麼事。看起來攻擊者正在遞迴地呼叫拆分函數——一次又一次,數百次。
還記得四天前發生的那個錯誤修復嗎?遺憾的是,智能合約部署後無法編輯其程式碼,因此這個修復僅存在於 GitHub 上,作為正在製作中的一個完全不同的 DAO——The DAO 1.1 的一部分。這個小小的修復本可以阻止這一切——它所做的只是交換兩行程式碼,以便在實際支付之前更新餘額。
但如果沒有這個修復,任何人都可以在合約更新其餘額之前重複呼叫該函數來提取以太幣。這就像一台 ATM,在把錢交給你之前不會更改你的餘額。「我可以提款十美元嗎?等等,在此之前,我可以提款十美元嗎?等等,在此之前……」
羅賓漢小組 (6:55)
DAO 代幣持有者眼睜睜地看著他們的投資慢慢地從主 DAO 流失到子 DAO(也被稱為暗黑 DAO)。此外,隨著新聞的發布,以太坊的價格從 20 美元閃崩至 15 美元。必須採取一些行動,而唯一的方法就是在駭客之前將剩餘的資金抽乾。於是,一場抽乾資金的競賽開始了。
在世界的另一端,在里約熱內盧科帕卡巴納街區的公寓裡,Alex Van de Sande 醒來時發現他的手機被 Skype 訊息轟炸了。他轉向他的妻子說:「還記得我跟妳說過那一大筆無法被駭客攻擊的錢嗎?它被駭了。」
Alex 聯繫了一些其他未公開身分的開發人員,他們組成了一個綽號為羅賓漢 (Robin Hood) 的小組——這些白帽駭客將抽乾剩餘的資金並將其歸還給合法所有者。然而,他們沒有時間提出新的拆分提案,因為這需要七天的投票期。
相反,他們將目光投向了即將在幾個小時後結束的第 71 號提案。他們將加入該拆分,並使用相同的駭客技術將所有剩餘資金吸入這個子 DAO。自攻擊開始以來已經過去了六個小時,小偷已經成功竊取了 DAO 30% 的以太幣。但由於某種未知的原因,攻擊停止了。交易失敗,一切都結束了。
與此同時,Alex 正準備發動白帽攻擊以確保剩餘 70% 的資金安全。但他突然斷網了。在只剩下 30 分鐘的情況下,他瘋狂地打電話給他的巴西網路服務供應商 NET,但只得到了一個機器人語音的回覆:「我們發現您所在的街區出現了網路問題。」拆分提案結束了,他剛剛錯過了執行羅賓漢攻擊的時機。
第二天早上,Alex 試圖重新召集小組以滲透另一個拆分提案,但其他人都在忙。「我們覺得自己是史上最糟糕的駭客。我們被糟糕的網路和家庭事務給挫敗了。」
抽乾資金的競賽 (9:10)
在最初的攻擊發生四天後,DAO 再次遭到攻擊。資金流失得很慢——每輪只有幾顆以太幣——但它已經累積了幾千美元。這似乎是來自一個正在試水溫的攻擊者。在這一點上,羅賓漢小組必須採取行動了。
他們選擇滲透第 78 號拆分,因為他們已經確定了該提案的策展人,而且它很快就要結束了。他們聯繫了一些樂意捐贈其 DAO 代幣的巨鯨,使團隊能夠獲得 600 萬個代幣。羅賓漢合約擁有的代幣越多,它吸取以太幣的速度就越快。攻擊者加快了步伐,其他攻擊者也加入了進來。但多虧了這些捐贈,羅賓漢小組能夠超越他們。這使他們能夠確保 720 萬顆以太幣的安全——佔 DAO 的 55%。
分叉 (10:08)
主 DAO 現在已經被抽乾,所有資金都分佈在幾個子 DAO 中——兩個主要的是白帽 DAO 和暗黑 DAO。但所有的錢都被時間鎖定了。在 27 天的等待期結束之前,不能在子 DAO 下提出任何提案。即使在那之後,將資金發送到外部地址也需要提交提案並等待兩週。從本質上講,距離駭客能夠套現相當於以太坊總供應量 5% 的資金還有 41 天。
但駭客永遠也碰不到他的以太坊了。接下來發生的事情是區塊鏈歷史上最大膽、最具爭議的事件之一。社群決定他們不會讓駭客獲勝。他們想要改寫歷史,讓駭客攻擊中涉及的每一筆交易都被撤銷,每個人都能拿回他們的錢。他們選擇分叉以太坊。
區塊鏈就像一個交易清單,隨著每個區塊的開採而不斷增長。每筆交易都永遠根植於區塊鏈中。但如果超過 50% 的礦工串通一氣,他們就可以虛假地更改區塊鏈,隨心所欲地改寫歷史。通常這被稱為 51% 攻擊。但這次分叉沒有任何惡意——社群只是在收回從他們那裡被盜的錢。
程式碼即法律 (11:48)
儘管如此,並非所有人都贊同提議的分叉。他們認為程式碼即法律 (code is law)。在這種觀點下,攻擊者與其說是駭客,不如說是一位仔細閱讀合約條款的聰明律師。因此,實際上並沒有資金被盜,他們應該理所當然地有權獲得暗黑 DAO 中的以太幣。
值得注意的是,以太坊本身從未真正被駭客攻擊——它只是一個寫得很糟糕的智能合約被利用了。這是兩碼子事。此外,他們認為區塊鏈上發生的事情是不可變的,無論在什麼情況下都不應該被篡改。
在最初攻擊發生的一天後,攻擊者在 DAO 的 Slack 群組聊天中發送了一封公開信,並用他們的私鑰進行了簽章:
「致 DAO 和以太坊社群:我已經仔細檢查了 The DAO 的程式碼,並合法地索取了 300 萬顆以太幣,我想感謝 DAO 給予的這份獎勵。我對那些將使用這種有意設計的功能描述為『盜竊』的人感到失望。我是根據智能合約條款使用這個明確編寫的功能。軟分叉或硬分叉將等同於沒收我合法且正當的以太幣。這樣的分叉將永久且不可挽回地破壞不僅是對以太坊,而且是對智能合約和區塊鏈技術領域的所有信心。毫無疑問:任何分叉,無論是軟分叉還是硬分叉,都將進一步損害以太坊並摧毀其聲譽和吸引力。」
經過進一步檢查,人們意識到該簽章是無效的,因此這封信只是由自稱是攻擊者的人寫的。
另一方面,支持者認為「程式碼即法律」的說法過於極端,人類應該透過社會共識擁有最終決定權。不應允許駭客從漏洞利用中獲利,因為這在道德上是錯誤的,而且很可能是非法的。但最重要的是,DAO 實在是大到不能倒。它持有大約 15% 的以太幣總供應量。
以太坊經典 (14:34)
在一場呼應 2008 年金融危機的事件中,以太坊開發人員對 DAO 進行了紓困。以太坊的創建者和首席開發人員 Vitalik Buterin 對推動分叉毫不掩飾。在後來的一次採訪中,他說:「一些比特幣使用者認為硬分叉在某些方面違反了他們最基本的價值觀。我個人認為,將這些基本價值觀推向如此極端是愚蠢的。」
這些觀點主導了以太坊社群的多數人。一項具爭議的社群投票——其中 1 顆以太幣等於一票——顯示 87% 的人支持分叉。因此,在第 1,920,000 個區塊,世界各地的電腦節點更新了他們的軟體並接受了分叉。來自 DAO 和子 DAO 的所有以太幣都被轉移到了一個退款合約中。
但事情並沒有就此結束。最初的以太坊區塊鏈——那個帶有 DAO 駭客事件的區塊鏈——繼續運行。事實上,它還在成長。反對分叉的礦工繼續開採區塊,交易仍在進行。第二天,Poloniex 上架了該代幣,並開始以每顆 2 美元的價格交易。這條鏈後來被稱為以太坊經典——原始的、未經更改的區塊鏈。
如果你在分叉前持有以太幣,你現在將擁有 1 顆以太坊和 1 顆以太坊經典。如果你在 DAO 中持有 1 顆以太幣,你將能夠從退款合約中提取 1 顆以太坊。而如果你剛剛駭入了 DAO,你將在以太坊經典中賺到一筆可觀的財富——大約 700 萬美元。
DAO 的遺產 (16:14)
最初,以太坊經典作為一種替代方案獲得了發展動力,擁有一個由不同意紓困的區塊鏈基本教義派組成的強大社群。但從那時起,以太坊經典未能獲得關注,實際上只作為一個幾乎沒有實用性的想法而存在。雖然以太坊是數千個協定的所在地,但以太坊經典只有幾個基本的協定。很明顯,分叉贏了。
兩個月後,羅賓漢小組將他們 290 萬顆以太坊經典轉移到 Poloniex,並將其全部賣出換成以太坊,試圖拋售壓低價格。14% 被成功轉換,但 86% 被 Poloniex 凍結並退還給了該小組。羅賓漢小組在以太坊經典網路上為受 DAO 駭客事件影響的使用者設立了一個退款合約。
至於駭客,他們帶著 360 萬顆以太坊經典全身而退——今天價值 1.5 億美元。但如果沒有分叉,那 360 萬顆以太坊今天將價值超過 70 億美元。
DAO 的深遠影響 (17:26)
值得注意的是,為了避免混淆,DAO 現在通常被稱為創世 DAO (Genesis DAO),因為它是第一個 DAO,但絕對不是最後一個。儘管最初遭遇挫折,但 DAO 變得越來越受歡迎。MakerDAO 治理著穩定幣 DAI,而去中心化金融 (DeFi) 協定(例如尤尼斯瓦普及其 UNI 代幣)通常都有一個治理 DAO。這些 DAO 都是建立在先前專案的經驗之上,以創建更加多功能和成功的組織。
但創世 DAO 是同類中的第一個,作為一項實驗而創建——一項昂貴的實驗——在頂峰時期控制著 2.5 億美元,即以太坊總供應量的 15%。首席開發人員 Christoph Jentzsch 原本只期望它能籌集 500 萬美元,後來他說他後悔沒有設定上限。對於這麼大的一個實驗來說,它出現得太早了,而且肯定是大到不能倒。
創建智能合約就像開發自動駕駛汽車——這是一項重大責任,需要進行廣泛的測試以避免事故。即使有了這種新的謹慎態度,DeFi 協定仍然會遭到高達 5000 萬美元的駭客攻擊,有些甚至是在經過專業審計公司的審計之後。但自從 DAO 駭客事件以來,就再也沒有紓困了。以太坊社群現在更加強大,準備好邁向更大、更具野心的專案,構建下一代數位應用程式。