安⽐(SECBIT)實驗室攜⼿路印(Loopring)共同發佈智能合約風險列表

以太坊 ERC20 Token 標準自 2015 年 11 月 19 日誕生以來 [1],爲智能合約、以太坊生態以及區塊鏈應用的發展做出了巨大的貢獻。據 Etherscan 網站數據顯示,截止 2018 年 6 月 26 日,以太坊主網上 ERC20 Token 數量已超過 90000。下圖是統計的 ERC20 每日創建數量趨勢圖。這裏寫圖片描述
這些 Token 合約所承載的價值不可估量[1]。然而近幾個月以來,以BEC事件[2]爲開端,引發的一系列的鏈式反應,越來越多的合約漏洞與不兼容性問題相繼被曝光。目前智能合約安全問題的分析披露還比較散亂,對智能合約的開發和後續的使用所起到的作用非常有限,社區缺乏一套完備的合約問題彙總機制。因此安比(SECBIT)實驗室在分析了近期爆出的合約風險問題和大量的智能合約源碼後,聯手路印(Loopring)團隊創建了一份 Token 合約風險列表。

由於以太坊上部署的合約數量規模還在不斷增大,未來還會有更多更復雜的問題暴露出來。因此,我們倡導發起 Token 合約風險列表共建計劃,呼籲更多關心區塊鏈生態的團隊或技術人員參與進來,共同維護這份合約風險列表。

ERC20 Token的安全問題總結

ERC20 Token 漏洞事件回顧

在 ERC20 Token 逐漸成熟和完善的發展過程中,不少 ERC20 智能合約曾出現過重大漏洞,對項目方、投資人、交易所甚至整個以太坊社區造成了比較大的經濟損失。例如:

  • 2016 年 6 月 18 日,DAO 合約遭到攻擊,導致超過 3,600,000 個以太幣 (ETH) 被盜,迫使以太坊社區不得不採取硬分叉的手段來減少損失,而這更是直接引起了以太坊社區的分裂[3]
  • 2018 年 4 月 22 日,黑客攻擊了美鏈 (BEC) 的 Token 合約,通過一個整數溢出漏洞,一時間 BEC 的價格幾乎歸零。我們發現至少有10份合約存在該類問題。
  • 2018 年 4 月 25 日,SMT 爆出類似整數溢出漏洞,黑客製造和拋售了天文數字規模的 Token,導致 SMT 價格崩盤[4]。-
  • 2018 年 5 月 20 日,嚴重的邏輯漏洞導致 EDU 用戶的 Token 可被任意轉出,同時還有其它 3 個 Token 存在相同問題[5]。

大量 ERC20 Token 實現未嚴格遵守規範

未參照 ERC20 標準實現 Token 合約會給 DApp 開發帶來較大的困擾。某知名 DApp 團隊在深入分析了排名前20的合約之後,提示社區需要對 Token 合約的諸多實現問題和不規範行爲重視起來[9],尤其是對於新的 DApp 開發者,提早避免一些問題。

Nearly a third of the time developing Bskt was spent auditing external dependencies. We highly encourage other Ethereum dev teams to be aware of the dangers in external dependencies. Unlike software development in most systems, it’s critical to read the implementation of deployed contracts you depend on — not just the interface.
我們還注意到,大量已部署 Token 合約曾經參考了以太坊官網(現已修復)以及 OpenZeppelin (52120a8c42 [2017年3月21日] ~ 6331dd125d[2017年7月13日]) 給出的不規範代碼模板,在 Solidity 編譯器升級至 0.4.22 後出現嚴重的兼容性問題,難以對接去中心化交易所(如DEX)等其它 DApp [7]。據不完全統計,存在該類問題的合約超過2000份。

若干 Token 合約在標準 approve() 函數中添加了對當前賬戶餘額校驗邏輯。導致採用類似 0x 協議的諸多DApp(如DEX)有可能無法正常完成 approve(),必須由 Token 項目方提前轉入一筆數額巨大的 Token 至中間賬戶,這給DApp和交易所帶來了諸多不便[8]。超過17份合約存在該問題。

ERC20 規範中規定了幾個可選的通用查詢接口如 name()、symbol()、decimals() ,因而大量 Token 合約未提供這些接口,甚至不少採用 NAME()、SYMBOL()、DECIMALS() 等不一致的寫法,也給合約的外部調用帶來了極大的麻煩。存在該類問題的合約超過3000份。

