木星链 木星链
Ctrl+D收藏木星链
首页 > 波场 > 正文

POL:Poly Network攻击关键步骤深度解析

作者:

时间:1900/1/1 0:00:00

北京时间2021年8月10日,跨链桥项目Poly Network遭遇攻击,损失超过6亿美金。虽然攻击者在后续偿还被盗数字货币,但是这仍然是区块链历史上涉及金额最大的一次攻击事件。由于整个攻击过程涉及到不同的区块链平台,并且存在合约以及Relayer之间的复杂交互,对于攻击的完整过程和漏洞的根本原因,现有分析报告并未能梳理清楚。

整个攻击分为两个主要阶段,包括修改keeper签名和最终提币。对于第二阶段,由于keeper签名已经被修改,因此攻击者可以直接构建恶意提币交易,具体可以参见我们之前的报告。然而对于修改keeper签名的交易是如何最终在目标链执行的,目前并没有详细的文章阐明。而这一步是攻击的最核心步骤。

本报告从修改keeper签名交易入手(Ontology链上交易0xf771ba610625d5a37b67d30bf2f8829703540c86ad76542802567caaffff280c),分析了背后的原理和漏洞的本质。我们发现以下几个原因是Keeper能被修改的原因:

源链上(Ontology)的relayer没有对上链的交易做语义校验,因此包含修改keeper恶意交易可以被打包到poly chain上

目标链上(以太坊)上的relayer虽然对交易做了校验,但是攻击者可以直接调用以太坊上的EthCrossChainManager合约最终调用EthCrossChainData合约完成签名修改

攻击者精心够着了能导致hash冲突的函数签名,从而调用putCurEpochConPubKeyBytes完成对签名的修改

整个过程中的交互流程如下:

Polygon将公布Polygon 2.0版本:金色财经报道,以太坊扩展解决方案Polygon将在未来几周内公布其2.0版本的蓝图。它在博客文章中表示,包括解决“Polygon PoS链的未来,Polygon令牌的效用和演变,以及向更大的协议和资金社区治理过渡等主题”。

Polygon 2.0的愿景是建立“互联网的价值层”,实现去中心化金融、数字所有权、新的协调手段等。[2023/6/13 21:32:36]

Ontology交易 -> Ontology Relayer -> Poly Chain -> Ethereum Relayer -> Ethereum

以太坊

0x838bf9e95cb12dd76a54c9f9d2e3082eaf928270: EthCrossChainManager

0xcf2afe102057ba5c16f899271045a0a37fcb10f2: EthCrossChainData

0x250e76987d838a75310c34bf422ea9f1ac4cc906: LockProxy

0xb1f70464bd95b774c6ce60fc706eb5f9e35cb5f06e6cfe7c17dcda46ffd59581: 修改keeper的交易

Ontology

0xf771ba610625d5a37b67d30bf2f8829703540c86ad76542802567caaffff280c: 修改keeper的交易

Poly

去中心化交易所MakiSwap将在Polygon上集成Chainlink VRF:9月7日消息,基于HECO的去中心化交易所MakiSwap将在Polygon上集成Chainlink VRF,以保证其分配机制中抽奖的公平性。[2021/9/7 23:06:12]

0x1a72a0cf65e4c08bb8aab2c20da0085d7aee3dc69369651e2e08eb798497cc80: 修改keeper的交易

整个攻击大致可以分为三个步骤。第一个步骤是在 Ontology 链生成一条恶意交易(0xf771ba610625d5a37b67d30bf2f8829703540c86ad76542802567caaffff280c),第二个步骤是修改以太坊EthCrossChainData合约中的keeper签名,第三个步骤构造恶意交易发起最终攻击和提币。

步骤一

攻击者首先在Ontology发起了一笔跨链交易(0xf771ba610625d5a37b67d30bf2f8829703540c86ad76542802567caaffff280c),里面包含了一个攻击payload:

可以看出交易包含了精心设计的函数名(图中以6631开头的数字,转换后即 f1121318093),目的在于通过造成哈希冲突(hash collision)的方式调用putCurEpochConPubKeyBytes函数(属于以太坊上的EthCrossChainData合约)。关于哈希函数冲突的细节在网络上已有很多讨论,可以参考.

Poly Network:邀请白帽黑客担任首席安全顾问,50万美元赏金将会发送到其钱包地址:8月17日,Poly Network发布黑客攻击后的善后工作进展。Poly Network正按照既定的路线图完成了“主网升级”的第二阶段,最近每天都与白帽黑客保持联系,交流进展情况,并努力与白帽黑客达成共识,希望白帽黑客尽快将私钥移交还,以便尽早将资产还给用户。

Poly Network表示,无意追究白帽先生的法律责任,同时为感谢并鼓励白帽黑客继续与Poly Network共同为区块链世界的安全进步做出贡献,Poly Network邀请白帽黑客担任Poly Network的首席安全顾问。

