最近,由于工作需要,研究了下了ERC20 Token的智能合约代码。安全问题触目惊心,远比我们想象中的更可怕。
特别是对于开发者,很多习惯性了复制、粘贴,然后简单修改的开发方式来实现某些功能,如果还是通过这样的方式进行智能合约开发,那将是致命的。因为网上(比如百度)看搜索到的智能合约代码,大部分都是有安全漏洞的。对于很多项目,随便找一个不靠谱,不求甚解的程序员,然后百度下ERC20的智能合约代码就发布了,带来的危害是极其大的。
我们先看下回顾下,几个由于ERC20智能合约代码有安全漏洞而被发生盗币情况的几个项目:
一、漏洞分析
1. EDU
etherscan地址:https://etherscan.io/address/0xa0872ee815b8dd0f6937386fd77134720d953581#code
EDU的智能合约中的transferFrom函数中,没有校验 allowed[_from][msg.sender] > _value ,并且函数内没有使用safeMath,导致攻击者不需要私钥即可转走指定地址的所有EDU代币。
2. 美链BEC
etherscan地址:https://etherscan.io/address/0xc5d105e63711398af9bbff092d4b6769c82f793d#code
这个漏洞直接导致美链归零,因为攻击者的帐号不会转出任何BEC,但是接收方却可以接收到大量的BEC,查询下token holders,发现两个地址的持有量远远超出100%好多好多数量级
当然其实还有更多的智能合约代码有问题,其他已知的有,但是其实还有更多没有被发现出来。
二、为什么会出现这么多安全漏洞?
以太坊发币确实很简单,简单到网上找个教程,花很少的eth就可以发币了。但是其实区块链还是个新事物,对于程序员也是如此,不能用传统的认知去理解solidity的开发。这里没有贬低程序员的意思,程序员是很单纯且聪明的群体,毕竟笔者也是程序员 ,并且写了很多年代码。但是这个世界太浮躁,太多的人喜欢不求甚解的拿来主义。
你如果通过百度搜索关键字:以太坊发token教程,结果如下
如果你是一个想做事情的项目方,找了一个不靠谱的程序员,按照这篇文章的代码去发币,那么恭喜你,归零之路等着你!
类似搜索关键字:erc20 token标准
这些文章都是阅读量很大的几篇文章,并且被大量的人进行转载和引用,但其实里面的代码是有安全漏洞的,如果你的程序员看到了这些文章,没有经过自己的思考,对安全没有考量,会发生什么,可想而知了!!
三、已知的以太坊智能合约有哪些?
笔者经过了解,以太坊智能合约安全漏洞问题主要包括以下几个方面:
1. 代码编程规范漏洞
错误的权限声明、冗余的回调函数和可预测的随机数等将会存在被恶意利用的危险,导致违背原始设计的交易发生。
2. 外部合约引用漏洞
任何地址都可以被当作合约,无论地址上的代码是否表示需要用到合约类型。这可能是骗人的,特别是当合约的作者试图隐藏恶意代码时。
3. 整型溢出漏洞
整型上溢/下溢会导致非法的交易,造成巨大的经济损失,前面讲的美链BEC就是这个问题导致,其实很多项目都是这个问题
4. 可重入攻击漏洞
没有理解fallback函数,异常的调用重入造成交易失败或不可控制的转账行为。著名的以太坊分叉就是这个漏洞因为盗币而导致的
5. 执行顺序依赖漏洞
不正确的语句执行顺序可以绕过异常状态检测,从而引发错误的转账行为。
6. 时间戳依赖漏洞
依赖时间戳的智能合约其执行结果可能会被操纵,从而导致错误的业务逻辑。
重要提示:
国外有大神:Dr Adrian Manning,已经把solidity智能合约很多的安全问题都做了介绍和分析了,建议要写智能合约的开发者都去好好读一下,原文链接如下:https://blog.sigmaprime.io/solidity-security.html
另外,要特别感谢慢雾科技对本文做了翻译,方便中国的读者,翻译后的链接如下:https://github.com/slowmist/Knowledge-Base/blob/master/solidity-security-comprehensive-list-of-known-attack-vectors-and-common-anti-patterns-chinese.md
四、总结和建议
需要开发者提高安全意识,智能合约发生漏洞是致命的,并且还不可篡改,不像传统的软件,出现bug可以修复重新更新代码上线。
需要深入去了解solidity语言的特性和运行机制。
拿来主义是有前提的,拿来的东西是你了解过的,是确定性的,是无误的。
对新的事物,不确定的事物一定要去学习和了解,就像投资一样的,对于不懂的东西千万不能去碰,不要看到别人成功了,有妄念觉得自己也能和别人一样成功。
**更多有关区块链的技术与思维,可扫码加入我的小密圈。在这里,我陪着你,大家一起研究区块链技术,探讨区块链思维,预测区块链未来,一起做未来前10%的人
为感谢大家的支持,原价99元,现免费开放,可私信我,我拉你加入星球
**