几行平淡无奇的代码,悄无声息地薅走价值约 4000 万元人民币,黑客的手段是越来越高明了。
神奇的是,这次安全事故发生后,代币的价格没崩,没有单独的受害者,也没有维权,就因为黑客没偷项目方的秘钥,也没盗走用户的资产,而是采用了一种更隐蔽的方式:在矿工兢兢业业挖矿的时候,悄悄「增发」了 RVN(Ravencoin),让人以为(至少看起来)像是系统正常产生的代币。
事情的经过是这样的。
6 月 29 日早上,海外的 CryptoScope 团队成员最先发现区块链项目 Ravencoin 并没有按照预期运行,在每个区块正常产生 RVN 之外,还额外创建了多余的 RVN。他们很快对异常进行标记。在确认漏洞后,他们联系了 Ravencoin 开发团队。
经开发团队确认,Ravencoin 确实存在漏洞,随后团发布紧急修复公告。截至这时,漏洞已经让系统多产生了约 1.4%(约 3 亿枚)的 RVN 代币,这部分凭空产生的代币,数量大概是所有 RVN 矿工埋头苦干 44 天的开采量。
由于这部分 RVN 没有任何限制,等到被发现时,大部分代币已经流入了加密市场,冻结、回滚等常规操作已经无法奏效。
根据 CryptoScope 的披露,这些被增发的代币,大部分流入了币安,少部分流入了 OKEx。或许,这个「聪明」的黑客并没有急躁地卖出砸盘,而是有耐心地出货,一直到被发现。根据加密货币行情网站 Coinmarketcap 的数据,今年 6、7 月份,RVN 代币的二级市场价格并没有产生明显下跌,甚至在 7 月 6 日后迎来了上涨。
不幸的是,在开发团队发布补丁和新协议执行之前的几个小时,又有人利用这个漏洞「增发」了约 480 万枚 RVN。根据团队的披露和确认,至少有三个加密地址牵涉其中。
核心开发者 Tron Black 透露,其中有一个「攻击者」留下了蛛丝马迹,开发人员掌握了信息后,希望对方将增发的 RVN 转至 RXBurnXXXXXXXXXXXXXXXXWUo9FV 地址进行销毁。据披露,被掌握信息的「盗贼」后续将增发的部分代币打回了销毁地址。最终,大约 390 万枚 RVN 代币通过这种方式被销毁掉了。
黑客之所以盯上 Ravencoin 的挖矿代码,而不是盗走团队的私钥,或者用户的币,其实也有原因。
Ravencoin 简称 RVN,中文名是「乌鸦币」或「渡鸦币」,于 2018 年 1 月诞生,无 IC0,无预挖矿,是个纯粹的「社区币」。乌鸦币在比特币源码基础上进行算法改良,优化转账环节,并增加类似以太坊的资产通证发行功能,意在打造一个完全去中心化、社区自治的区块链服务平台。
其实,区块链领域中完全社区化的项目并不算多,因为没有预挖和预留,估计除了老老实实挖矿的收入,开发团队手上也没多少币。之前加密货币交易平台币安的创始人赵长鹏,就曾公开赞扬乌鸦币团队:「没有 IC0,社区化项目,低调谦逊的团队,不需要上币费。」
去年 10 月,乌鸦币升级算法,更改为 X16R 的升级版 X16Rv2,目的就是为了阻止乌鸦币网络上 ASIC 矿机继续挖矿。在此之前,大约有 83% 的算力是 ASIC 矿机,升级后,RVN 的算力很快从原来的 30T 下降到 5T 左右。
有意思的是,这个并没有公布全部成员,基本只有 Bruce Fenton 和 Tron Black 两位开发者露脸的团队,不过,这没有影响外界对项目的估值。
此前,在接受媒体采访时,美国电商巨头 Overstock 的前 CEO Partrick Byrne 表示已将数百万美元投入了乌鸦币,并声称提供的服务比人们意识到的还要多。去年 10 月,他在推特回答网友询问曾买入什么加密货币时坦言,是比特币和乌鸦币。而包括 Medici Ventures 和 tZERO 也曾表示,要在基础设施方面支持乌鸦币的开发。
没想到,平日低调的乌鸦币竟然被黑客盯上了。
一位微信名为「奋斗的 M4ster」的社区成员提供了他的分析思路,发现这名黑客只用了 3 行代码就成功「生成」了价值 4000 万人民币的财富。
问题出在上面这段代码,从代码表达上看,这部分与铸币有关,但这段代码只有一个 else if。
在代码语言中,else if 是「否则如果」的意思,是一种判定条件,很显然,这段代码里只判定了一个条件,没有继续判定其他条件。
于是,黑客只要发送一笔交易,就可以凭空铸出一笔新币,即便这笔新币不在正常的 RVN 总量范围内,而是超出总量之外的数量,一笔交易就可以凭空造成 50 万枚 RVN。
RVN 总量有 210 亿枚,几十万的新增几乎就是九牛一毛,谁都发现不了。黑客笑了。
从 5 月 9 日,黑客发起第一笔攻击开始,他用了近两个月时间,总共发送了 5000 笔交易,慢慢造出了约 3 亿枚 RVN,占总量的 1.4%,总价值 4000 万人民币。
黑客的最后一次攻击发生在 6 月 29 日。当时 CryptoScope 团队正在解 bug,顺便看了一眼浏览器,突然就觉得 RVN 的总量有点问题。在黑客持续攻击了 2 个月后,这一行为最终被发现了。
一般来说,代码上的漏洞都是黑客仔细研究代码发现的,需要付出极大成本才能发现一个有价值的漏洞,而 RVN 的这段代码,是黑客自己写的。
Ravencoin 作为一个开源项目,所有人都可以在 Github 上为该项目提供代码。因为开源项目的初衷就是让所有开发者齐心协力,为项目优化做贡献,每个人都可以把自己的想法写成代码,放在 Github 上。代码会由项目方审核,决定用不用这段代码。
黑客在 1 月提交了这段代码,项目方没有发现问题,直接整合进了项目里面,这才给了黑客机会。而黑客整整潜伏了 4 个月,才开始攻击。
这并不是一次普通概念的黑客攻击。一般的黑客攻击,是需要黑客攻击账户,从账户中盗走用户资产。所以黑客攻击中大部分损失的是用户,但这次的另类黑客攻击,损失的是谁?
用户并没有受到损失,因为资产价格没有波动,项目方也几乎没有损失,他们自己也无需补偿任何人。
真正损失的是矿工。
看了项目方提供的增发解决方案,基本上都是从挖矿角度解决,比如提前产量减半、强制总量达到上限后停止挖矿等。按照这样的逻辑,这场黑客攻击的损失方只能是矿工。矿工靠挖矿生存,这 3 亿枚 RVN 本应是矿工的奖励,现在他们拿不到了。
如果这一切都是黑客从头计划好的,那么这就是一场完美的攻击,1 月布局,5 月攻击,7 月收尾,如果不是意外被发现,整个过程可能还会持续更长时间。用户不会报警,因为没有损失,项目方不会报警,因为是自己审核问题,矿工也无法报警,他们损失的是若干年以后的奖励,而且,谁会去受理这样的报案呢?