Poly Network还表示,此前承诺奖励给白帽黑客的 50 万美元的漏洞悬赏,虽然遭到白帽黑客的拒绝,但Poly Network仍会将这50万美元的赏金转移到白帽黑客批准的钱包地址,供他自行决定用于网络安全事业和支持更多项目和个人。[2021/8/17 22:19:41]

随后,该笔交易被Ontology Relayer 接收,注意这里并没有很严格的校验。该交易会通过Relayer在Poly Chain成功上链(0x1a72a0cf65e4c08bb8aab2c20da0085d7aee3dc69369651e2e08eb798497cc80)。Ethereum Relayer会感知到新区块的生成。

然而,这笔交易被Ethereum Relayer拒绝了。原因在于Ethereum Relayer对目标合约地址有校验,只允许LockProxy合约作为目标地址,而攻击者传入的是EthCrossChainData地址。

因此,攻击者攻击之路在此中断。但如前所述,包含恶意payload的攻击交易已经在Poly Chain成功上链,可被进一步利用。

动态 | Polkadot深度研究报告:架构设想锚定痛点?对比同类项目估值过高:TokenGazer发布Polkadot深度研究报告:Polkadot 创始团队在区块链开发和运营上有着丰富的经验,对公链的局限和发展方向有着深刻的理解。基于此, Polkadot 的定位也非常明确,解决伸缩性和隔离性问题。Polkadot 采用异构多链的架构,解决该问题——平行链可以满足在期上构建应用的特定需求,中继链构建基础层对平行链进行协调。

Polkadot 在经济模型上的设计也相对合理。对验证人、提名人、收集人、钓鱼人的经济激励使得 Polkadot 的网络完全能够得到有效的维护。同时,该经济模型下 DOT 有较多的使用场景,包括跨链交易手续费的支付、平行连插槽租用抵押、验证者和提名者参共识机制时的抵押、去中心化治理中的选票等——多样性的用途能够对 DOT 形成较为稳定的价值支撑。但对比同类项目,Polkadot 12 亿美金的估值或存在一定的高估。[2019/8/16]

步骤二

攻击者手动发起交易,调用EthCrossChainManager合约中的verifyHeaderAndExecuteTx函数,将之前一步保存在Ploy Chain区块中的攻击交易数据作为输入。由于该区块是poly chain上的合法区块,因此可以通过verifyHeaderAndExecuteTx中对于签名和merkle proof的校验。然后执行EthCrossChainData合约中的putCurEpochConPubKeyBytes函数,将原本的4个keeper修改为自己指定的地址(0xA87fB85A93Ca072Cd4e5F0D4f178Bc831Df8a00B)。

数字货币对冲基金公司Polychain Capital辟谣称 未打算在加拿大上市:数字货币对冲基金公司Polychain Capital的主要及风险合作伙伴Ryan Zurrer在发送给CoinDesk的电子邮件中,推翻了之前彭博社报道的来自知情人士的有关Polychain Capita正在筹集资金,即将在多伦多交易所上市的消息。Ryan Zurrer表示,彭博社的文章是错误的,我们他们没有打算在加拿大上市,也没有为此做任何事情。”[2018/1/30]

步骤三

在keeper被修改之后,攻击者直接调用目标链上的verifyHeaderAndExecuteTx函数(而不需要再通过poly chain -- 因为keeper已经被修改,攻击者可以任意签署在目标链看来合理的poly chain上的块),最终调用至Unlock函数(属于LockProxy合约),大量地转移资金,给项目方带来了严重的损失。具体的攻击细节可参考我们之前的报告。

在本攻击过程中,Ontology方和以太坊方均有Relayer负责将来自Ontology的交易在poly Chain上链,以及将poly chain上的交易放到以太坊。这两个Relayer是由Go语言实现的服务进程。

然而我们发现,这两个Relayer都缺乏有效的校验。这导致

攻击者可以在Ontology构造一条恶意的跨链交易,并且成功打包到poly chain上。

虽然在以太坊的Relayer具有校验功能,但是攻击者可以直接同以太坊上的链上合约进行交互,直接执行恶意的函数。

Ontology Relayer完全信任来自Ontology上的跨链交易

