5月15日BCH升级遭到攻击,慢雾安全团队及时跟进,并在社区里注意到相关分析工作,通过交流将此分析文完整转载于此。这是一场真实攻击,从行为上分析来看确实预谋已久,但BCH响应很及时,成功化解了一场安全危机。
BCH的5月15日升级遭到攻击,导致节点报出toomanysigops错误。经分析,攻击载荷为一个精确构造的P2SHTransaction,利用了BCH去年11月升级引入的OP_CHECKDATASIG操作码。
攻击导致了矿工节点无法打包,BCH方面通过类似于空块攻击的方式,紧急挖出十个空块以触发滚动检查点保证升级。攻击发生约1小时后,BCH矿池上线紧急修复后的代码成功继续出块。
刘昌用:BCH有重组保护可能是BCHA空块攻击停止的直接原因:北京大学经济学博士、知密大学创始人刘昌用在微博表示:对BCHA的空块攻击和粉尘攻击停止了。unknown算力开始正常打包内存池内积压的大量粉尘交易。BCH完成了此次分叉。攻击方完全有能力组织对BCHA的51%攻击,但知道BCH有重组保护,所以选择空块攻击和粉尘攻击。这可能是今天停止攻击的直接原因。感谢攻击方和防守方的演练,并最终回归理性。攻击事件再次证明BCH和BCHA在战争中成长为最安全的链。也希望BCH和BCHA各自在市场中证明自己,为密码货币的成功贡献力量。今日早前消息,网友爆料称,BCHA链上打空块霸屏的矿工已开始正常打包。[2020/11/25 22:04:39]
不过同时也有人观察到,在582698区块高度,有矿工挖出了哈希结尾为6bf418af的区块,大小139369字节。但随后该区块被10分钟后BTC
硬件钱包提供商Ledger宣布仅支持BCHN节点:11月19日,硬件钱包提供商Ledger称,根据BCH硬分叉结果,社区多数支持BCHN节点,而不是BCHA节点。于是,Ledger宣布将支持BCHN节点而非BCHA节点。[2020/11/19 21:20:15]
补丁位置:https://reviews.bitcoinabc.org/D3053
https://github.com/Bitcoin-ABC/bitcoin-abc/blob/f27da0752c0a3b7382df54a65ca3cf1c3629aad4/hide/validation.cpp#L592
动态 | 过去一小时推特讨论量:BTC排名第一 XRP、BCH紧随其后:根据CoinTrendz.com数据显示,过去一小时推特讨论量排行中,BTC凭借127的讨论量排名第一。XRP、ETH排名二、三位,其讨论量分别为71和49。讨论量排名四至十位的分别为: BCH(35)、TRX(29)、LTC(27)、EOS(26)、NEO(24)、ADA(22)、XLM(19)。[2018/11/18]
//原代码int64_tnSigOpsCount=GetTransactionSigOpCount(tx,view,STANDARD_SCRIPT_VERIFY_FLAGS);//补丁代码int64_tnSigOpsCount=GetTransactionSigOpCount(tx,view,STANDARD_CHECKDATASIG_VERIFY_FLAGS);
可见原代码组块过程中在计算Transaction中的SigOP数量时,错误地使用了STANDARD_SCRIPT_VERIFY_FLAGS,而非STANDARD_CHECKDATASIG_VERIFY_FLAGS。
在policy中我们可以找到他们。
https://github.com/Bitcoin-ABC/bitcoin-abc/blob/f27da0752c0a3b7382df54a65ca3cf1c3629aad4/hide/policy/policy.h#L108
staticconstuint32_tSTANDARD_CHECKDATASIG_VERIFY_FLAGS=STANDARD_SCRIPT_VERIFY_FLAGS|SCRIPT_ENABLE_CHECKDATASIG;
所以我们可以见到,当仅使用了STANDARD_SCRIPT_VERIFY_FLAGS时,计算脚本中SigOP数量时,是不包含OP_CHECKDATASIG的。所以这个包含20010个SigOP的攻击载荷,在组块时,统计出来的SigOP数量为零。
总结
攻击者利用了BCH引入OP_CHECKDATASIG时产生的,又未完全修复的漏洞,巧妙地构造了攻击载荷。攻击者应该高度了解客户端代码,并熟悉OP_CHECKDATASIG漏洞。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。