【首发】智能合约风险列表发布,ERC20 Token安全问题有据可查

SECBIT实验室
SECBIT实验室 机构得得号

Jun 27, 2018 聚焦智能合约安全审计和形式化验证。

摘要: 安比(SECBIT)实验室携手路印(Loopring)共同发布智能合约风险列表,该列表内容主要包括详细的问题合约基本信息和全面的风险问题汇总。希望该列表可以帮助 ERC20 Token 合约开发者提高开发质量,帮助DAPP项目方降低开发成本。

以太坊 ERC20 Token 标准自 2015 年 11 月 19 日诞生以来 [1],为智能合约、以太坊生态以及区块链应用的发展做出了巨大的贡献。据 Etherscan 网站数据显示,截止 2018 年 6 月 26 日,以太坊主网上 ERC20 Token 数量已超过 90000。下图是统计的 ERC20 每日创建数量趋势图。

这些 Token 合约所承载的价值不可估量[1]。然而近几个月以来,以BEC事件[2]为开端,引发的一系列的链式反应,越来越多的合约漏洞与不兼容性问题相继被曝光。目前智能合约安全问题的分析披露还比较散乱,对智能合约的开发和后续的使用所起到的作用非常有限,社区缺乏一套完备的合约问题汇总机制。因此安比(SECBIT)实验室在分析了近期爆出的合约风险问题和大量的智能合约源码后,携手路印(Loopring)发布智能合约风险列表,联合去中心化交易所 DEx.top、轻信科技、Consensys 中国、长亭科技等技术团队,共同对该风险列表进行维护。

由于以太坊上部署的合约数量规模还在不断增大,未来还会有更多更复杂的问题暴露出来。因此,我们倡导发起 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]。
  • 2018 年 6 月 12 日,一系列 ERC20 智能合约整数溢出漏洞 (CVE-2018-11687, CVE-2018-11809, CVE-2018-11810, CVE-2018-11811, CVE-2018-11812) 又被爆出,据不完全统计有 800 多个合约受到影响[6]。

大量 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 )

2. 所有的问题合约列表,列表分别以 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 )

3. 风险问题汇总文件

仓库中共收录了 28 种合约风险问题,对所有问题的详细信息,包括详细的描述、错误的代码实现示例、推荐修改的代码实现示例、存在该问题的合约列表和对该问题报道的相关链接。

(风险问题汇总:https://github.com/sec-bit/awesome-buggy-erc20-tokens/blob/master/ERC20_token_issue_list_CN.md )

以 batchTransfer-overflow 问题为例:

声明

  1. 本列表信息全部来源于以太坊区块链,etherscan.io, coinmarketcap.io 等公开网站上的公开信息
  2. 本列表所列所有问题均属于已披露的漏洞或缺陷,不包含任何未公开漏洞
  3. 本列表中存在多个合约 Token 名称重复现象,请以合约地址为准;Token 名称只做参考,可能与知名项目重复,请勿过分解读
  4. 本列表中的数据可能会存在偏差或遗漏,请大家直接提交更改请求或者通知我们(info@secbit.io)

发起共建计划

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实验室 授权链得得发表,并经链得得编辑,转载请注明出处、作者和本文链接

更多精彩内容,关注链得得微信号(ID:ChainDD),或者下载链得得App

分享到:

相关推荐

    评论(2

    • 链iR87KG 链iR87KG
      回复
      0

      给郭老师点赞

      Jun 27, 2018 via iphone
    • SECBIT实验室由中科大郭宇博士创立,聚焦智能合约安全研究,致力于打造健康有序的区块链经济体。

      Jun 27, 2018 via pc

    Oh! no

    您是否确认要删除该条评论吗?

    分享到微信