當前位置:
首頁 > 最新 > 預警:EOS智能合約同樣存在溢出漏洞可能

預警:EOS智能合約同樣存在溢出漏洞可能

4月28日,成都鏈安科技向巴比特透露,其研發的面向區塊鏈形式化驗證平台VaaS(Verification as a Service)檢測發現,基於EOS區塊鏈的代幣合約同樣可能存在BEC代幣合約類似的整數溢出漏洞。

最近BEC代幣被盜事件,由於一行代碼的安全漏洞引發其市值幾乎歸零。該漏洞是由於合約開發者在一段代碼中未使用safeMat保證計算的安全性,從而導致黑客利用batchTransfer函數出現了整型溢出的漏洞,黑客利用該漏洞盜走

57,896,044,618,658,100,000,000,000,000,000,000,000,000,000,000,000,000,000,000.792003956564819968 個BEC代幣。

針對此漏洞,VaaS形式化驗證平台對EOS區塊鏈平台的智能合約進行了整型溢出漏洞檢查和安全驗證,發現基於EOS平台開發類似智能合約同樣可能出現整型溢出漏洞。

以下為鏈安科技向巴比特提供的其設計的一個通過向多人轉賬的智能合約核心函數transfer實例,演示EOS智能合約漏洞:

源代碼如圖1所示:

圖1:transfer函數源碼,同時向4個人轉賬

假設攻擊者調用該合約的transfer函數同時向4個人進行轉賬操作,並將balance參數的值設為2的63次方,函數調用過程如圖2所示:

圖2:黑客調用transfer函數同時向4人轉賬

接著,查詢以上地址餘額可發現,被轉賬人(tester)的餘額(100)沒有減少,而接收者(tester1、tester2、tester3、tester4)的賬戶餘額由於amount變數的溢出產生了非常大的數目(2的63次方),如圖3所示

圖3:接收者的賬戶餘額產生了非常大的數目

漏洞分析:balance是uint64數據類型,當取值為2的63次方時,由於小於uint64可取值的最大值,於是繞過了對balance的溢出邊界檢查;但是,當amount=balance*4計算時,amount便發生了溢出,使其值等於0,由於amount此時繞過了被減數大於減數的檢查,從而實現不消耗被轉賬人的balance的情況下,讓轉賬人的balance獲取非常大的值(2的63次方)。

針對此類問題,鏈安科技也提出解決方案:在智能合約部署前進行安全性和功能正確性的形式化驗證,事先預防這類問題的發生;針對EOS、以太坊等平台開發安全的智能合約開發模板,規範智能合約的開發,提高合約安全性,同時降低合約開發門檻和難度;合約開發者使用EOS區塊鏈平台提供的智能合約編程Math API介面可防止該類型溢出漏洞。如合約開發者可將uint類型的數據,先轉換成doule類型的數據,然後再使用EOS區塊鏈平台提供的Math API中的double_add、double_mult等函數進行運算,最後將計算結果再轉換成uint類型數據輸出。但Math API介面沒有對負數情況進行檢查,如果double運算的結果為負數,再將其強制轉換成uint類型時,將同時返回一個錯誤的較大的數值,針對此問題開發者需謹慎使用。

EOS官方做出了如下回復:

Thomas對形式化驗證用於智能合約安全檢測表示稱讚,認為這一問題的出現主要表明智能合約開發者如果不夠仔細。同時還指出,核心的EOS原生令牌合約不會受到這種形式的攻擊。

成都鏈安科技由電子科技大學信息與軟體工程學院楊霞副教授創建並獲得分散式資本投資,團隊成員由20多名具有海外知名高校(如耶魯、UCLA)留學經歷的副教授、博士、碩士組成,其研製的高度自動化的區塊鏈形式化驗證平台VaaS(Verification as a Service)通過對合約代碼進行嚴格的安全驗證,能夠最大程度避免邏輯漏洞和安全漏洞,提高智能合約的安全性與可靠性。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 巴比特資訊 的精彩文章:

香港金管局召集6家銀行打造區塊鏈平台,未來將與新加坡系統連接
泛城資本董事長、快的打車創始人陳偉星:達成共識比技術更重要

TAG:巴比特資訊 |