矿友交流论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 637|回复: 1

高智商犯罪:价值 4000 万人民币的3行代码,黑客增发3亿RVN

[复制链接]

159

主题

395

帖子

1145

积分

金牌会员

Rank: 6Rank: 6

积分
1145
发表于 2020-7-16 10:39:44 | 显示全部楼层 |阅读模式
几行平淡无奇的代码,悄无声息地薅走价值约 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 的挖矿代码,而不是盗走团队的私钥,或者用户的币,其实也有原因。
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 月收尾,如果不是意外被发现,整个过程可能还会持续更长时间。用户不会报警,因为没有损失,项目方不会报警,因为是自己审核问题,矿工也无法报警,他们损失的是若干年以后的奖励,而且,谁会去受理这样的报案呢?

回复

使用道具 举报

159

主题

395

帖子

1145

积分

金牌会员

Rank: 6Rank: 6

积分
1145
 楼主| 发表于 2020-7-16 10:40:50 | 显示全部楼层


黑客代码导致 3 亿增发——RVN 漏洞事件全回顾


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 官方人员的反馈,并合并进主分支。PR 详情原先的代码,对于 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 上需要核心开发团队把好关。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|矿友论坛

GMT+8, 2020-8-12 12:09 , Processed in 0.014567 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表