CertiK:PolyNetwork攻击事件分析

WB3交流加微信:WX-93588,⬅️此处为全站广告位,与正文项目无关
注册并登录App即可领取高达 60,000 元的数字货币盲盒:点击此处注册OKX

“黑客拿着房主证明找物业拿钥匙,证明是假的,却从物业那里拿到了真的钥匙。” 这是发生在2021年8月10日的PolyNetwork跨链进犯事情。进犯者成功转移了价值6亿美元的加密财物,并开始连续偿还被盗财物。进犯者运用跨链办理合约和中继器组件在多条公链上施行了进犯。

能够用上面物业的例子来解释,黑客用假房主证明(在源链上的无效买卖)从物业(中继器)那里拿到了真的钥匙(AllianceChain上经过签名的Merkle证明)。

进犯的详细过程如下:
1. 黑客在源链上初始化了一个本应是无效的进犯买卖。
2. 进犯买卖在没有经过充沛查看的情况下被写入源链,并被中继器归入AllianceChain的Merkletree并进行签字,然后发布到AllianceChain区块中。
3. 黑客在方针链上运用过程二中生成的有用Merkle证明调用PolyNetwork的ECCM合约,将keepers(操作权限)改成黑客控制的公钥。
4. 黑客取得keepers权限后,就能够在多条公链上任意解锁财物。

需要注意的是,PolyNetwork在有些链上的中继器没有遭到进犯买卖的影响,因而只需智能合约相似,某些链上的财物并未遭到影响。

详细分析如下:
1. 黑客在北京时间2021年8月10日17:32:32在源链上发起了一笔进犯买卖。
2. 链接(https://explorer.ont.io/tx/F771BA610625D5A37B67D30BF2F8829703540C86AD76542802567CAAFFFF280C)
3. 我们对买卖进行了解码,得到了以下参数映射。
4. 这笔进犯买卖调用了一个method”66313231333138303933″,对应的签名是0x41973cd9(与之后调用的putCurEpochConPubKeyBytes函数的签名相同)。本应该是无效买卖,但却被写入源链并被中继器归入了AllianceChain的Merkletree并进行了签字,然后发布到AllianceChain区块中。Merkletree用于证明买卖的真实性。生成的跨链买卖链接如下:(https://explorer.poly.network/tx/1a72a0cf65e4c08bb8aab2c20da0085d7aee3dc69369651e2e08eb798497cc80)
5. 跨链买卖在方针链上调用了PolyNetwork合约的EthCrossChainManager.verifyHeaderAndExecuteTx函数,并包含了Merkle证明,详细解析如上述链接。
6. 这个函数解析了Merkle证明,发现证明是有用的,该进犯买卖的确存在于已被签名的Merkletree中。然后调用EthCrossChainManager._executeCrossChainTx函数履行此买卖,即调用合约(0xcf2afe102057ba5c16f899271045a0a37fcb10f2)中的method(0x6631313231333138303933),并传入参数args(010000000000000014a87fb85a93ca072cd4e5f0d4f178bc831df8a00b)。由于此method与过程二中提到的method签名相同(均为0x41973cd9,哈希碰撞),因而顺利履行,将keepers的公钥改成了黑客的公钥。以太坊上的买卖链接如下:(https://etherscan.io/tx/0xb1f70464bd95b774c6ce60fc706eb5f9e35cb5f06e6cfe7c17dcda46ffd59581)
7. 黑客改动公钥后,便能够随意解锁财物。

对于这次进犯事情的总结如下:
1. 进犯买卖在没有充沛查看的情况下被写入源链。
2. 中继器会接收任意含有”makeFromOntProof”事情的买卖。
3. 中继器将过程一中的买卖发布到AllianceChain上。
4. 在过程二中,该进犯买卖被归入到AllianceChain的Merkletree中,生成了有用的Merkle证明。
5. 在方针链上,PolyNetwork合约经过过程二生成的Merkle证明验证了该买卖在源链上的存在,而且原始数据未被损坏或修改。但需要着重的是,在构建发送到方针链的Merkle证明之前,应对买卖进行全面验证,这也是规划文档中提到的。
6. 方针链(即B链)应运用Merkle证明验证收到的信息未被损坏或改动,买卖信息应在发送至方针链之前进行全面验证。

附:Merkletree(https://en.wikipedia.org/wiki/Merkle_tree)是用来验证存储、处理和传输任何数据类型的东西。它能够确保从点对点网络中接收的数据块未被损坏或改动,而且能够查看其他节点是否发送虚假数据。

此时快讯

【CZ:Multichain漏洞暂未影响Binance和Binance用户】7月7日消息,CZ发推称,Multichain漏洞暂未影响Binance和Binance用户,我们已经Swap了所有资产,并在不久前关闭了存款。无论如何,我们会提供援助,以帮助解决这个问题。

版权声明:本文收集于互联网,如有侵权请联系站长删除。
转载请注明:CertiK:PolyNetwork攻击事件分析 | 币百度

相关文章