ERC20漏洞损失千亿 从技术角度浅析BEC风波的前因后果

金色财经-4月25日讯 近年来,“币圈”可谓是一波未平一波又起,接连不断的黑客攻击事件让虚拟货币这个概念在一起被投资者重新审视。从2017年开始,黑客们就利用各种虚拟货币的协议漏洞进行各种各样的“盗窃”行为。给投资者们带来了众多烦恼,也给“币圈”的前景笼罩上了一层阴霾。

ERC20漏洞损失千亿 从技术角度浅析BEC风波的前因后果

今年4月22号,有黑客利用以太坊 ERC-20 智能合约中 BatchOverFlow 漏洞中数据溢出的漏洞攻击了美链 BEC 的智能合约,从中盗取出57,896,044,618,658,100,000,000,000,000,000,000,000,000,000,000,000,000,000,000.792003956564819968 个BEC货币并大规模的想市场上抛售。导致该数字货币急剧贬值,价值几近归零,给BEC市场带来了毁灭性的打击。

BEC遭遇的毁灭性漏洞是怎么产生的?

我们来举个例子说明: 有一个民风淳朴的国家,这个国家的数学发展的很缓慢,他们不懂得加减乘除,连两位数的数字也没有,在这个国家的数学知识里,只存在:、1、2、3、4、5、6、7、8、9。这9个数。

这个国家商店的面包一包也最多只卖9根。有一天这个商店举行一个优惠活动,只要路过的人都可以进店凭身份证免费领取不超过9根的面包。有一个爱抖小机灵的人叫小黑,他看到这个活动就动了坏心眼。他去商店领取面包的时候,从1开始一根一根的拿,1根、2根、3根……当拿到第9根的时候,他还继续拿,然后第10根的时候,商店的店员数不过来了,因为不知道9以上的数字,这个店员只能从1继续数。于是就这么循环往复,小黑拿走了商店里的所有面包。

就像中国古话说的九九归一。此时的一已经不再是单纯的一了,是囊括了从一到九之后的新的以一这个概念表达出来的新状态。

这次的BEC漏洞事件也是这个原因。也许很多人回想,天下哪儿有这么笨的人,但是对于程序来说,这个事情是可能的。我们来看黑客进攻的步骤。

BEC漏洞的关键代码

众所周知,第257行写着amount=uint256(cnt)

uintx 类型的取值范围是 0 到 2的x次方 -1

而在计算机语言中,这段代码代表着最大取值范围不能超过2的256-1次方,也就是2的255次方。当一个数值的次方大于255的时候,程序会自动把数值归于0。注意!这个时候的0并不等于真的0。只是因为阈值溢出而表现为0;此时的0代表着是2的256次方。而代码的第258行到259行,本来是对于该项数值的检测。

黑客通过将量回归到 0,攻击者就可以绕过 258 行到 259 行的合理性检测,使得 261 行的差值变得不再相关。

于是黑客就将代表着2的256次方数值的0再加上正常要取出的数值一起“偷”了出来。于是美链BEC便在顷刻土崩瓦加。

而截止至BEC事发过去12小时,网上爆出除了 BEC Token 之外,还有多达 12 项目 Token 的智能合约中存在 BatchOverFlow 整数溢出漏洞,黑客可以继续利用这一漏洞转账生成「不存在」的虚拟货币并进行交易获利。

就在两天之后,火币Pro公告,SMT项目方反馈今日凌晨发现其交易存在异常问题,经初步排查,SMT的以太坊智能合约存在漏洞。受此影响,火币Pro现决定暂停所有币种的充提币业务。

在数字货币暴涨背后,曾有黑客曾表示,当前99%的黑客都盯上了这块肥肉。他们集体作战,信息收集、入侵潜伏、“黑箱”洗币等形成一条完整产业链。

我们发现,黑客之所以能屡屡对数字货币造成危害,就是因为目前的以太坊智能合约还不完善,还存在漏洞。那么以太坊智能合约到底有什么用,它的存在对于数字货币来说到底意味着什么?

以太坊智能合约关系图

以太坊智能合约

智能合约是由尼克萨博提出的理念,几乎与互联网同龄。但是由于缺少可信的执行环境,智能合约并没有被应用到实际产业中。自从比特币诞生后,人们认识到比特币的底层技术区块链天生可以为智能合约提供可信的执行环境,以太坊首先实现了区块链和智能合约的完整契合。