Poly Network 的 ont_relayer(https://github.com/polynetwork/ont-relayer) 负责监听 Ontology 链上的跨链交易并将其打包入传入Poly Chain.

注:

在Ontology Relayer中,Side 指 Ontology Chain; Alliance 指 Poly Chain.

CrossChainContractAddress 是 Ontology 链上原生编号为 09 的智能合约.

上图中,Ontology Relayer启动时开启三个 Goroutines 分别负责监听 Ontology Chain 和 Poly Chain 的跨链交易,以及对 Poly Chain 上的跨链交易做状态检查。在本报告中,我们只关注69行的监听Side的代码逻辑。

在上图中,Ontology Relayer 调用 Ontology 链提供的 RPC 接口(第 215 行,调用SDK函数 GetSmartContractEventByBlock) 获取区块中触发的智能合约事件;然后在第 228 和 232 行表明 Ontology Relayer 只监听 Ontology Chain 上由 CrossChainContractAddress 触发的 makeFromOntProof 事件;

上图中,在处理 Ontology Chain 上的跨链交易时,Ontology Relayer 总共做了五次校验,分别是两次向 Ontology Chain 发送的 RPC 请求校验(check 1 和 check 4), 以及三次参数是否为空的校验(check2, check3, 和check5)。这五次校验都属于常规校验,并未对来自 Ontology Chain 上的跨链交易做语义上的校验; 第 167 和 171 行取出了在目标链上执行所需要的交易参数信息(proof, auditPath);第 183 行向 Poly Chain 发送交易;

Ontology Relayer 在构造了 Poly Chain 上的交易后便向 Poly Chain 发起 RPC 请求发送交易(第 164 行,函数调用 SendTransaction);

这个名为 ProcessToAliianceCheckAndRetry 的 Goroutine 也仅仅是做了重发失败交易的工作,仍然未对来自 Ontology Chain 上的跨链交易做任何语义上的校验。

至此,我们可以看出 ont-relayer 监听所有来自 Ontology Chain 由 CrossChainContractAddress 触发的 makeFromOntProof 事件,并未对其做任何语义上的校验,便向 Poly Chain 转发了交易。而任何人向 Ontology 发送的任何跨链交易都会触发 CrossChainContractAddress 的 makeFromOntProof 事件,所以 Ontology Relayer 会将所有来自 Ontology 上的跨链交易都转发到 Poly chain 上。

Ethereum Relayer中的无效校验

Ethereum Relayer 负责监听 Poly Chain 并将目标链为 Ethereum 的跨链交易转发到 Ethereum 上。

Ethereum Relayer 启动一个 Goroutine 来监控 Poly Chain;

Ethereum Relayer监听所有 Poly Chain 上目标链为 Ethereum 的跨链交易 (第 275 至 278 行); Ethereum Relayer会校验跨链交易的目标合约是否为 config.TargetContracts中指定的合约之一,如果不是则不会发送这笔跨链交易到 Ethereum 上(第 315 行)。

虽然 Ethereum Relayer 对 Poly Chain 上的跨链交易做了部分校验,比如限制了目标合约,但是与 Poly Chain 不同,任何人都可以向 Ethereum 上的EthCrossChainManager合约发送交易。换句话说,Ethereum Relayer 在这里做的校验没有实际的意义,只要包含恶意payload的跨链交易被成功打包进了 Poly Chain(虽然没有被relay转发到以太坊链上), 那么任何人都可以直接使用已经打包好的区块数据将payload发送到以太坊EthCrossChainManager合约并执行(这个过程中,可以通过merkle proof的校验,因为是已经正常上链的poly chain区块数据)。

攻击者正是利用了上述两个缺陷,完成了攻击流程中的步骤一和步骤二。

通过对整个攻击流程的完整梳理和详尽分析,我们认为Relayer的不完整校验是攻击得以发生的根本原因。其它(诸如利用hash冲突等)方面则更多地属于比较精彩的攻击技巧。总而言之,跨链的校验和鉴权是跨链系统安全的关键所在,值得社区付出更多的努力。

标签:POLAINChainHAIpols币适合长期持有吗Webchainuchaincumuluschain

波场热门资讯
加密货币:无处不在的攻击:粉末、勒索软件、51%

上周二,Poly Network 遭到黑客攻击,造成超过 6 亿美元的损失。虽然最后黑客几乎返还了所有的“战利品”,但依旧让人心惊胆战.

1900/1/1 0:00:00
NFT:从NFT、DeFi来看区块链用户行为

将传统行为金融分析与区块链指标相结合下面的报告属于区块链用户行为报告的新系列。DappRadar的一组报告旨在为用户提供区块链行业的不同视角,将传统行为金融分析与区块链标准和指标相结合.

1900/1/1 0:00:00
NFT:NFT头像市场:是可复制的繁荣吗

7月最后一个周末,以太坊上爆发了一场头像抢购大战,原因在于,Gary Vee突然以1600ETH购买了Punk#2140,紧接着又出现一笔2200ETH的交易收购了Punk#5217.

1900/1/1 0:00:00
区块链:西部掘金:传统金融精英为何纷纷投身加密金融?

???我们正在见证一个浪潮,越来越多顶尖传统金融机构的人才选择改变阵营加入加密金融。前SEC主席Jay Clayton前不久刚刚加入加密托管平台Fireblocks的顾问委员会;高盛前政府事务主.

1900/1/1 0:00:00
比特币:金色前哨|比特币闪电网络总容量突破1亿美元

8月11日,据Bitcoinvisuals数据显示,比特币闪电网络总容量已突破2,220.56 BTC,按其价格估算,美元价值超过1亿美元,创下历史新高.

1900/1/1 0:00:00
DAO:权利的游戏 :DAO Maker 被黑分析

2021 年 08 月 12 日,据慢雾区消息,加密孵化机构 DAO Maker 疑似遭受黑客攻击,导致合约大量 USDC 被转出。慢雾安全团队第一时间介入分析,并将分析结果分享如下.

1900/1/1 0:00:00