ERC20 標準中還規定了 Transfer 和 Approval 事件必須在特定場景下觸發。很多 Token 的實現參考了以太坊官網的不標準代碼(現已修復),漏掉觸發 Approval 事件的操作。存在該類問題的合約超過1800份。

ERC20 安全問題彙總與分類

我們對數萬份 ERC20 Token 合約存在的問題進行分析統計,已將所有統計數據上傳至 Github 倉庫(awesome-buggy-erc20-tokens)。

Github 倉庫地址:https://github.com/sec-bit/awesome-buggy-erc20-tokens

已發現的所有 ERC20 Token 合約安全風險問題(共28項)被歸納爲三大類:代碼實現漏洞(A),不規範問題(B),權限管理問題(C)。

  • 代碼實現漏洞涵蓋了合約代碼功能實現和邏輯實現上的漏洞,如整數溢出
  • 不規範問題涵蓋了因代碼實現不規範導致版本不兼容或者外部合約調用時的無法不兼容問題,如 ERC20 接口無返回值
  • 權限管理問題涵蓋了所有因管理權限設置不當而引發的問題,如owner可以操作任何人賬戶上的餘額
    問題列表如下:
    這裏寫圖片描述
    在awesome-buggy-erc20-tokens 倉庫的文章(ERC20_token_issue_list_CN.md)中對每個問題給出了詳細描述信息。

如何使用 Token 合約風險列表

  • Token 合約開發者:本列表提供了詳細的問題描述和相關合約列表,希望能夠藉此提⾼ ERC20 Token 合約開發者的安全意識,避免在後續的合約開發中重複踩坑。

  • DApp 項目方:以太坊平臺的 DApp 可能會與多個 ERC20 Token 合約對接。DApp 項⽬⽅可以通過本倉庫查閱已部署的問題合約的詳細信息,獲知 Token 合約存在的問題,避免因 Token 合約的漏洞或者合約的不兼容問題,給 DApp 帶來不必要的麻煩。

  • 其他生態參與者:本列表收錄了大量 ERC20 Token 合約存在的風險問題,並記錄了市值排名較⾼的672份已部署的 Token 合約的基本信息和問題詳情,大家可以通過查閱本倉庫來找到問題合約,瞭解已部署 Token 合約存在的⻛險。

Token 列表包含哪些內容

