“黑客拿着房主证明找物业拿钥匙,证明是假的,却从物业那里拿到了真的钥匙”
事件回顾
2021年8月10日,PolyNetwork遭受了跨链攻击,被转移了6亿美金的加密资产。攻击者在多条公链上进行了攻击交易,并通过跨链管理合约和中继器组件完成了攻击。
用上面物业的例子来解释的话,黑客用假房主证明,从物业那里拿到了真的钥匙(AllianceChain上经过签名的Merkle证明)。
攻击解析
一、黑客在源链上初始化了一个本应是无效的攻击交易。
Polygon与Alchemy Pay达成合作,为DeFi提供法币支付入口:11月8日,以太坊Layer2网络Polygon宣布与加密货币和法币混合支付网关解决方案提供商Alchemy Pay达成合作伙伴关系,Alchemy Pay将为Polygon网络增加法币支付入口。Polygon表示,其DeFi生态系统中4,000多个托管应用程序现可通过传统金融支付平台(如Visa、万事达卡、PayPal)和全球多个本地支付渠道,使用法币在其DeFi应用程序上进行交易。[2021/11/9 6:39:40]
二、攻击交易在没有被充分检查的情况下被写入源链,之后被中继器纳入了AllianceChain的Merkletree并签字,然后发布到AllianceChain区块中。
三、黑客在目标链上用步骤二的有效Merkle证明,调用PolyNetwork的ECCM合约,将keepers改成黑客控制的公钥。
Poly Network:已恢复所有在攻击事件中受影响用户的资产:8月26日消息,Poly Network在推特中宣布,已完成所有Poly Network案件受影响用户资产的恢复,约价值6.1亿美元。PolyBridge现在已经恢复了总共59个资产的跨链功能。其他高级功能将逐步恢复。[2021/8/26 22:39:29]
四、获得keepers权限后,黑客就可以在多条公链上任意解锁资产了。
这里值得注意的是,PolyNetwork在有些链上的中继器没有通过攻击交易,所以即使智能合约相似,某些目标链上资产并未受影响。
dotmoovs宣布与Polygon达成合作伙伴关系:5月25日,体育竞赛平台dotmoovs宣布与以太坊扩容解决方案Polygon达成合作关系,Polygon将为dotmoovs构建、链接与以太坊兼容的区块链网络,并优化dotmoovs使用体验。[2021/5/25 22:42:32]
细节分析
一、黑客于北京时间2021年8月10日17:32:32在源链发起了一笔攻击交易。
https://explorer.ont.io/tx/F771BA610625D5A37B67D30BF2F8829703540C86AD76542802567CAAFFFF280C#
1500枚BTC从Poloniex交易所转出 价值2761.3万美元:据WhaleAlert数据显示,北京时间11月23日12:03,1500枚BTC从Poloniex交易所转入33PCTx开头地址,按当前价格计算,价值约2761.3万美元,交易哈希为:ac56b8ac920fe5ada16113723563c0aaa734f1136db58eaaa32925d1b1b5c610。[2020/11/23 21:46:28]
我们对交易进行了解码,得到了以下参数映射。
二、此攻击交易调用了一个method"66313231333138303933",其对应的签名等于0x41973cd9。这笔交易应该是无效交易,可是却被写入源链并被中继器纳入了AllianceChain的Merkletree并签字,然后发布到AllianceChain区块中。Merkletree是用来证明交易是否真实存在的。其产生的跨链交易如下:
动态 | Poloniex取消了USDC交易费用以提高交易量:据CCN消息,Circle决定在Poloniex平台上取消USDC交易费用,以刺激交易量,获得增长,据悉可能这一举措可能持续到十一月低。[2018/11/9]
https://explorer.poly.network/tx/1a72a0cf65e4c08bb8aab2c20da0085d7aee3dc69369651e2e08eb798497cc80
三、跨链交易在目标链上调用了PolyNetwork合约的EthCrossChainManager.verifyHeaderAndExecuteTx(),第一个参数包含了Merkle证明,解析如下:
四、这个函数解析了Merkle证明,发现证明是有效的,此攻击交易确实存在于已被签名的Merkletree中。之后调用了EthCrossChainManager._executeCrossChainTx()函数去执行此交易,即调用toContract指向合约(0xcf2afe102057ba5c16f899271045a0a37fcb10f2)中的method(0x6631313231333138303933),传入参数args(010000000000000014a87fb85a93ca072cd4e5f0d4f178bc831df8a00b)。而这个method指向putCurEpochConPubKeyBytes(bytes),因为其函数签名与步骤二中提到的method签名相同(均为0x41973cd9,此处为哈希碰撞),所以被顺利执行,将keepers的公钥改成了黑客的公钥。以太坊上的交易如下:?
https://etherscan.io/tx/0xb1f70464bd95b774c6ce60fc706eb5f9e35cb5f06e6cfe7c17dcda46ffd59581
五、黑客改变公钥后,即可以随意解锁资产。
事件总结
此次攻击是由一连串交易构成的,其攻击根源分析如下:
一、攻击交易在没有充分检查的情况下被写入源链。
二、中继器会接收任意含有"makeFromOntProof"事件的交易。
三、中继器将步骤一中的交易发布到了AllianceChain上。
四、在步骤二中,此攻击交易被纳入到AllianceChain的Merkletree上,产生了有效的Merkle证明。
五、原链上的ECCM合约通过步骤二产生的Merkle证明,验证了该交易在源链上“确实存在”,原始数据并未被破坏、未被修改。不过需要强调的是,在构建将被发送到目标链的Merkle证明之前,应该对交易进行全面验证。正如设计文档中所示。
“ThemanagementcontractfetchestheblockheadersfromchainA,verifieswhetherornotthecrosschainparametersandtheproofarevalid,andthentransmitsthenecessaryinformationtochainBintheformofanevent;”
"管理合约从A链获取区块头,验证跨链参数和证明是否有效,然后将必要的信息以事件的形式传送给B链;"
因此,目标链应使用Merkle证明来验证所收到的信息是未被破坏和未被改变的,而交易信息应在发送至目标链之前进行全面验证。
附:Merkletree定义如下:哈希树可以用来验证计算机中和计算机之间存储、处理和传输的任何种类的数据。它们可以帮助确保从点对点网络中的其他对等体收到的数据块是未被破坏和未被改变的,甚至可以检查其他节点是否撒谎和发送假块。
8月20日消息,Swarm官方技术团队LeetSquad针对Swarm网络节点激励模型问题开发的插件网络解决方案Swarm/Nbzz在8月13日上线Goerli测试网络,由于其接入成本低,不影响机器性能、激励模型科学合理的特点.
1900/1/1 0:00:001958年,纽约公约签署,旨在提供一个关键的治理基础设施,以解决涉及政府和跨国公司的大规模贸易和投资纠纷。但随着互联网和数字商业的兴起,产生了新的争议,其性质与纽约公约框架所建立的数百万美元的案件不同.
1900/1/1 0:00:00加密领域和基于加密技术的项目似乎正处于不断变化的状态。一些新的想法演变成为新的概念,这成为了一种趋势。与此相反的,一些无法演变成新概念的想法,永远无法顺利进行.
1900/1/1 0:00:00论文作者:Kleros创始人兼首席执行官FedericoAst、巴黎第二大学教授BrunoDeffains 编译:白泽研究院 译者注:本文篇幅较长,但译者已经进行了逻辑整理,请读者朋友们安心阅读.
1900/1/1 0:00:00NFT的热度已经炸了。 23日,Visa宣布以15万美元购入一枚CryptoPunk,由此引发抢购热潮,23日CryptoPunks成交额27821ETH,约合9222万美元。单日成交量和成交额均达到历史新高.
1900/1/1 0:00:00巴比特讯,CharlesSchwab首席投资策略师LizAnnSonders上周在雅虎财经网络研讨会上分享了她对加密货币以及美国金融和银行系统的看法.
1900/1/1 0:00:00