观察|ETC遭受的廉价51%攻击迷局
金色财经报道,8月3日,ETC官方推特公布了区块链数据分析公司Bitquery针对ETC遭受51%攻击事件的调查报告。
报告显示,8月1日0:30-8月2日11:30,ETC遭受51%攻击。
此次攻击由一个独立矿工“0x75d1e5477f1fdaad6e0e3d433ab69b08c482f14e”发起。该矿工悄悄产出了3594个区块,随后一并广播给其他矿工,由于这些区块数量众多,区块顺序比其他矿工所建立的链占有更大权重,致使其他矿工不得不接受这一系列区块,最终攻击者区块成功取代了原有区块,从区块高度10904146到10907740区块发生重组。
而链上数据表明,该名矿工故意从外部购买了哈希算力以发起攻击,且该矿工地址自7月29日才显示为活跃状态,连续3天每天生成30个区块。最终该攻击者仅花费了17.5 BTC(约合17万美元)欺骗整个ETC网络12个小时,成功实施攻击。
此外,由于在ETC网络中,并非所有由节点和矿工运行的软件都具有相同的行为,节点版本和软件的多样性使得此次攻击更加严重:
基于Geth和 Hyperledger Besu两个客户端的节点接受攻击者的区块并选择最长的分叉链;
基于Open Ethereum客户端的节点仍保留旧的链。而这些都导致有些矿工基于旧链转账,但在主要的ETC链(分叉链)上并未反映,而基于不同客户端的节点可能面临双花。
据相关机构的调查,其具体过程如下:
1. 恶意矿工(ETC地址:0x75d1e5477f1fdaad6e0e3d433ab69b08c482f14e)挖掘了约3000个区块。
2. 2Miners矿池由于Multi-geth结束对Ethereum classic的支持而短暂下线进行维护。
3. 当2Miners矿池维护的这段时间内,2Miners矿池并没有产生新的区块。在2Miners矿池结束维护上线后,约3000个区块同时被插入到2Miners矿池中。
由于Ethereum Classic上所有的Parity或者OpenEthereum节点都无法处理这3693个来自Core-Geth节点的区块,因此就出现了链分叉:
所有的Parity或者OpenEthereum节点上的矿工都依旧在原始主链上进行挖掘,但是在Core-Geth节点的矿工就在被插入约3000个区块的新链上挖掘。
5. 根据工作证明(POW)共识,在新链上的工作量会逐渐超过原始主链,在原始主链上Parity节点的一些矿工根据会“选择在更多工作量的链上进行挖掘”的准则,转移到新链上进行挖掘。
最终,在区块高度10904146处,总共3693个区块被通过重组(reorgnization)的方式被加入到区块链中。
通过两个机构的调查和信息公布,很明显的原因有2个,一是因为近期的客户端支持问题,二是攻击者恰恰利用了这一点。
不同的客户端代表着不同的接入角色,矿工既是网络维护方,也是数据的产生者,这意味着,如果在客户端提供一些不正确的数据时,被其他节点同步,也就是攻击的开始。
上文中的攻击者利用矿池节点的重新上线时机,将准备好的区块数据让矿池误以为是正确记账数据而继续广播。而因为Parity、OpenEthereum、Core-Geth客户端矿工的“不和”,对不同数据的同步不一致,因此,将导致分叉。
此次的攻击的源头是客户端的混乱,而这件事的成因已酝酿久矣。
据金色财经此前报道,2020年1月25日,ETC Cooperative执行董事Bob Summerwill近期宣布扩展对ECIP-0001提案的支持,提案中一些变化包括,剔除Rust开发者Wei Tang。
Bob Summerwill指控称,Wei Tang作为ECIP编辑者和ECIP-1000作者,多次滥用职权,威胁要软分叉或是离开ETC生态系统。
此外,由于在ECIP-1000的编辑器列表中使用soc1c的真实姓名代替了soc1c,ETC社区中还有声音指责称Wei Tang对社区另一位ECIP编辑soc1c人肉搜索。
对此,Wei Tang于博客中解释事件缘由,并回应称,对于所涉及的提案要求作出更改等是出于避免ETC过于集中化的考虑。不过后期争议实际转移到了自己身上。同时Wei Tang表示并没有所谓的人肉soc1c事实。因为此前合并编辑者列表时,soc1c本人已同意,且soc1c真实姓名在社区中广为人知,且其本人也经常使用自己的真实姓名。
据悉,该争议事件起于ECBP-1076提案。由于觉得首次在ETC会议上提出并一次性接受ECBP-1076提案,以及ECIP编辑将ECBP-1065提案状态更改为“活动”的做法不谨慎,因此Wei Tang要求进行更多讨论,但遭soc1c拒绝(soc1c执行了撤销审查),此后soc1c提交请求要求将Wei Tang从ECIP流程中剔除。此后,Aztlan硬叉过程中,又出现ECIP-1061和ECIP-1072的争议(该争议中也出现了“撤销”操作)。Wei Tang认为,提案过程中soc1c的“撤销”操作实际上是很大的集中化风险,并创建了新请求,认为“撤销”操作违反流程,不应被当做规范。
对于ETC Aztlán硬分叉时间推迟一事Wei Tang与社区也有不同观点,他认为此前已经由于Aztlán规范的错误导致Mordor和Kotti测试网已产生无法消除的损害,现在只希望损害不会波及到主网。Wei Tang称“不负责任地硬分叉会破坏网络安全,每天高喊代码就是法律是没用的。”
Bob Summerwill回应称,分叉时间推迟是因为不可预测的区块时间因素导致,而非社区更改了此前选定的硬分叉的区块号。而区块时间预测出现误差是常有的事情。针对社区不健康的指责,Bob Summerwill回应ETC社区非常健康。
交锋反反复复,而不能确认统一。
6月14日,Wei Tang就宣布了,其个人将停止支持ETC,原因为在Phoenix硬分叉后,ETC网络打破了以太坊一致性的逻辑,特别是在不变性方面。
一个月后,ETC两大客户端OpenEthereum和MultiGeth宣布停止支持ETC。而由于这两个客户端仍然共享ETC网络节点总数的70%,这是一个要求ETC用户采取适当行动的公共服务公告。而根据Wei Tang此后公布的文章,两大客户端停止支持ETC的原因和Wei Tang停止支持ETC的原因一样。
这就是攻击开始的源头,当一个网络节点客户端占据超过了一半,而突然要停止其服务,在后期算力迁移的过程中,网络一定是危险的。
对于OpenEthereum和MultiGeth宣布停止支持ETC的消息,ETC亚太社区经理 Christian表示,OpenEthereum的维护者Gnosis已作出正式申明,停止支持ETC是为了将其有限的精力投入到以太坊主网开发中,而不是Wei Tang所说的原因。
Phoenix之后MultiGeth的实际开发者只有Wei Tang本人,由于某些分歧,Wei Tang选择了将MultiGeth停止ETC支持。
从去年以来,ETC先后完成了三次硬分叉升级,使ETC网络目前与ETH完全一致。其中,ETC Core团队功不可没。早在上半年,ETC Core团队即开发了一款更加安全的Go语言客户端CoreGeth,CoreGeth完美地支持了Phoenix硬分叉,并且至今保持完好运行。从对Gnosis的回帖中大家也可以看到,OpenEthereum和MultiGeth退出后,CoreGeth作为ETC Core官方维护的客户端完全值得大家信赖,继续服务于ETC网络。
随后Wei Tang回应,事实是,OpenEthereum和MultiGeth是两个支持ETC时间最长的客户端。其中,OpenEthereum是4年,MultiGeth为2年。其他客户端支持ETC的时间都没有超过一年。其中,Hyperledger Besu从去年9月开始支持ETC,CoreGeth在今年春天开始从MultiGeth分离出来支持ETC,OpenETC则是刚刚开始支持ETC。
在唐威看来,除了ETC网络放弃了不变性原则,暂停支持ETC,也是一个合理必要的回应,因为过去6个月来,看到ETC社区很糟糕的一面。
这是对ETC来说最激烈的评论了。面对客户端问题,社区不和以及突如其来的攻击。
最终带来的是一个客户端的再次结束,今日,Wei Tang发推称,OpenEthereum的一个名为OpenETC的分支,可能是有史以来最为短促的分支之一。两周前很多ETC社区成员还在推广OpenETC,但他们最终放弃了。
目前,OpenETC的主要开发者已删除他的账户。
唐威认为,OpenETC是对所有人的一个警告,我们应该更加小心我们所信任的东西。
一个加密货币社区,尤其是以pow共识建立的,算力是保护所有人资产的最大武器,而当社区不和,也就意味着拥有算力的人都可能成为潜在的冲突者或者引发攻击的原因。