币圈这几天被黑客攻击搞的人心惶惶。
先是4月22日,美蜜币(BEC)在短短半小时内,从0.32美元暴跌到0.024美元,跌落了92.5%。OKEx紧急发布公告:暂停BEC的交易和提现,重新开放时间“另行通知”。
业界传闻,此次 OKEx 下架亲儿子BEC,是因为该代币合约存在溢出漏洞,攻击者可以利用漏洞批量转账,无限制生成代币。
这相当于,黑客针对某币种的漏洞,可以自己造一台印钞机,想印多少印多少。如未有效制止,“韭菜”们只能眼睁睁地看着自己手中的币贬值到一文不值。
还没等大伙缓过神来,4月25日,又一币种 SMT 也被类似的溢出漏洞整垮。
据火币 Pro 公告,SmartMesh(SMT) 项目方反馈 4 月 25 日凌晨发现其交易存在异常问题,经初步排查,SMT 的以太坊智能合约存在漏洞。受此影响,火币 Pro 目前暂停所有币种的充提币业务。
首先,我们来了解一下溢出漏洞。
小时候我们刚刚开始学加法时,总喜欢掰着手指头数,如果是10以内的,比如算3+3=6,4+5=9时,很好办,可以正确的算出来。
有天,老师突然让他们算6+5等于多少,这时候手指不够用了。
于是,小朋友在掰完所有手指后,在等于号后算出了 1 这个答案。
BEC 和 SMT的智能合约漏洞,遇到的也是这个问题。
BEC 智能合约中的 batchTransfer 批量转账函数存在漏洞,攻击者可传入很大的 value 数值,使 cnt * value 后超过 unit256 的最大值使其溢出导致 amount 变为 0。
而这次SMT所遇到的问题,则是因为智能合约中proxyTransfer() 函数存在一个经典的整数溢出问题。
_fee 和 _value_ 这两个输入参数都能被攻击者控制,如果 _fee + _value 的结果正好为 0(也就是溢出的情况),第206行的检查将会失效。
这意味着攻击者不需要任何Token,就可以向一个地址转入大量的Token(第214行);同时根据第217行的代码,相当数量的手续费也将发送给 msg.sender。
在永信至诚 Ar 实验室负责人omg和教研总监幻泉看来,虽然其核心漏洞原理与 BEC 并无差别,但这次 SMT 所遭遇的困境更为严重。
一是黑客已经在25日凌晨做了一系列操作,包括生成币、转账等;二是 SMT 在火币、OKEx等多家交易所进行交易,所以面临的情况更为复杂。
也就是说,BEC所遇到的问题,就好比你在一个银行里黑了别人一笔钱到你账上,你只是把这笔钱转给了同一家银行的其他几个账号,这笔钱虽然流动,但还在这家银行。而 SMT 所遇到的问题是,这笔钱已经被转走、取走或消费,已经不是这家银行的了,赃款更难以追回。
与BET所受攻击最大的区别是, SMT有往其他在使用的钱包上转出的记录,从钱包地址来看已经转出一部分到一些交易较大的地址中了,不排除已经换成其他币的可能。
幻泉认为,由于这次所涉及的交易所相对较多,并且事件发生在凌晨,不像上次BEC发生在中午发现异常马上交易就被关闭,黑客能利用时间差在交易所发现之前迅速转账,所以损失无法估量。
目前他能想到的补救措施,就是发币方根据黑客操作之前的所有转账记录进行快照,然后通过快照新生成一个新的token币,按照快照对应不同地址的币量重新发币,废掉当前的token。
据公开资料显示,SMT是由创始人王启亨发起,称将通过结合区块链和无网通信技术,以手机等设备作为其中的共享节点,构建一个去中心化的,并且兼容有网和无网络两种情况的点对点分布式网络。
即未来即使没有WiFi和4G,大家也可通过彼此的手机或者其他的 IOT 设备本身进行连接。
想法倒是不错,但从其发布白皮书开始,就屡屡遭到质疑。
按理来说,去中心化的应用对应用设计和代码要求是非常严谨的,否则黑客们很容易就能找到漏洞,从而造成损失。
但 smartmesh 的中文版的白皮书发布不久,知乎网友“bitkevin”就在重要的介绍板块中发现错别字,其开头将“基于”smartmesh 写成了“急于”smartmesh,他当时就提出质疑,很难相信这个团队未来能够在协议层甚至网络安全层面能够做到严谨细致。
果不其然,目前的状况也正应了“bitkevin”的判断。
为了更加深入的了解这家公司,雷锋网编辑开始转阵微博,翻创始人王启亨的微博,同样没有令我“失望”,料也不少,先是晒与奥巴马的合照被网友怼。
有网友如此评论这条微博:
借奥巴马来宣传实乃一大败笔,做区块链最重要的是真正创造价值,用技术和思想来背书,而不是借名人来背书,借势名人只能说明耐不住寂寞,希望快速获得关注,王启亨作为团队领导,从微博里面看得出来对奥巴马的谄媚,这让真正热爱区块链的人感觉有些不舒服,懂区块链的人都明白区块链带给人们的精神财富是什么。
但显然王老板对这些冷嘲热讽并不在意,继续“秀”接到美国现任总统特朗普的邀请。
对于评论区的某些互动,雷锋网编辑看了也是很尴尬了~~~
总之,人家有钱、有空和总统握手,但就是没空请安全审计。
其实,这类事情本身是可以被避免的。
幻泉坦言,现在代币发行量很大,发行的版本很多,难免有一些意识不强,能力不高的程序员会犯这样的错,所以一行代码,就可以让黑客引发通货膨胀,造成项目发行方和购买者的利益被侵害。
很多发币的创业公司最主要的目的就是赢利,它就想尽快上交易所,所以安全会相对滞后,发生这些问题的主要原因是开发者在代码编写的过程中的安全验证问题,其他相同的合约代码也会有可能存在这样的漏洞,BEC 和 SMT 只是刚刚开始。
不过,对于程序员背锅这件事,雷锋网发现有人也有不同看法。
微博研发副总经理Tim Yang在其发布的个人微博中表示:
最近的 ERC20 的转账的安全问题,直接原因都是代码安全漏洞,由程序员背锅,但大家比较少讨论其深层次的原因,为什么以太坊比较容易出安全问题?以太坊只是一个记录 dapp 执行结果的区块链,其本身并没有加密货币复式记账所需的 utxo 模型。重要的 token 资产本身是需要货币级别的安全程度,以太坊目前的设计更适合游戏积分之类的合约运行结果。
因此,他强调,重要的 token 资产不适合构建在 ERC20体系基础之上。
出问题的只是BEC和SMT吗?问题可能比想象的严重得多。区块链安全公司 PeckShield发出预警称,多个ERC20智能合约遭受proxyOverflow漏洞影响,其检测定位到大量的ERC20 Token都受此影响,包括:
通过以太坊智能合约“发币”容易,但如果不做好严格的代码审计和安全防护,亿级资金的损失只在一瞬间,这些拥有智能合约的漏洞更像是一颗定时炸弹,这两天是BEC、SMT,下一个会是谁?