复盘ETC近期频发的双花攻击事件
摘要
Coinbase没有成为任何攻击交易的目标,也没有任何资金的损失。
在PST 7/31/2020晚上10:57,Ethereum Classic(ETC)受到51%攻击,导致约80万ETC(约580万美元)的双花交易。
PST 8/5/2020晚上8:15,Ethereum Classic再次受到51%攻击,导致约46万ETC(约320万美元)的双花交易。
在第一次攻击中,运行在精简模式下的Parity(OpenEthereum)节点忽略了攻击区块,而其余网络则接受了攻击区块为,导致修精简Parity节点与其余网络出现了分区网络
如果攻击者控制了大部分挖矿权,他们就能够51%攻击区块链网络。攻击者会重组("reorg")区块链的历史,通过双花交易窃取资金。
Coinbase的观点
在 PST 7/31/2020 晚上11:10,Coinbase区块链安全部接到警报,Coinbase的ETC节点在预期的时间区间内没有看到新的区块。经调查发现,我们的节点在区块链状态上已经分叉。Coinbase内部精简的Parity节点与我们非精简的Parity节点和Geth节点看到的区块不同,这是第一个说明有问题的指标。我们得出的结论是,在PST 7/31晚上10:57的大规模重组导致了网络分叉,是由于不同的节点造成的(关于分叉的更多信息,请参阅下面的网络分区部分)。
大型的重组是潜在双重花费的显著指标。此时,Coinbase选择大幅提高我们的确认次数要求。这确保了Coinbase平台上没有双花交易入账。
两个公开的问题随之而来:首先,重组的交易中是否包含双花?第二,考虑到网络分区,Coinbase如何确保我们在正确的链上呢?
为了回答第一个问题,我们比较了孤链和导致重组的新链。我们发现,在53个孤块交易中,有约580万美元的ETC被双花。然而Coinbase没有成为这些攻击的目标。
我们接下来的重点是了解ETC网络分区。我们发现精简的Parity节点会忽略超过一定高度的区块。因为大规模的重组试图对超过这个阈值的区块进行孤块化处理,所以被精简的Parity节点认为重组是无效的。需要注意的是,网络中的其他节点选择跟随重组,这一现象导致了网络的分区。在观察了网络分区的每一方后,Coinbase开始跟随规范的主链(即包括双花攻击的非精简的Parity链)。
8月5日晚,区块链安全部又收到警报,发生了大规模的重组。由于精简后的奇偶性节点不再被操作,没有出现类似第一次重组的网络分区。因此,唯一的问题是Coinbase是否是这次攻击的受害者。做了和上面类似的分析,我们确认ETC再次被攻击,这次的攻击金额约为320万美元,涉及9笔孤块交易。我们再次发现,Coinbase不是任何一笔孤块交易的受害者。
作为额外的预防措施,我们进一步提高了确认次数以确保客户资金的安全。需要注意的是,这并不是ETC第一次被双花。
虽然ETC近几日看起来已经稳定下来,但我们会继续监测ETC是否有进一步的动荡。
技术分析
基于Nonce的双花攻击
在这次ETC攻击中,我们发现了一个有趣的模式,用来执行双花。我们在下面讨论攻击者双花策略的一个例子。
攻击者使用一个攻击交易来双重花费多个孤块交易的例子:
攻击者利用一个攻击交易将多个单个交易进行双重消费的例子。
攻击模式
1. 攻击者通过多次交易向被攻击交易所发送大量ETC。
2. 攻击者利用被攻击交易所服务,将ETC兑换成其他货币,然后将资金移出平台。
3. 攻击者重新记录区块链,"删除 "步骤1的交易。
4.现在,攻击者可以使用他们原来的ETC。然后他们用一笔大的交易将资金转移到他们控制的另一个地址。为了使任何重复的遗弃交易变得无效,这一点是必要的。
结束状态:攻击者现在控制了他们从被攻击交易所那里转出的一定数量的非ETC资产,同时还保持对原始ETC的控制。
有趣的是,通过使用这种基于非ce的增量技术,每笔孤块交易的移动量不到3万ETC(约20万美元)。我们相信,攻击者使用这些增量的孤块交易是由于被攻击交易所的一些基于价值的速率限制。例如,被攻击交易所交易所可能有一个功能,防止用户在一次存款中收到大于X金额的ETC。
攻击者利用一笔攻击交易对多笔无主交易进行双花的例子。
在这里,我们发现孤块链上发生了三笔交易。发送方(即攻击者)和接收方(即受害者)的地址在三笔交易中都是一致的。如上所述,每笔交易的转账金额都在约20万美元左右。此外,后两笔交易与前一笔交易相比,nonces增加了。根据账户nonces的工作方式,这是可以被预估的。
关键点是在主链上,只要攻击者账户没有持有足够的资金来支付转账,后两笔交易都是无效的。在主链上,我们发现一个来自攻击者地址的大额双花交易,而不是三个独立的双花交易,并且各有一个孤块交易。
主链(即攻击者)上的攻击交易,将资金合并并转移到攻击者控制的地址上。
值得注意,这个大交易的转移值等于三个孤块交易的值之和。这确保了所有三个孤块交易在主链上都是无效的。
精简奇偶节点网络分区
除了正常的51%攻击双花攻击模式外,由于这次事件,还出现了第二个有趣的情况。当配置在精简模式下时,Parity OpenEthereum客户端会选择忽略任何超过一定高度的区块,并认为这些区块无效。
一个 "古老 "的错误,导致精简后的奇偶性节点拒绝reorg。
因此,精简后的Parity OpenEthereum客户端忽略重组以及继续挖掘自己的独立链。如上所述,我们称之为孤链。重组链的无效性导致网络按节点和节点配置进行了分区。
ETC网络如何分区
在这个分区发生后,矿工继续在精简后的Parity链以及网络其他部分所遵循的主链上采矿。
为了清晰起见,请注意,被精简的Parity节点的当前状态等同于未被精简的Parity、Geth节点在被重组之前的状态。在重组内请求一定高度的区块,会从被精简的Parity节点返回孤儿区块,而未精简的Parity节点则返回攻击者区块。从unpruned节点接收到的孤块曾是unpruned Parity节点的状态的一部分,然而孤块被重组出unpruned节点的视图。
继续运行被精简的奇偶性节点的节点操作者维护并扩展了孤链。在这些运营商重新同步他们的精简奇偶节点或切换到不同的节点类型之前,网络化仍然是分区的。Coinbase强烈建议切换到支持的节点(例如Geth)。
Reorgs
根据Coinbase非精简节点的日志,曾经有一次极其庞大的重组,从区块高度10904147开始直到区块高度10907434。在攻击时,主链(即攻击)的高度为10907434,而孤链的高度为10907836。孤链和主链之间的共同原型区块高度为10904146。这意味着重组了孤链3692个,新增了3287个区块。需要注意的是,虽然攻击链的高度较低,但因为难度较高,它取代并超越了孤儿链成为ETC的正统链。假设区块时间为15秒,攻击者必须用多数hashpower挖矿约13.7小时才能执行这次攻击。
重组8/1的示意图
被精简的节点忽略了这个重组,而未被精简的节点则接受这个重组为有效。更多信息请参见上文的网络分区部分。
我们的分析显示,在链式重组中,有15个双花交易对和38个基于孤块的交易。这些双花都没有影响到Coinbase。
2020年5月8日,ETC在主链上发生了第二次大规模的重组。
在重组时,孤链区块为0x9555,高度为10939866。重组后,主链(即攻击)链头块为0x7521,高度为10939975。孤链和主链之间的共同原型区块在高度10935622。重组孤链4244块,而攻击链包含4353块。假设区块时间为15秒,攻击者必须用多数算力挖矿约18.1小时才能执行这次攻击。
reorg 8/5的示意图
区块链安全公司对这次重组进行了与上述相同的分析,发现了7个双花交易对和另外2个发送到受害者地址的孤儿交易。同样这些双花都没有影响到Coinbase。
双花
在第一轮双花交易中,我们发现约有580万美元被双花。有5个独立的地址向5个独立的受害者地址发送了大量的双花交易。攻击者和受害者地址一对一地进行了映射。
在检查了来往地址后,区块链安全公司得出结论,这些双消费都没有影响到Coinbase:
在第二轮双花中,我们发现约有320万元被双花。这一次,只有一个目标受害者地址为0x38cd54fc7b1fe7994355fce1d75c9c4bd7335a46。此外,每笔交易的双花金额有更高的差异,在约9.7万美元到高达约108万美元之间。我们发现,在第二次攻击中,攻击者倾向于不拆分孤块交易,这意味着孤块交易和攻击交易一般是一对一映射的。一个例外是特定的攻击者地址0xa56cfaef495a45f17f44fd0b2d85e0fe63b9ba7d,它发送了三个孤块交易。
需要注意的是,在第一次重组中,我们的分析还发现了一些其他的小额双花,数量在10美元左右。我们认为这些都是非恶意用户在重组期间与区块链互动导致的非恶意双花消费。
Coinbase 作者
olivia 翻译
李翰博 编辑