awesome-buggy-erc20-tokens 倉庫共收錄了以太坊上數萬份 ERC20 Token 合約中存在的問題。主要包含三部分內容:Token 合約的基本信息,問題 Token 列表,風險問題彙總。
1. 合約的基本信息
倉庫中目前已收錄的合約,所有問題合約均來源於此。
(合約信息列表:https://github.com/sec-bit/awesome-buggy-erc20-tokens/blob/master/token_dict.json

另外,倉庫中還統計coinmarket網站收錄的Token合約的詳細信息(共672份),包括token的排名,token名稱,token縮寫符號,總量,小數位數和上線交易所的信息。

(合約詳細信息列表:https://github.com/sec-bit/awesome-buggy-erc20-tokens/blob/master/token_detail_dict.json

  1. 所有的問題合約列表,列表分別以 json 和 CSV 的形式展示,也便於導入表格軟件或者編寫腳本進行分析。
    (所有的問題合約列表:https://github.com/sec-bit/awesome-buggy-erc20-tokens/blob/master/bad_tokens.all.csv

(按問題類型分類的問題合約列表:https://github.com/sec-bit/awesome-buggy-erc20-tokens/tree/master/csv

  1. 風險問題彙總文件
    倉庫中共收錄了 28 種合約風險問題,對所有問題的詳細信息,包括詳細的描述、錯誤的代碼實現示例、推薦修改的代碼實現示例、存在該問題的合約列表和對該問題報道的相關鏈接。

(風險問題彙總:https://github.com/sec-bit/awesome-buggy-erc20-tokens/blob/master/ERC20_token_issue_list_CN.md

以 batchTransfer-overflow 問題爲例:
這裏寫圖片描述

聲明

  • 本列表信息全部來源於以太坊區塊鏈,etherscan.io, coinmarketcap.io 等公開網站上的公開信息
  • 本列表所列所有問題均屬於已披露的漏洞或缺陷,不包含任何未公開漏洞
  • 本列表中存在多個合約 Token 名稱重複現象,請以合約地址爲準;Token 名稱只做參考,可能與知名項目重複,請勿過分解讀
  • 本列表中的數據可能會存在偏差或遺漏,請大家直接提交更改請求或者通知我們([email protected])

發起共建計劃

awesome-buggy-erc20-tokens 倉庫由安比(SECBIT)實驗室持續維護,路印(Loopring)團隊提供信息更新支持。並歡迎大家共同參與維護更新工作,共同推進以太坊生態健康發展。參與方式:

  • 提交未被列入的問題 ERC20 Token 合約地址
  • 提交新的 ERC20 Token 合約漏洞
  • 提供改進建議或參與討論
    同時我們也在尋求更多的力量,來共同開發更友好的前端查詢頁面,以供大家查詢。如果你有其他任何問題或者想法,歡迎加入我們的 Gitter 參與討論。

(Gitter地址:https://gitter.im/sec-bit/Lobby

安比(SECBIT)實驗室與路印(Loopring)合作共建安全可信的以太坊生態,安比實驗室團隊將擔任路印協議的安全顧問,提供合約驗證與 Token 合約審計技術服務。路印協議是基於智能合約的去中心化交易撮合協議,提供 100% 開源的去中心化交易前後臺解決方案。詳情請訪問路印官網:https://loopring.org
致謝:特別感謝 DEx.top 團隊參與早期列表建設想法的討論;感謝 葉健, Zongmin Yu,吳玉會(輕信科技),Yi Tang(Consensys中國)等人對合約風險列表內容所提供的寶貴意見》

Reference

[1] Market share of Ethereum-based tokens grows to 91% https://medium.com/@amincad/market-share-of-ethereum-based-tokens-grows-to-91-fdefadfd9f6e

[2] A disastrous vulnerability found in smart contracts of BeautyChain (BEC) https://medium.com/secbit-media/a-disastrous-vulnerability-found-in-smart-contracts-of-beautychain-bec-dbf24ddbc30e, Apr 23, 2018.

[3] Understanding The DAO Hack for Journalists https://medium.com/@pullnews/understanding-the-dao-hack-for-journalists-2312dd43e993, Jun 19, 2016.

[4] SmartMesh Announcement on Ethereum Smart Contract Overflow Vulnerability https://medium.com/smartmesh/smartmesh-announcement-on-ethereum-smart-contract-overflow-vulnerability-f1ded8777720, Apr 25, 2018.

[5] SECBIT: 智能合約紅色預警:四個Token驚爆邏輯漏洞,歸零風險或源於代碼複製 https://mp.weixin.qq.com/s/lf9vXcUxdB2fGY2YVTauRQ, May 24, 2018.

[6] ERC20智能合約整數溢出系列漏洞披露 https://www.secrss.com/articles/3289, Jun 12, 2018.

[7] 數千份以太坊 Token 合約不兼容問題浮出水面,恐嚴重影響DAPP生態 https://mp.weixin.qq.com/s/1MB-t_yZYsJDTPRazD1zAA , Jun 8,2018.

[8] ERC20智能合約的approve千萬別這樣寫 https://mp.weixin.qq.com/s/hYE4nu7FCD_nJH5WMRrXMA, Jun 15,2018.

[9] What we learned from auditing the top 20 ERC20 token contracts https://blog.cryptofin.io/what-we-learned-from-auditing-the-top-20-erc20-token-contracts-7526ef3b6fb1, Mar 28,2018.


安比(SECBIT)實驗室專注於區塊鏈與智能合約安全問題,全方位監控智能合約安全漏洞、提供專業合約安全審計服務,在智能合約安全技術上開展全方位深入研究,致力於參與共建共識、可信、有序的區塊鏈經濟體。
安比(SECBIT)實驗室創始人郭宇,中國科學技術大學博士、耶魯大學訪問學者、曾任中科大副教授,後擔任知名金融科技公司副總裁。專注於形式化證明與系統軟件研究領域十餘年,具有豐富的金融安全產品研發經驗,是國內早期關注並研究比特幣與區塊鏈技術的科研人員之一。研究專長:區塊鏈技術、形式化驗證、程序語言理論、操作系統內核。

發佈了42 篇原創文章 · 獲贊 8 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章