一行代码导致的64亿损失

一失足成千古恨,这句话用在币圈一点都不为过。

通过智能合约进行代币分配,一行代码的错误都可能导致巨大的损失。


美链的漏洞,一行代码导致64亿损失

2018年2月24日美链(BEC)上线Okex,当天暴涨40倍,随后不到一个半月时间跌至0.1836刀,从最高点暴跌了99.75%,接近归零。

很多投资者认为已经跌了99.75%,不会再跌了吧,庄家怎么也会拉盘,就贸然进场抄底。然而令投资者想不到的是,跌了99%的一个数字货币,还可能再跌99%,而这样的闹剧真的就发生了。

一行代码导致的64亿损失_第1张图片

BEC开盘当天

BEC美蜜合约出现重大漏洞,市值再次下跌92%

2018年4月23日,美链因为发现智能合约重大漏洞,攻击者可以通过智能合约的批量转账方式无限生成代币。这样的代码漏洞直接导致美链价格再次下跌92%。

一行代码导致的64亿损失_第2张图片

OKEx上,出现智能合约事件之后的大瀑布

下图红框里面数字的意思是:转账者可以将5e+58个美图币转到另外一个地址,这笔转账价值多少钱呢?你可能没有概念,这笔美币价值64亿人民币,相当于美币全部市值。而这样的bug就发生在美链的智能合约中。所以,美币再次经历归零。

一行代码导致的64亿损失_第3张图片

一笔价值64亿人民币的转账

4月22日上午10点钟,OKex发文,宣布暂停BEC交易。

一行代码导致的64亿损失_第4张图片

OKEx发布美链下线公告

从2018年2月24日上线OKex,到2018年4月22日,一个区块链资产经历了盛极一时,到归零,期间只用了不到60天。

归零,因为一个小小的bug

区块链代币发送逻辑是:你给接收方(recevers)发送的代币,需要指定金额,这个金额的数量一定要大于发币方账户里面的代币数量。这样一笔转账才能正常进行。正常的智能合约这样设计逻辑是没有问题的,但是美链的智能合约出现了一个很低级的错误:下图代码中,amount的计算未使用safeMath 的方法(sub,add),导致美图币可以无限发送。

一行代码导致的64亿损失_第5张图片
截取部分美链代码

ATN被盗,只因为底层函数运用不当

5月11日,ATN Token遭受恶意攻击,攻击者利用DSAuth库与ERC223搭配使用的混合漏洞,窃取了ATN的所有权。

这次事件主要是利用了开发者对以太坊底层函数call、callcode、delegatecall的不当使用。

黑客通过ERC223方法与DS-AUTH库的混合漏洞,将ATN Token合约的owner变更为自己控制的地址。获取owner权限后,黑客发起另外一笔交易对ATN合约进行攻击,调用mint方法给另外一个地址发行1100万枚ATN。

一行代码导致的64亿损失_第6张图片

攻击者的操作可能造成如下影响:

绕过权限检查,调用敏感函数,例如setOwer;

窃取合约地址持有的代币;

伪装成合约地址与其他合约进行交互;

因此,在编写合约时,此类函数使用时需要对调用参数的安全性进行判定,建议谨慎使用。

为了避免此类漏洞,我们提醒开发者注意以下几点:

谨慎使用call、delegatecall等底层函数。此类函数使用时需要对调用参数进行限定,应对用户输入的call调用发起地址、调用参数做出严格限定。比如,call调用的地址不能是合约自身的账户地址,call调用的参数由合约预先限定方法选择器字符串,避免直接注入bytes可能导致的恶意call调用。

对于一些敏感函数,不要将合约自身的账户地址作为可信地址。

准备修复措施,增加Guard合约禁止回调函数向ATN合约本身回调。

增加黑名单合约,随时冻结黑客地址。

一行代码导致的64亿损失_第7张图片

综合上文的分析,call函数的使用一定要小心,在智能合约开发中尽量避免call函数的使用,如果使用,也一定要对其相关参数进行严格的限定。另一方面,智能合约在部署之前应进行安全审计,比如代码的形式化验证等。