以太坊是内置有图灵完备编程语言的区块链,通过建立抽象的基础层,使得任何人都能够创建合约和去中心化应用,并在其中设立他们自由定义的所有权规则、交易方式和状态转换函数。建立一个代币的主体框架只需要两行代码就可以实现,诸如货币和信誉系统等其他协议只需要不到20行代码就可以实现。智能合约就像能在以太坊的平台上创建的包含价值而且只有满足某些条件才能打开的加密箱子,并且因为图灵完备性、价值意识(value-awareness)、区块链意识(blockchain-awareness)和记录多状态所增加的功能而比比特币脚本所能提供的智能合约强大得多。

但是随着数字货币的如雨后春笋般越来越多,而各个币种之间的执行逻辑又各有些不同,导致智能合约面对的情况越来越复杂,于是人们就开始不断地为智能合约进行修补。这就是ERC20协议标准的来源。

ERC20协议标准

代码即法律(Code Is Law),一个程序的完成,无论执行多少次都会得到同样的结果,除非有外界因素的干扰。在多人协作的过程中一定是要按照一个标准来进行分工,这样才能最快的完成整体任务,不至于出错。

对于接触过数字货币的投资者来说,以太坊是一个分布式的智能合约平台,可以分发代币(Token)。目前以太坊上有24351个代币的智能合约。

市面上的代币数不胜数,如果这么多代币的标准不统一,对于其他人来查看代码是相当痛苦的,众筹的人也就没有办法来检查代币分发的是否合理,也没有办法做到多种钱包的兼容。

所以才推出了一种以太坊代币的标准:ERC20标准。

什么是ERC20标准

ERC-20 标准是在2015年11月份推出的,使用这种规则的代币,表现出一种通用的和可预测的方式。简单地说,任何 ERC-20 代币都能立即兼容以太坊钱包(几乎所有支持以太币的钱包,包括Jaxx、MEW、imToken等,也支持 erc-20的代币),由于交易所已经知道这些代币是如何操作的,它们可以很容易地整合这些代币。这就意味着,在很多情况下,这些代币都是可以立即进行交易的。

ERC20 让以太坊区块链上的其他智能合约和去中心化应用之间无缝交互。一些具有部分但非所有ERC20标准功能的代币被认为是部分 ERC20兼容,这还要视其具体缺失的功能而定,但总体是它们仍然很容易与外部交互。

因此ERC-20协议是目前数字货币交易体系中较为主流的一种协议体系。但是该协议也存在不完善的地方。正如同清扫房间,总会有没有看到的地方一样,智能合约的协议只能不断地根据漏洞来改进,却不能一劳永逸的解决所有漏洞。黑客们也正是利用这些漏洞来实现自己的目的。

如何将漏洞带来的数字货币危害降到最低

这次美链BEC的风波,究其原因,是因为程序开发者的疏忽,导致程序中存在有机可趁的漏洞。让黑客钻了空子。程序开发者在所有的代码段都加入了SafeMAth的凭证,却单单在数值这一行没有加。

为此,我们专门采访了中科软科技股份有限公司的李冰冰工程师,他说:“目前的算力只要达不到只要量子计算机的算力,妄想暴力破解比特币是基本没啥可能的;不过,这是在算法程序没有缺陷的情况下。美链BEC的事件说明,往往造成安全的最大威胁不是来自外部,而是内部。美链BEC这次的漏洞,其实一个普通的测试组都可以测出这样的问题。究竟是开发的疏忽,当局者迷,还是这又是个庞氏骗局;故意留给内行的,然后收拢一波资金呢?或许只有开发者自己知道了”此次美链BEC事件,到底真实的原因是什么我们也许不得而知,但就技术而言,正是因为内部程序开发者的失误导致的。这也作为一个警钟来告诉其他数字货币的运营公司。为了保证自己的货币不受到黑客的伤害,应该切实的保证内部的开发、运营过程不出问题。

而对于广大用户来说,除了自身加强自我安全意识意外,也要有一双火眼金睛,来分辨出哪些数字货币是安全的,值得投资的,哪些是有风险的。只有这样,才能让自己的资产受到最小的损失。

网站模版

本文来源: 中华财经快报 文章作者: 佚名
    下一篇

前些天朋友遇到一个关于以太坊使用的leveldb导致的数组越界问题,一起讨论了很久。如果大家持续使用以太坊节点,迟早也会遇到此问题,在本篇文章中给大家分析一下,做好提前准备。