8年損失12億美元,對於智慧合約漏洞,你瞭解多少?

買賣虛擬貨幣

10月13-14日,由DoraHacks主辦的區塊鏈安全Hackathon在北京舉辦,賽前,來自長亭科技、獵豹科技、鏈安科技等多個區塊鏈安全公司的嘉賓圍繞智慧合約的安全問題帶來了主題分享。巴位元整合現場精華內容,為大家詳解智慧合約漏洞產生之緣由、影響之巨大、解決之方法。

什麼是智慧合約?

智慧合約是一種旨在以資訊化方式傳播、驗證或執行合同的計算機協議。它允許在沒有第三方的情況下進行可信交易,這些交易可追蹤且不可逆轉。其概念於1995年由Nick Szabo首次提出。

“智慧合約是區塊鏈的核心技術之一,是多方參與場景中的共識規則,更是智慧合約是價值傳遞的中樞。之所以區塊鏈出現以後安全問題變得前所未有的重要,是因為智慧合約實現的是一種價值傳遞,區塊鏈上的每一個數字都是價值,每個漏洞導致的數字變化,其背後就是鉅額的價值損失。”鏈安科技CTO郭文生表示。

根據獵豹科技高階研究員隋欣整理的資料,2011年至2018年安全事件統計顯示:

可以看到,雖然智慧合約安全事件佔比並不是最高的,只有6.67%,但是其造成的損失是巨大的,竟然已經達到12.4億美元。

其中,最典型的幾起智慧合約重大安全事件包括:

 2016年6月The DAO安全漏洞,導致5000萬美元的損失 2017年7月Parity多簽名錢包兩次安全漏洞,分別導致3000萬美元、1.52億美元的損失。 2018年4月BEC代幣被盜事件,由於一行程式碼的安全漏洞引發其9億美元市值幾乎歸零。

在Hackathon上,獵豹科技高階研究員隋欣對智慧合約漏洞型別做了如下總結:

鏈安科技CTO郭文生也對以太坊智慧合約開發中常見的漏洞進行了梳理:

案例一:整型溢位

在上述智慧合約漏洞型別中,整型溢位漏洞被幾位安全領域的專家著重強調。

簡單來講,我們知道在計算機中,有符號整數會在最高位用0表示正數,用1表示負數,而無符號整數則沒有這種限制。而之所以出現整型溢位,是因為將資料放入了比它本身小的儲存空間中。

例如,一個uint8,只能儲存在範圍[0,255]的數字,試圖儲存256到一個uint8變數,則結果將變成0(100000000)

如果沒有檢查使用者輸入又執行計算,導致數字超出儲存它們的資料型別允許的範圍,Solidity中的變數就可以被用來組織攻擊。

整型溢位漏洞看起來只是一個低階的錯誤,但有可能造成巨大的經濟損失,在區塊鏈智慧合約中,也許會被駭客利用,致使代幣嚴重超發價值歸零。而之所以產生諸如此類的問題,就是開發者在編寫合約時不嚴謹所致,或者沒有使用SafeMath去做相關功能,或者沒有進行完備的溢位測試,這些溢位問題應該可以放在虛擬機器層檢測和預防。

案例二:Owner許可權問題

在對以太坊鏈上智慧合約進行安全審計後,可以發現很多合約具有Owner許可權被盜或過大等問題。

“Owner是Solidity語言中對智慧合約開發者的稱呼,也就是專案方。如果合約釋出後,Owner還具有非常大的超級許可權,這違背了區塊鏈共識共建的精神。”鏈安科技CTO郭文生表示。

Owner許可權過大會產生什麼問題呢?

郭文生表示,對以太坊ERC20智慧合約安全事件進行分析後發現,超級許可權被盜可能存在如下安全隱患:

1. 隨時凍結代幣轉賬;2. 任意鑄造發行新的代幣3. 銷燬任意賬戶內的代幣

他進一步解釋:“Owner許可權如此之大,說明眾多所謂的去中心化的產品,實際上隱藏一個潛在威脅,控制權掌握在開發者手上。這裡存在兩重風險,一是如此強大的Owner許可權被駭客盜取,駭客可以對其代幣為所欲為,操縱整個代幣的價值,對整個加密貨幣生態造成影響,後果不堪設想。二是專案方本身,也不能完全保證他不會作惡。因此,在智慧合約上線之後,應當限制Owner許可權,採取社羣自治、合約自治的方式,這才符合區塊鏈的精神。”

如何解決智慧合約的安全問題?

既然發現了這些問題,就要想辦法去避免,郭文生給出了幾點建議:

首先,對於開發者,要儘量參考有價值的模版,儘量使用安全庫。因為在審計過程中可以看到,很多合約的錯誤是重複雷同的,這就是因為採用了偽劣的核心模版。

其次,開發完成後,要進行全方位的功能和編譯測試,功能上要保證滿足客戶需求,測試方面一是重視編譯錯誤和警告,尤其是那些未知錯誤的提示;二是要具備完備的人工設計測試案例;三是進行靜態分析工具測試;四是進行動態分析工具測試,進而發現執行過程中的隱藏問題。

最後,不可能完全依賴開發人員,需要第三方審計公司來幫助完善程式碼安全性。這些公司內部會有精度更高、更完備的測試工具,在形式化驗證之後,還會進行人工漏洞復現和人工複審。


免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;