区块链技术资源分享
追寻中本聪先生的脚步

RVN乌鸦币 Ravencoin 黑客代码导致 3 亿增发

6 月 29 日,Solus Explorer 开发团队 CryptoScope 的一个程序员在回归测试时,发现浏览器统计的 RVN 余额出了问题,在深入排查问题后,他确认主网出现了很多异常的 RVN 增发操作,随后快速联系 Ravencoin 官方团队成员反馈了这个 bug。

在与 RVN 开发团队沟通后,CryptoScope 决定暂时关闭 Solus Explorer 的部分入口,以降低其他攻击者利用漏洞的可能性,为官方团队解决问题赢得了一定时间。

7 月 3 日,RVN 团队向社区发布了紧急更新,并最终于 7 月 4 日在 1,304,352 区块上对 Ravencoin 网络进行了程序修复。

7 月 8 日,RVN 官方解释称,本次漏洞是由于黑客(Github 账号:WindowsCryptoDev)提交的恶意 PR (Pull Request)引入的 bug 导致。

此次漏洞共导致 RVN 增发 3.01 亿枚,相当于原有 210 亿总供应量的 1.44%,已有供应量的 4.6%。

根据追踪,大量增发的 RVN 被拆开发往不同的地址,并最终转到了交易所,官方定位到了以下 3 个地址:

RVhLBBsdFbKmBC1muPB2of74w19NwHzUsK

RAekzFLJDfLpaTfMonPNEvahWVYvBu2iE8

RU4C2CLwRTm4s4LbWMYdzAJFbZGL5rZqGs

RVN 团队表示已经追踪到其中一个黑客团队的线索,并已经掌握攻击者的信息,希望其将增发的 RVN 转至特定的地址进行销毁。RVN 团队称已有总计约 390 万枚增发的 RVN 被销毁。

此外,官方团队没有通过类似 ETH 硬分叉的形式来解决攻击,而是间接承认了这些增发币的有效性。为了保证总供应量不变,官方给出的建议方案是降低未来挖矿总收益,不过这个方案还需要得到社区的认可,并最终通过链上 BIP9 升级后才能生效。

此次漏洞除了增加 RVN 的通胀率之外,不会影响用户已有的 RVN 资产和转账。

RVN 原有发行总量为 210 亿,出块时间为 1 分钟,目前的区块奖励为 5,000 个 RVN,每 210 万个区块后奖励会减半,也就是约 4 年减半一次。根据官方目前给出的方案,每次减半将比之前提前 59,580 个区块(约为 41.375 天)。

攻击者行为复盘

1 月 16 日,名为 WindowsCryptoDev 的开发人员在 Ravencoin Github 提交了一个 PR(Pull Request), 表面看起来是在完善节点返回的报错信息,该 PR 很快就得到了 Ravencoin 官方人员的反馈,并合并进主分支。

WindowsCryptoDev 的开发人员在 Ravencoin Github 提交了一个 PR(Pull Request), 表面看起来是在完善节点返回的报错信息,该 PR 很快就得到了 Ravencoin 官方人员的反馈,并合并进主分支

原先的代码,对于 asset 相关的交易,只要交易的 RVN output value 不是 0,都会返回 “bad-txns-asset-tx-amount-isn't-zero” 报错信息。

该 PR 针对不同的 asset 交易类型进行了报错信息优化,表面看起来是为了方便开发者区分具体的报错原因,但是黑客留了一个后门,即没有针对 TX_REISSUE_ASSET 进行报错信息优化。注意,这样带来的后果不仅仅是报错信息不可分辨,而是将原本不合法的交易(TX_REISSUE_ASSET 且 RVN output value 不是 0)判断为合法的交易,最终导致了 RVN 的增发。

1 月 17 日,黑客在 Ravencoin 主网持续发布 TX_ISSUE_ASSET 交易,为后续的 TX_REISSUE_ASSET 攻击提供基础。

5 月 9 日,黑客开始每隔 2 小时在 Ravencoin 主网发起一个 TX_REISSUE_ASSET 交易,增发 500,000 RVN 到自己的地址,该行为一直持续到 7 月 3 日,此时黑客察觉到官方已经准备对 bug 进行修复(此时主网上的 bug 并没有完全修复)。

