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


然后在交易所里换成了BNB/ETH/MATIC等币种并分别提币到3个地址 , 不久后在3条链上发动攻击 。
事件梳理
被黑 6.1 亿美金的 Poly Network 事件分析与疑难问答
文章图片
资金情况(截止到北京时间08月11日13:00)
BSC上:
黑客地址1 , 黑客将近1.2亿美元(包括约3210万枚BUSD和约8760万枚USDC)的流动性添加到Curve分叉项目EllipsisFinance中 , 目前仍在做市无异动 。
Polygon上:
资金无异动 。
Ethereum上:
1)黑客地址3 , 只有一笔转出13.37ETH到地址
0xf8b5c45c6388c9ee12546061786026aaeaa4b682的交易;
2)黑客在Curve上添加了超9706万美元(包括67万枚DAI和9638万枚USDC)的流动性 。 后又撤销流动性将9638万枚USDC和67万枚DAI换成9694万枚DAI , 这笔资金仍停留在地址3 。 目前 , 3343万枚USDT已被Tether冻结 。
被黑 6.1 亿美金的 Poly Network 事件分析与疑难问答
文章图片
疑难问答
注:eccm为EthCrossChainManager合约的简称 , eccd为EthCrossChainData合约的简称 。
问:为什么keeper能更换成功 , 合约代码没有进行鉴权吗?
答:eccd合约有进行鉴权 , 仅允许owner调用putCurEpochConPubKeyBytes更改keeper , 因为eccd合约的owner是eccm , 所以通过eccm可以更改keeper的值 。
问:为什么能签名一笔更换keeper的交易?
答:因为跨链要执行的数据没有判断好toContract , 所以可能原先的keeper以为是一笔正常的跨链交易就签名了,但是他是一笔更换keeper的交易 。
问:为什么能绕过代码bytes4(keccak256(abi.encodePacked(_method,''(bytes,bytes,uint64)'')))的这个限制 , 然后执行putCurEpochConPubKeyBytes(bytes)函数?
答:函数签名用的是keccak-256进行哈希 , 然后取前面的4bytes , 这种情况下是较容易被hash碰撞的 。
问:黑客更换keeper的交易如何被旧的keepers签名?
答:keepers是一个链中继器(Replayer) , 会对所有正常用户的跨链请求进行签名 。 当用户在BSC上发起跨链交易时 , keepers会解析用户请求的目标合约以及调用参数 , 构造出一个新的交易提交到以太坊上 , 并在以太坊上用eccm合约调用用户交易里包含的目标合约 。 黑客替换keeper的交易本质上也是一笔正常的跨链交易 , 只不过调用的目标合约是eccd合约 , 调用的参数是更换keeper , 所以能被正常签名 。
总结
本次攻击主要在于EthCrossChainData合约的keeper可由EthCrossChainManager合约进行修改 , 而EthCrossChainManager合约的verifyHeaderAndExecuteTx函数又可以通过_executeCrossChainTx函数执行用户传入的数据 。 因此攻击者通过此函数传入精心构造的数据修改了EthCrossChainData合约的keeper为攻击者指定的地址 , 并非网传的是由于keeper私钥泄漏导致这一事件的发生 。
慢雾AML旗下MistTrack反洗钱追踪系统将持续监控被盗资金的转移 , 拉黑攻击者控制的所有钱包地址 , 提醒交易所、钱包注意加强地址监控 , 避免相关恶意资金流入平台 。 此外 , 特别感谢虎符Hoo、PolyNetwork、火币Zlabs、链闻、WePiggy、TokenPocket钱包、Bibox、欧科云链等团队及许多个人伙伴在合规的前提下及时与慢雾安全团队同步相关攻击者信息 , 为追踪攻击者争取了宝贵的时间 。
目前 , 在多方努力下 , 黑客开始陆续归还资金 。