以太坊 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 名称只做参考,可能与知名项目重复,请勿过分解读
  • 本列表中的数据可能会存在偏差或遗漏,请大家直接提交更改请求或者通知我们(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)实验室专注于区块链与智能合约安全问题,全方位监控智能合约安全漏洞、提供专业合约安全审计服务,在智能合约安全技术上开展全方位深入研究,致力于参与共建共识、可信、有序的区块链经济体。
安比(SECBIT)实验室创始人郭宇,中国科学技术大学博士、耶鲁大学访问学者、曾任中科大副教授,后担任知名金融科技公司副总裁。专注于形式化证明与系统软件研究领域十余年,具有丰富的金融安全产品研发经验,是国内早期关注并研究比特币与区块链技术的科研人员之一。研究专长:区块链技术、形式化验证、程序语言理论、操作系统内核。

安⽐(SECBIT)实验室携⼿路印(Loopring)共同发布智能合约风险列表相关推荐

  1. 【以太坊】在测试网络上发布智能合约

    一.准备工作 1.本地测试网络搭建完成,对以太坊的了解已经达到基础水平.(可以参考我之前的关于以太坊的文章). 2.有翻墙的能力(发布合约的时候,有不少网站都是需要翻墙操作的) 3.本地浏览器安装Me ...

  2. 区块链: 编译发布智能合约

    什么是智能合约?? 智能合约与平时的代码其实没有什么区别,只是运行于一个以太坊这样的分布式平台上而已.这个运行的平台,赋予了这些代码不可变,确定性,分布式和可自校验状态等特点.代码运行过程中状态的存储 ...

  3. 电报注册网络代理_如何在电报开放网络(TON)中开发和发布智能合约

    电报注册网络代理 这篇文章是关于什么的? (What is this article about?) In this article, I will tell about my participati ...

  4. 成都链安重磅出品 | 基于VS Code插件的智能合约自动形式化验证工具Beosin—VaaS『离线免费版』...

    11月4日,成都链安重磅推出『离线免费版』智能合约自动形式化验证工具Beosin-VaaS,该版本基于流行的开发工具VS Code插件,供广大开发者免费使用.获得方式如下,欢迎体验使用: https: ...

  5. android区块链 钱包_区块链研究实验室|从Android调用区块链智能合约

    本教程将展示如何直接从Android开发环境-Android Studio中调用智能合约. 环境要求 我们将使用Tezos区块链.为了使我们的Android java代码与现有的.部署的智能合约交互, ...

  6. Beosin成都链安发布在线EOS-IDE免费版本 EOS智能合约在线编辑、编译、运行调试、部署一步到位...

    Beosin EOS-IDE产品链接: https://beosin.com/EOS-IDE/index.html#/ (推荐Chrome浏览器) 每一个区块链开发的程序员都需要一个界面友好,操作方便 ...

  7. 华为首款Harmonyos摄像头,掀起家居安防大变革 华为首款HarmonyOS智能摄像头发布...

    原标题:掀起家居安防大变革 华为首款HarmonyOS智能摄像头发布 10月30日,万众瞩目的华为Mate40系列于上海正式亮相.凭借麒麟9000芯片.全能的影像能力.创新的交互,华为Mate40系列 ...

  8. 安信实验室呼吁键盘厂商申请windows徽标认证(WHQL)

    安信实验室呼吁键盘厂商申请windows徽标认证(WHQL) 近日又接到很多键盘厂商的电话咨询Windows徽标认证(WHQL认证)的事情,详谈之下了解到还是因为产品出口欧美市场没有做Windows徽 ...

  9. 安兔兔 android 4.4,适配智能电视 安兔兔评测V4.4.3发布

    智能设备性能表现五花八门,用户体验也会有所不同.为此安兔兔评测对以往版本进行了修正,确保可以在这些设备上正常运行.当然,测试性能跑分不是目的,用户只是借助安兔兔评测这个专业工具将性能量化可比,更有助于 ...

最新文章

  1. UWP 手绘视频创作工具技术分享系列 - 手绘视频导出
  2. 【机器学习】sklearn数据特征预处理:归一化和标准化
  3. 训练日志 2018.12.9
  4. STL之remove、remove_copy、remove_if、remove_copy_if
  5. 5月27 权限设置及功能
  6. 关于功能图标的绘制方法!
  7. mysql怎么生成sql文件_sql如何生成sql文件
  8. 如何用iso文件制作U盘启动
  9. spring揭秘总结(一)——spring的Ioc容器
  10. java调试查看调用堆栈_关于调试:如何阅读和理解java堆栈跟踪?
  11. no artifacts configured
  12. win10开启wifi
  13. 相机图像_基本知识储备
  14. 20sccm_SCCM安装及配置过程总结
  15. 深度学习笔记-吴恩达
  16. Azure中配置网络安全组入站规则让外部网络访问VM中的网站
  17. MFC单文档之给主窗口添加背景图片
  18. 源码资本宣布完成人民币四期38亿新基金募集
  19. 汇编总结:mov指令
  20. 网络基础笔记(四)不同网段通信

热门文章

  1. 昆明收银系统:『免费收银软件』到底是馅饼还是陷井?免费背后的危害。
  2. 通过C++实现加减乘除
  3. 求偏移量并且设置约束
  4. CSS中的各种width(宽度)
  5. python定义一个未知数_如何在python中创建未知数量的变量
  6. Q245R(R-HIC)是什么材质Q245R(R-HIC)抗氢钢钢板简介化学成分
  7. PHP多商户AI智能在线客服系统源码 机器人自动回复 即时通讯聊天系统源码
  8. 图像的空间域与频率域
  9. 引用账户锁定无法登录_锁定电脑后重登录,出现“引用账户当前已锁定,且可能无法登录”提示。是怎么回事?...
  10. 需要免费虚拟机的朋友看过来