以太坊(12)智能合约安全实例

以太坊智能合约是最容易受到攻击的部分,编写过智能合约的人肯定知道以太坊对solidity、ERC20库也做了很多次的升级优化,让我们不得不重视安全、规范的问题。


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 安全问题汇总与分类:

https://github.com/sec-bit/awesome-buggy-erc20-tokens/blob/master/ERC20_token_issue_list_CN.md#c1-centralaccount-transfer-anyone


大家可以看看上面的连接,他们整理了很多容易出问题的实例,这样你就能很清楚的了解他们每次升级的目的。

其实个人认为很多问题并不是以太坊的问题,而是编程人员水平、基本功的问题比如所说的益处问题。

你可能感兴趣的:(以太坊(12)智能合约安全实例)