CertiK:PolyNetwork进攻事情剖析
“网络黑客拿着屋主证实找物业管理拿锁匙,证实是假的,却从物管那边取得了确实锁匙”
事情回望
2021年8月10日,PolyNetwork遭到了跨链进攻,被迁移了6亿美元的数据加密财产(以后网络攻击逐渐相继偿还失窃财产)。网络攻击在好几条公链上开展了进攻买卖,并根据跨链管理方法合同和无线放大器部件完成了进攻。
用上边物业管理的事例来表述得话,网络黑客用假屋主证实(源链上的invalid transaction),从物业管理(无线放大器)那边取得了确实锁匙 (Alliance Chain上通过签字的Merkle证明)。
进攻分析
一、 网络黑客在源链上复位了一个本该是失效的进攻买卖。
二、进攻买卖在沒有被充足查验的情形下被载入源链,以后被无线放大器列入了Alliance Chain的Merkle tree并签字,随后公布到Alliance Chain区块链中。
三、 网络黑客在总体目标链上放流程二的合理Merkle证明,启用Poly Network的ECCM合同,将keepers改为网络黑客操纵的公匙。
四、 得到keepers管理权限后,网络黑客就可以在好几条公链上随意开启财产了。
这儿需要注意的是,Poly Network在有一些链上的无线放大器沒有根据进攻买卖,因此即使智能合约类似,一些总体目标链上财产并没有受影响。
关键点剖析
一、网络黑客于中国北京时间2021年8月10日17:32:32在源链进行了一笔进攻买卖。
https://explorer.ont.io/tx/F771BA610625D5A37B67D30BF2F8829703540C86AD76542802567CAAFFFF280C#
大家对市场交易开展了编解码,获得了下列主要参数投射。
二、此进攻买卖启用了一个method "66313231333138303933",其相应的签字相当于0x41973cd9(与以后调至的putCurEpochConPubKeyBytes函数签字同样)。该笔买卖应该是失效买卖, 但是却被载入源链并被无线放大器列入了Alliance Chain的Merkle tree并签名,随后公布到Alliance Chain区块链中。Merkle tree是用于证实买卖是不是真實出现的。其发生的跨链买卖如下所示:
https://explorer.poly.network/tx/1a72a0cf65e4c08bb8aab2c20da0085d7aee3dc69369651e2e08eb798497cc80
三、跨链买卖在总体目标链上启用了Poly Network合同的EthCrossChainManager.verifyHeaderAndExecuteTx(),第一个主要参数包括了Merkle证明,分析如下所示:
四、这一函数公式分析了Merkle证明,发觉证实是合理的,此进攻买卖的确存有于已被签字的Merkle tree中。以后启用了EthCrossChainManager._executeCrossChainTx()函数公式去实行此买卖,即启用toContract偏向合同 (0xcf2afe102057ba5c16f899271045a0a37fcb10f2)中的method (0x6631313231333138303933),传到主要参数args (010000000000000014a87fb85a93ca072cd4e5f0d4f178bc831df8a00b)。而这一method偏向putCurEpochConPubKeyBytes(bytes),由于其函数公式签字与流程二中提及的method签字同样 (均为0x41973cd9,这里为哈希碰撞),因此被成功实行,将keepers的公匙改为了网络黑客的公匙。以太币上的买卖如下所示:
https://etherscan.io/tx/0xb1f70464bd95b774c6ce60fc706eb5f9e35cb5f06e6cfe7c17dcda46ffd59581
五、网络黑客更改公匙后,即可以随便开启财产。
事情汇总
本次进攻是由一连串买卖组成的,其进攻根本原因剖析如下所示:
一、进攻买卖在没充足查验的情形下被载入源链。
二、无线放大器会接受随意带有"makeFromOntProof"事情的买卖。
三、无线放大器将流程一中的买卖公布到了Alliance Chain上。
四、在流程二中,此进攻买卖被列入到Alliance Chain的Merkle tree上,造成了高效的Merkle证明。
五、原链上的ECCM合同根据流程二造成的Merkle证明,认证了该买卖在源链上“的确存有”,原始记录并没有被毁坏、未被改动。但是要指出的是,在搭建将被发送至总体目标链的Merkle证明以前,应当对市场交易开展全方位认证。正如设计文档中所显示。
“The management contract fetches the block headers from chain A, verifies whether or not the cross chain parameters and the proof are valid, and then transmits the necessary information to chain B in the form of an event;”
"管理方法合同从A链获得区块链头,认证跨链主要参数和证实是不是合理,随后将需要的数据以事情的方式传输给B链;"
因而,总体目标链(即B链)应应用Merkle证明来认证所接到的信息内容是未被损坏和未被更改的,而交易信息应在转发给总体目标链以前开展全方位认证。
附:Merkle tree(https://en.wikipedia.org/wiki/Merkle_tree)界定如下所示:hach树可以用于认证电子计算机中合电子计算机中间储存、解决和传送的一切类型的数据信息。他们可以协助保证从点对点网络中的别的对等体接到的数据信息块是未被损坏和未被更改的,乃至可以查验别的连接点是不是说谎和推送假块。