V神要哭,以太坊智慧合約漏洞百出,“保險池”概念緊急來救火
4月22日中午,有黑客利用以太坊 ERC-20智慧合約中BatchOverFlow漏洞攻擊BEC(美鏈的代幣“美蜜”)智慧合約,成功向兩個地址轉出了天量級別的 BEC代幣,導致市場上海量BEC被拋售。此事使得當日BEC的價值幾乎歸零。64億人民幣瞬間蒸發。
4月25日,僅僅三天後,另一個智慧合約SmartMesh(SMT)曝出漏洞,交易所表示,因SMT出現異常交易,各交易平臺暫停SMT的充提和交易。
這已經不是以太坊第一次被曝出智慧合約漏洞問題。雖然以太坊僅僅誕生了四年,但是隨著人們越來越多地瞭解區塊鏈技術,以太坊的熱度逐漸增加。然而,最新的研究顯示,基於以太坊架構,被稱作是“最安全、最可靠、最方便”的智慧合約技術卻漏洞百出。
2016年6月17日,發生了在區塊鏈歷史上沉重的一次攻擊事件。由於以太坊的智慧合約存在著重大缺陷,區塊鏈業界最大的眾籌專案The DAO(被攻擊前擁有1億美元左右資產)遭到攻擊,導致300多萬以太幣資產被分離出The DAO 資產池。
同年11月,同樣基於以太坊的電子錢包服務商Parity,也出現了嚴重的安全問題,大約有1.5億美元的使用者資金遭到影響,突然無法正常使用和交易。
2017年7月21日,智慧合約編碼公司Parity警告1.5版本及之後的錢包軟體存在漏洞,據Etherscan.io的資料確認有價值3000萬美元的15萬以太幣被盜。
2017年11月8日,以太坊Parity錢包再出現重大bug,多重簽名漏洞被黑客利用,導致上億美元資金被凍結。
為何智慧合約漏洞頻出?難道就沒有辦法解決了嗎?
1
什麼是以太坊智慧合約
智慧合約現在是區塊鏈中最為大家熟知的概念。但智慧合約究竟是什麼?很多人還是一知半解。智慧合約就是一種儲存在區塊鏈中的計算機程式。
區塊鏈從本質上來說,就是一種共享的會計分類賬簿,可以利用虛擬加密貨幣和計算機網路來追蹤與記錄各種資產的狀態,同時有效保證分類賬簿的安全,以防出現一些惡意篡改現象。
第一代區塊鏈技術就是比特幣。它能為互不相識的交易雙方提供牢固保障,保證雙方資金能夠按照合同規定順利完成轉賬。簡單地說,就是保證交易雙方不會受到欺詐等負面事件影響。
第二代區塊鏈技術就是以太坊。有了智慧合約,交易雙方可以建立一個系統,從某一方的賬戶中取錢再存進餘額不足的另一方賬戶中。從理論上來說,智慧合約能夠用於各種各樣金融協議的程式碼編寫,其中包括衍生合同、拍賣合同以及各種基於區塊鏈的第三方保管賬戶合同等等。
以太坊是一個開源的區塊鏈底層系統,就像安卓一樣,提供了非常豐富的API和介面,讓許多人在上面能夠快速開發出各種區塊鏈應用。目前已經有超過200多個應用在以太坊上開發。
而以太坊很大的特色就是能夠實現智慧合約。所謂智慧合約(Smart Contract),是密碼學家Nick Szabo在1994年首次提出以數字形式定義的一系列承諾(promises) ,包括合約參與方可以在上面執行這些承諾的協議。
智慧合約的智慧在英語中對應的單詞是Smart,和智慧手機(Smart Phone)中的Smart意義相同,表示非常靈活的意思,並不是指人工智慧(AI)。智慧合約一旦設立指定後,能夠無需中介的參與自動執行,並且沒有人可以阻止它的執行。
以太坊去中心化的核心是其可以執行圖靈完備的指令碼語言,而開發以太坊智慧合約則有四種語言:Serpent、Solidity、Mutan、LLL。這些語言都是面向底層設計的語言。目前來看,Solidity 是首選語言,這是由於它內建了 Serpent 語言的所有特性,語法類則似於使用廣泛的 JavaScript。再加上 Solidity 的語言特性較少,該語言則可以更簡單地實現完備的智慧合約體系。
以太坊是一個開源的有智慧合約功能的公共區塊鏈平臺。區塊鏈上的所有使用者都可以看到基於區塊鏈的智慧合約。但是,這會導致包括安全漏洞在內的所有漏洞都可見。智慧合約語言 Solidity 自身與合約設計都可能存在漏洞。如果智慧合約開發者疏忽或者測試不充分,而造成智慧合約的程式碼有漏洞的話,就非常容易被黑客利用並攻擊。並且越是功能強大的智慧合約,就越是邏輯複雜,也越容易出現邏輯上的漏洞。
2
智慧合約為何充滿漏洞?
根據倫敦大學學院計算機科學系副教授伊利亞•謝爾蓋最新的研究論文中顯示,通過基於以太坊平臺的近100 萬份智慧合約進行每份合約/10秒的分析後發行,有大34200份智慧合約很容易遭到黑客攻擊。
此外,他們還通過3759份智慧合約抽樣調查,發現其中3686份合約有89%的概率含有漏洞。以太坊作為一個分散式應用平臺,如此高的漏洞產生概率,不知道V神對此做何感想。
那麼問題來了,以太坊智慧合約為何充滿漏洞?
區塊鏈為智慧合約提供可信執行環境,智慧合約為區塊鏈擴充套件應用。而在以太坊上的智慧合約,能夠控制區塊鏈上各種數字資產進行復雜的操作,隨著智慧合約開始獲得越來越多的使用,人們也發現,就像現實世界的合同一樣,如果沒有認真稽核的話,其中就有可能出現漏洞,並且被壞人利用。
開發智慧合約需要一個全新的工程思維,它不同於我們以往專案的開發。因為它犯錯的代價是巨大的,並且很難像傳統軟體那樣輕易的打上補丁。就像直接給硬體程式設計或金融服務類軟體開發,相比於web開發和移動開發都有更大的挑戰。
據有關調查統計,以太坊主要漏洞情況描述如下表:
(本圖為雷鋒網設計並整理)
但其實究其根本,之所以如此多的智慧合約出現同類漏洞,其背後是混亂的數字代幣發行現狀。
一些ICO(數字貨幣發行)通過智慧合約發行代幣的代價,成本已經低之又低。業內人士指出,一個程式設計師只要花5分鐘,從網上抄一些智慧合約程式碼,稍做修改,就可以發行一個代幣。如果再寫個白皮書,找幾個知名顧問站臺,就可以在數字貨幣交易所裡發行幾千萬甚至上億的專案。既沒有交易所的監管,又抱著“一夜暴富”的期待,這些發幣團隊的技術實力、對安全的防範意識,自然很難得到保證。
內參君還是要提醒的是,在數字貨幣的世界裡,各種漏洞都潛伏其中,投資者需要做好漏洞隨時暴露的心理準備,同時,平臺自身的資質,也是投資者需要仔細考慮的重要因素。
3
“保險池”概念緊急救火
據騰訊玄武實驗室的資訊保安人員宋凱透露,其實很多虛擬貨幣交易在過程中都出現過安全問題,事後的解決方案大多是回滾,也就是將交易資料回溯到攻擊之前的狀態。這樣的補救措施只能使使用者賬戶中擁有同樣數量的新幣,但因為攻擊導致BEC幣價大跌,事實上,使用者並沒能真正挽回損失。
近日,以太坊基金會(Ethereum Foundation)開發者Alex Van de Sande公佈了的一項有關“保險池”的提議,他認為這個方案能夠降低網路分裂的風險——由於智慧合約程式碼漏洞造成資金凍結的事故,在尋找解決方案的過程中可能產生分歧,從而帶來分裂網路的風險。
Van de Sande是以太坊Mist瀏覽器團隊的領導者,他在一篇文章中提到,建立一個存有專用保險資金的“贖回合約”(recovery contract)能夠降低個人或組織通過爭議性硬分叉來獲得部分或全部因為程式碼漏洞而失去的資金。最典型的例子就是,在Parity的多重簽名錢包合約程式碼庫爆出漏洞之後,錢包中價值3.2億美元的以太坊(ETH)被凍結,維持在無法花費的狀態。
不過,Van de Sande的提議最具爭議性的部分應該是其涉及了為超過51.3萬ETH發行贖回代幣的計劃,即因合約程式碼庫錯誤鎖定在Parity多種簽名錢包中的以太坊數量。
Parity團隊表示無意通過爭議性硬分叉的方式取回資金,因此,Van de Sande認為他的這項計劃將會讓受害者(包括大多數以太坊核心開發者)成為這個新基金的利益相關者。這樣一來,這個保險池的創立將更有機會引起更多人的關注。
內容來源:鏈內參
以下是我們的社群介紹,歡迎加入各種合作、交流、學習)