從兩個實際案例,來看智慧合約的漏洞
海倫/張詠晴編譯
2018-10-15 11:45

10月13-14日,由DoraHacks主辦的「區塊鏈安全Hackathon」在北京舉辦。賽前,來自長亭科技、獵豹科技、鏈安科技等多個區塊鏈安全公司的嘉賓,針對智慧合約的安全問題,帶來了主題分享。

 

巴比特整合現場精華內容,為大家詳解智慧合約漏洞產生之緣由、影響之巨大、解決之方法。

 

案例一:整數溢出(Integer overflow)

 

在智慧合約的漏洞類型中,幾位安全領域的專家強調了整數溢出(Integer overflow)的漏洞。

 

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

 

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

 

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

 

整數溢出漏洞看起來只是一個低級的錯誤,但有可能造成巨大的經濟損失,在區塊鏈智慧合約中,也許會被駭客利用,致使代幣嚴重超發,價值歸零。

 

而之所以產生諸如此類的問題,就是開發者在編寫合約時的不嚴謹、沒有使用SafeMath去做相關功能,或者沒有進行完備的溢出測試所致。

 

案例二:Owner權限問題

 

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

 

「Owner是Solidity語言中,對智慧合約開發者的稱呼,也就是項目方。如果合約發布後,Owner還具有非常大的超級權限,這就違背了區塊鏈共識共建的精神。」鏈安科技CTO郭文生表示。

 

本文為巴比特資訊授權刊登,原文標題為「8年損失12億美元,對於智能合約漏洞,你瞭解多少?