智能合约屡现漏洞,该如何选择安全的币种?(智能合约屡现漏洞,该怎么处理)
随着很多网友们针对于智能合约屡现漏洞,该如何选择安全的币种?关注越来越多,小编通过花费九牛二虎之力,终于整理出来相关问题的信息。
大白导读:区块链,无疑是近两年最火热的头条词语。
随着这项分布式存储技术的崛起,寄托于区块链技术的数字货币也成为了投资热门。
除了比特币是基于自身的底层架构而来,现在市面上大多数数字货币,都是通过以太坊智能合约发出。
这种方式,虽然让人们可以更为便利地进行融资,但是智能合约安全问题却成了重大的隐患。
发展了这么多年的互联网,都常遇到各类的黑客袭击事件。
作为“新生宠儿”的区块链,又怎么会没人觊觎呢?有人会说,如果我们的数字货币在以太坊区块链上,除非发生51%攻击,不然被盗的可能性很低。
没错,这对以太坊主网来说确实如此,但是不代表智能合约不会有问题。
比如7月8日,AMR项目被爆出智能合约中的漏洞可以让黑客无限生成代币,而由于该项目当时已经上线交易所,黑客可以通过这些“**”进行砸盘获利,这也就意味着黑客可以“无限印钞”,最终导致的是普通投资者的巨大损失。
一、导致代币增发的“整数溢出”漏洞是什么?该项目的智能合约中,整数溢出的重大漏洞,使得黑客可以凭空打造出无限的AMR代币。
所谓的整数溢出,就是说如果两个8位变量A和B按位相乘,结果超出8位,超出位将被丢弃,只保留后8位长度。
该漏洞中产生溢出的变量名为totalTokensToTransfer,该变量类型为uint,在Solidity中,uint长度为256位,所以只要累加超过2^256-1大小的数,将会导致整数溢出。
例如以下的公式,在发生整数溢出的时候,最前面的“1”就会被丢弃,那么整个totalTokensToTransfer的值就会被置零。
而totalTokensToTransfer表示转出代币的总量,并且为了保证转出的代币不能超过自己的余额,合约中也进行了校验。
整数溢出原理如果发生了整数溢出,就会造成以下代码第198行的情况,totalTokensToTransfer=0。
换句话说,这时候程序会认为你的转出代币总量为零,只要你的余额中有少量代币,就可以绕过代码第203和205行的验证,从而完成转账。
然而事实上,totalTokensToTransfer是个非常大的数值,只不过这时候代码无法检验出来而已,从而黑客就可以“凭空”造出无数代币。
?整数溢出攻击后的代码这类智能合约的漏洞,其他项目方也曾出现过。
例如SMT和BEC的漏洞,就和AMR的漏洞非常类似。
它们都是由于没有进行大数保护,从而造成整数溢出,形成了“无限印钞”的现象。
针对智能合约中,没有大数保护的漏洞,其解决方法其实很简单。
很多代码是因为直接使用普通的加减乘除符号,但缺少了整数溢出判断,从而造成数据溢出的隐患,而使用library SafeMath可以彻底解决数据溢出的问题。
因此,只需要彻查智能合约代码,把其中的“+” “-” “*” “/”换成library SafeMath,就可以彻底解决数据溢出的问题。
二、整数溢出攻击的受害者都有谁?其实不用说,代币被溢出漏洞攻击导致增发,所有持币者将遭受损失,这其中就包括,项目方和投资者。
黑客为啥会攻击项目呢?道理很简单,项目代币已经上线交易所,且有不错的交易深度。
如果黑客能够无限获得代币,也就意味着可以无限砸盘,从交易所直接获利。
比如SMT项目,在4月25日发生了智能合约漏洞事件后,SMT币价大幅降低,因此暴跌近20%,而且从此一蹶不振,币价持续走弱。
所以这类漏洞事件,不仅会对投资者造成影响,也会对项目方造成信任危机,甚至直接导致代币归零。
好在SMT在被攻击之后,作出了积极的回应。
首先是相关交易所停止了交易,并冻结了“**”及大额砸盘者的账户,从而防止黑客将资产转移:其次是SMT基金会冻结同等数量的SMT“真币”,以保证外面流通的代币总量不变:最后暂停SMT交易直到智能合约重新校验完成。
?SMT价格趋势BEC(美链)同样在被“溢出”漏洞攻击后,遭遇黑客抛售“**”砸盘的悲惨命运。
BEC市场瞬间蒸发64亿人民币的市值,使得BEC价格接近归零。
最后交易所中止了交易,并且选择了交易数据回滚,尽可能地降低因此造成的损失。
?BEC价格趋势三、如何应对合约漏洞?智能合约漏洞不断,除了这类整数溢出的漏洞,还有“重入攻击”,当年大名鼎鼎的THE DAO就被黑客利用这种漏洞攻击而导致大量的以太币被盗走的。
重入攻击原理其实也不复杂:以太坊网络可以调用外部合约,但是外部调用存在被攻击者劫持的风险,并在被攻击的合约上进行恶意操作,从而导致资产被盗。
所谓“重入”,就是黑客在外部合约的任意位置“重新输入”了其他代码执行,代码被黑客篡改了。
除此之外,还有重放攻击、重排攻击、短地址攻击等等。
面对如此多的被黑客攻击的事件,我们是否能从中吸取教训,尽量减少这种攻击事件及减少投资的损失呢?对于项目方而言,毫无疑问需要去审核项目的代码,不仅是项目团队自身审核,更需要专业的第三方安全机构来审核,并且给出专业的检验报告。
同时,项目方最好能设立专门的“保险资金”,来应对此类由于安全问题而造成的损失。
对于交易所而言,应该在代币上线交易所之前,就对其代码的安全性进行审核。
对于上线的代币,应该实时监控各类代币是否有大额链上转入的情况。
如有异常,应该立刻锁定对应账户进行排查。
如果已经发生砸盘现象,需要做到快速冻结对应账户,防止其将资产转移,必要时进行数据回滚,最大化降低损失。
对于投资者而言,在投资之前,如果没有相应的判断能力,建议选择那些已经经历过长时间检验的市值靠前的币种,相对来说它们存在重大漏洞的风险比较小。
如果选择投资“新币”,代码的安全问题是一个不可忽视的问题,投资者最好是具备相应的识别能力,同时需要项目方给出相应的智能合约检测报告,以及确保项目方设立了专门的“保险资金”,从而减少投资风险。
本文到此结束,希望对大家有所帮助。