不过,合约的安全审计,仅依靠开发者的经验和能力总有隐患。


20亿EDU被盗,稍加注意就能避免

区块链时代,智能合约的安全性被无限放大,一个小小的bug就能导致上亿美元的损失。

EDU智能合约中的transferFrom函数, 主要目的是实现EDU的转账:将一定数量(_value)的EDU从源地址(_from)转账到接收地址 (_to):

一行代码导致的64亿损失_第8张图片

然而此函数并未设置转账合法性的检查:

allowed[_from][msg.sender] -= _value; 


因此,即使要转出的金额超过了允许的限制 (allowed[_from][msg.sender]),转账也能成功。而黑客就是利用了EDU的这个漏洞,将任意地址的EDU无限制地转到自己的账户。也就是说,任何一个EDU币的持有者都会面对被洗劫一空的风险。

但如果EDU的智能合约在提交之前能够做代码检查,那么这些损失是完全可以被避免的。

一行代码导致的64亿损失_第9张图片

智能合约安全漏洞频现并非偶然,当前智能合约缺少监管机制,缺少安全审计流程,其代码安全性与逻辑漏洞仅靠开发人员人工审核,难免存在隐患和漏洞。


代码审计为您保驾护航

2018年10月24号,国家互联网应急中心(简称:CNCERT)与长沙经开区成立区块链安全技术检测中心。

天河国云公司作为Ulord项目的技术提供方,在区块链领域具备很强的技术优势,其技术骨干由十余名博士构成,具备区块链、密码学、互联网信息安全、大数据、云计算、人工智能、金融、管理等多个领域专业背景。

此次区块链安全技术检测中心的成立旨在帮助企业和机构解决来自算法安全、协议安全、使用安全和系统安全等多方挑战,为区块链企业保驾护航。天河国云董事长谭林博士曾说:

智能合约是区块链的基本特征和基础,智能合约代码的开源性需要代码的高可靠性,这种可靠性要求100%正确。但区块链项目不能完全保证代码的准确性,就像每个人在电脑打字时都会打错字一样,程序员在输入代码时也会存在笔误和错漏。

代码审计平台,能够解决智能合约所面临的这些安全问题。针对智能合约安全漏洞频出,采用代码质量保障最有效的形式化验证方法,研制出了一套能提高智能合约安全性和功能正确性的高度自动化的形式化验证平台。提供包括安全的合约代码审计、合约安全验证等服务,从根本上提高智能合约的安全性,切实提升区块链技术发展应用安全性。

智能合约安全漏洞事件概览

一行代码导致的64亿损失_第10张图片

形式化验证是一个非常小众的研究领域,由于技术的复杂性极高,在智能合约出现之前,其主要应用于航空、航天和高铁等对safety要求极高、且代码量不大的”高精尖“领域。

一方面,智能合约一旦上链便不可修改,且多应用于数字资产,对代码安全性有很高需求;另一方面合约代码通常短小精悍,易于建模和推理,因此,智能合约对于形式化验证而言是“天然合适”的场景。

国家互联网应急中心作为国家网络安全核心单位,具有开展区块链安全管理工作的权威性和专业性,跟长沙经开区一起共同成立的区块链安全技术检测中心,是全国唯一一家区块链安全技术检测中心,它将规范区块链行业发展,维护社会稳定。其监测数据和报告将支撑国家在区块链领域监管的相关工作。

一行代码导致的64亿损失_第11张图片

公链安全的研究相对于合约安全来说门槛较高,但漏洞的影响面更大。在智能合约真正安全突围之前,币圈众生需加倍关注所持项目的安全动态。

智能合约的安全漏洞比比皆是,做好防范,避免因“手误”造成不必要的损失与项目开发同等重要。

- END -

本文作者Ulord社区:买珊,已获授权转载。以上图片来自网络。

你可能感兴趣的:(一行代码导致的64亿损失)