EOS.CYBEX孵化團隊鏈安科技發現EOS智慧合約可能出現溢位漏洞

區塊鏈鉛筆發表於2018-04-28
640?wx_fmt=png&wxfrom=5&wx_lazy=1點選上方“藍色字”可關注我們!








640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

編輯:鉛筆盒

據EOS.CYBEX孵化專案鏈安科技訊息,其研發的面向區塊鍊形式化驗證平臺VaaS發現,如果合約開發者不夠仔細,則基於EOS區塊鏈的代幣合約也同樣可能存在BEC代幣合約類似的整數溢位漏洞。

眼下Beauty Chain 美蜜/BEC代幣被盜事件,由於一行程式碼的安全漏洞引發其市值一夜歸零。該漏洞,由於合約開發者經驗不足導致合約程式碼中的bathTransfer函式出現了整型溢位的漏洞,使黑客利用該漏洞盜走

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平臺開發類似智慧合約同樣可能出現整型溢位漏洞。下面以EOS代幣合約為例對該型別漏洞進行描述,該例項中設計並實現了一個向多人轉賬的智慧合約核心函式transfer,其原始碼如圖1所示:

640?wx_fmt=jpeg

圖1 transfer函式原始碼,同時向4個人轉賬

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

640?wx_fmt=jpeg

圖2 黑客呼叫transfer函式同時向4人轉賬

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

640?wx_fmt=jpeg

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

為此,成都鏈安科技提示基於EOS的智慧合約開發者,在開發智慧合約的時候,應警覺整數溢位漏洞可能帶來的嚴重後果,對於每一步運算操作均進行邊界檢查。

針對此類問題,我們提出如下四種解決方案:

1. 在智慧合約部署前,通過VaaS平臺進行安全性和功能正確性的形式化驗證,事先預防這類問題的發生;目前VaaS平臺已經支援以太坊,EOS,Fabric等主流區塊鏈平臺智慧合約的形式化驗證,提供了高度自動化的智慧合約漏洞檢查,安全性、功能正確性的形式化驗證。

2. 我們正在針對EOS,以太坊等平臺開發安全的智慧合約開發模板,規範智慧合約的開發,提高合約安全性,同時降低合約開發門檻和難度;

3. 向社群提供經過VaaS平臺驗證的合約核心模組,使用者通過呼叫這些模組開發自己的智慧合約,以減少合約安全漏洞和邏輯漏洞的發生。如,我們正在基於EOS開發經過VaaS平臺形式化驗證的安全運算模組(如類似太坊SafeMath模組),以防止運算中導致的溢位和零除等漏洞。後續,我們將繼續為EOS、以太坊等多個社群開發更多的合約功能模組,供合約開發者使用。

4. 建議合約開發者使用EOS區塊鏈平臺提供的智慧合約程式設計Math

API介面則可防止該型別溢位漏洞。如,合約開發者可將uint型別的資料,先轉換成doule型別的資料,然後再使用EOS區塊鏈平臺提供的Math API中的double_add、double_mult等函式進行運算,最後將計算結果再轉換成uint型別資料輸出。通過我們的實驗和測試,發現該函式在進行大數相乘出現溢位的時候,會返回較大的值,無溢位出現,於是可以有效避免上述整型溢位的漏洞。但是VaaS同時也檢測出,Math API介面沒有對負數情況進行檢查,如果double運算的結果為負數,在將其強制轉換成uint型別時,將同時返回一個錯誤的較大的數值,針對此問題開發者需謹慎使用。

VaaS平臺將為建立安全的EOS社群不斷貢獻自己的力量。

歡迎大家關注我們的微信公眾號,或者給我們發郵件:

vaas@lianantech.com

640?wx_fmt=jpeg

本文僅代表作者個人觀點,不代表區塊鏈鉛筆的立場,不構成投資建議,內容僅供參考。

3分鐘瞭解什麼是區塊鏈?(中文動畫)|(英文動畫教程

3分鐘瞭解什麼是DAO?(中文動畫)|(英文動畫教程)

3分鐘看懂以太坊和智慧合約?(中文動畫)|(英語動畫教程)

3分鐘瞭解比特幣挖礦和區塊鏈共識機制?(中文動畫)|(英文動畫教程)

3分鐘瞭解公有鏈和私有鏈(中文動畫教程)|(英文動畫教程)

3分鐘瞭解區塊鏈的六層模型(中文動畫教程)|(英文動畫教程)

什麼是區塊鏈英文版(動畫教程)

肖風:區塊鏈與另類資產配置

逐鹿區塊鏈!詳解三大巨頭BAT區塊鏈戰略佈局

麥肯錫報告:區塊鏈對保險行業的影響

八張圖表解讀區塊鏈的未來發展

震驚全球的The DAO黑客事件全程回顧

Circle獲得包括IDG、百度、萬向在內6000萬美元融資

640?


關注本公眾號後,進入公眾號

回覆關鍵詞可以查閱資料,以下是部分關鍵詞

回覆 WEF ,檢視《WEF:世界經濟論壇認為區塊鏈是網際網路金融行業的未來報告》

回覆 智慧合約 ,檢視《巴克萊銀行報告》

回覆 moody ,檢視《穆迪120個區塊鏈專案報告》

回覆 SWIFT ,檢視SWIFT《區塊鏈對證券交易全流程產生的影響及潛力》報告

回覆 論文11 ,檢視論文《可擴充套件的去中心區塊鏈》

回覆 埃森哲2 ,檢視埃森哲《區塊鏈每年可以為投資銀行節省120億美元》報告

回覆 聯合國報告 ,檢視聯合國報告《數字貨幣和區塊鏈技術在構建社會和可信金融之間扮演的角色》

回覆 使用者特性 ,檢視普林斯頓大學首本比特幣教科書初稿《比特幣使用者的特性(Characteristics of Bitcoin Users)》

回覆 普林斯頓 ,檢視普林斯頓大學首本比特幣教科書初稿《比特幣和數字貨幣技術(Bitcoin and Cryptocurrency Technologies)》

回覆 IMF,檢視國際貨幣基金組織報告《Virtual Currencies and Beyond: Initial Considerations》

回覆 DTCC ,檢視美國存管信託清算公司報告《DTCC: 擁抱分散式》

回覆 廣發 ,檢視報告《科技前沿報告:區塊鏈:正快速走進公眾和政策視野》

回覆 川財1 ,檢視報告《川財證券:區塊鏈技術調研報告之一:具有顛覆所有行業的可能性》

回覆 川財2 ,檢視報告《川財證券:區塊鏈技術調研報告之二:區塊鏈技術進化論-區塊鏈技術的國內實踐和展望》

回覆 桑坦德 ,檢視桑坦德銀行報告《The Fintech 2.0 Paper: rebooting financial services》

回覆 拜占庭 ,檢視《拜占庭將軍問題詳解》

回覆 論文1 ,檢視論文《比特幣閃電網路:可擴充套件的離線即時支付》

回覆 論文2 ,檢視論文《比特幣骨幹協議》

回覆 論文3 ,檢視論文《數字貨幣是否應該進入Barbados央行國際儲備貨幣組合中》

回覆 幫助 ,檢視本公眾號全部關鍵詞列表


640?wx_fmt=png

點選下方“閱讀原文”檢視更多頁面出現後再點選“來源”可以檢視譯文原文連結 ↓↓↓


相關文章