被黑 6.1 亿美金的 Poly Network 事件分析与疑难问答

被黑 6.1 亿美金的 Poly Network 事件分析与疑难问答
文章图片
免责声明:本文旨在传递更多市场信息 , 不构成任何投资建议 。 文章仅代表作者观点 , 不代表火星财经官方立场 。
小编:记得关注哦
来源:慢雾科技
2021年08月10日 , 据慢雾区消息 , 跨链互操作协议PolyNetwork遭受黑客攻击 , 慢雾安全团队第一时间介入分析 , 并将分析结果分享如下 。
攻击背景
PolyNetwork是由Neo、Ontology、Switcheo基金会共同作为创始成员 , 分布科技作为技术提供方共同发起的跨链组织 。
如下图 , 通过官方的介绍我们可以清楚的看出PolyNetwork的架构设计:用户可以在源链上发起跨链交易 , 交易确认后由源链Relayer将区块头信息同步至PolyChain , 之后由PolyChain将区块头信息同步至目标链Relayer , 目标链Relayer将验证信息转至目标链上 , 随后在目标链进行区块头验证 , 并执行用户预期的交易 。
被黑 6.1 亿美金的 Poly Network 事件分析与疑难问答
文章图片
以下是本次攻击涉及的具体地址:
被黑 6.1 亿美金的 Poly Network 事件分析与疑难问答
文章图片
攻击核心
1、源链未对发起的跨链操作的数据进行检查 。
2、目标链未对解析出的目标调用合约以及调用参数进行检查 。
3、EthCrossChainData合约的owner为EthCrossChainManager 。
4、bytes4(keccak256(abi.encodePacked(_method,''(bytes,bytes,uint64)'')))可以被hash碰撞 。
攻击细节
PolyNetwork会在各个链上部署智能合约以便进行跨链互操作(分析将以在以太坊部署的智能合约为例) , 其中EthCrossChainManager合约用于验证PolyChain同步来的区块头以确认跨链信息的真实 。 EthCrossChainData合约用于存储跨链数据 , 中继链验证人(即Keeper)的公钥也存储在这个合约中 。 LockProxy则用于资产管理 。
本次攻击中 , 攻击者分两步来完成这次攻击 , 我们接下来进行详细分析:
首先攻击者通过在其他链调用crossChain函数构造数据发起跨链交易 。
我们切入此函数进行分析:
EthCrossChainManager.crossChain
(https://github.com/polynetwork/eth-contracts/blob/master/contracts/core/crosschainmanager/logic/EthCrossChainManager.sol#L91)
被黑 6.1 亿美金的 Poly Network 事件分析与疑难问答
文章图片
从上图我们可以清晰的看出 , 此函数只是用于帮助用户构造makeTxParam并存储了构造后的哈希以便后续验证 , 其并未对用户传入的跨链操作参数进行任何限制 , 因此攻击者完全可以通过构造任意想构造的数据而让Relayer毫无防备的将其同步至PolyChain , 通过PolyChain将其同步至以太坊Relayer 。
随后在以太坊上的Relayer通过调用EthCrossChainManager合约中
的verifyHeaderAndExecuteTx函数提交区块头信息来验证这笔跨链信息的真实性 。
我们切入此函数进行分析:
EthCrossChainManager.verifyHeaderAndExecuteTx
(https://github.com/polynetwork/eth-contracts/blob/master/contracts/core/crosschainmanager/logic/EthCrossChainManager.sol#L127)
被黑 6.1 亿美金的 Poly Network 事件分析与疑难问答
文章图片
通过上图代码我们可以看出其先对区块头进行反序列化 , 以解出所需要验证的具体信息 。 随后调用getCurEpochConPubKeyBytes函数从EthCrossChainData合约中获取Keeper公钥 , 并通过deserializeKeepers函数得到Keeper地址 。
接下来将通过ECCUtils.verifySig验证签名是否为Keeper , 从以下代码中我们可以发现verifySig函数中会切出签名者的vrs , 并通过ecrecover接口获取签名者地址 , 然后调用containMAddresses函数循环比较签名者是否为Keeper , 只要Keeper签名数量符合要求即可通过检查 , 数量要求即为EthCrossChainManager合约传入的n-(n-1)/3) 。