7 月 4 日,主网上还出现了 3 笔新的攻击交易,增发了两笔 1,000,000 RVN 和一笔 2,804,398 RVN,不过这 3 笔攻击交易应该都不是之前的黑客所为。

从 Solus Explorer 统计来看,最终总增发量为 301,804,400 RVN,也就是超过 3.01 亿 RVN。

安全提示

虽然此次漏洞只影响了 Ravencoin 网络,但是还有很多其它区块链系统也遇到过类似的安全问题。例如 Bitcoin 曾经在 2018 年被爆出过类似严重的安全漏洞,攻击窗口从 2017 年 10 月持续到 2018 年 8 月,同时影响了所有 2017 年 10 月之后基于 Bitcoin 代码开发的新币种。不过当时的 bug 并不是黑客恶意引入,而是开发人员的错误导致,值得庆幸的是,该 bug 在被开发人员修复之前没有被任何黑客利用。

对于区块链开源项目来说,代码贡献者的技术能力、贡献动机等因素都存在诸多不确定性,因此在代码 review 上需要核心开发团队把好关。

内容来源@Cobo钱包


黑客的方法

一位微信名为「奋斗的 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 月收尾,如果不是意外被发现,整个过程可能还会持续更长时间。用户不会报警,因为没有损失,项目方不会报警,因为是自己审核问题,矿工也无法报警,他们损失的是若干年以后的奖励,而且,谁会去受理这样的报案呢?

区块律动BlockBeats
微信号:BlockBeats
区块律动BlockBeats专注于区块链领域科技创业分析,提供最新鲜,最具深度,最有价值的区块链行业新闻


RVN开发团队发现问题以后,面临巨大的危机。

一方面代码是肯定要修正的,修正版代码要给到矿池去更新,相当于分叉,更新分叉之后,老代码再增发的币也没啥用了。

同时,因为预谋者增发完就会倒几手转到交易所,这些币混进交易所钱包,即便代码更新后,也不影响他未来的交易。所以,RVN开发团队也需要通知交易所,暂停充币,这就是你之前看到几大交易所忽然暂停RVN充币的背后原因。

6月底到7月初,RVN开发团队做这些工作时,都是偷偷摸摸在做,生怕预谋者发现。为啥呢?怕预谋者一旦发现后想:“终于发现了,要更新了是吧!那我也不为了隐蔽而小小增发了,趁着还没更新完成,我直接巨量增发!天量砸盘!全部变现!”

如果预谋者是个极端分子,那么真按上面的做,是有可能摧毁RVN整个项目的,经济模型会直接归零。不过,预谋者似乎是个理性的人,只为求财,在7月初代码更新近乎完成前,他应该已经发现端倪,但最后也只是增发了3亿6千万个左右的RVN,并成功转入了几大交易所,折合4000万元左右。

而且,最后没来得及转入交易所的300万个币,预谋者还主动销毁了,并没有继续搞事。

现在,更新也完成了,RVN项目总算逃过一劫,慢慢把预谋者的这4000万元吃掉就好,毕竟项目背后站着Overstock这样的金主,应该能弥补上。

至于增发了这么多且已经流入市场,RVN项目之初设定的总量210亿个恒定,怎么维护不变?有的人肯定会说:RVN开发团队自己审核不严,那应该让他们销毁自己手里的代币赔偿!但是,币总告诉你,他们老早就宣布自己不预挖不预留,和比特币一样,所以,赔是不可能赔的(即便自己手里有早期挖的币),最后方案很有可能是让挖矿量提前减半,最后产出到210亿个为止。

最后,估计你想问:这个预谋者有罪吗?币总想说,漏洞代码是开发团队发布的,运行该代码也是所有矿工的共识,上哪里去说人家的罪?总结起来给这位仁兄一句评价:高!实在是高!比当年那个什么美链ERC20代码漏洞增发,不知道高到哪里去了!

这就是2行代码赚4000万的始末。

币总最后郑重提醒,很多非技术导向的团队,一定要对代码进行审核,以免未来出大事。

币早
微信号:bqzzd999
区块链第一自媒体。

RVN乌鸦币 Ravencoin 黑客代码导致 3 亿增发

分享到:更多 ()

来评论吐槽 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

快手号:神吐槽shentucao

交易所地址更多手机免费挖矿APP