宇宙链 宇宙链
Ctrl+D收藏宇宙链
首页 > Filecoin > 正文

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

作者:

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

慢雾认为,攻击主要在于EthCrossChainData合约的keeper被修改,而非私钥泄漏导致。目前,黑客已开始陆续归还资金。

撰文:慢雾安全团队

2021年08月10日,据慢雾区消息,跨链互操作协议PolyNetwork遭受黑客攻击,慢雾安全团队第一时间介入分析,并将分析结果分享如下。

攻击背景

PolyNetwork是由Neo、Ontology、Switcheo基金会共同作为创始成员,分布科技作为技术提供方共同发起的跨链组织。

如下图,通过官方的介绍我们可以清楚的看出PolyNetwork的架构设计:用户可以在源链上发起跨链交易,交易确认后由源链Relayer将区块头信息同步至PolyChain,之后由PolyChain将区块头信息同步至目标链Relayer,目标链Relayer将验证信息转至目标链上,随后在目标链进行区块头验证,并执行用户预期的交易。

以下是本次攻击涉及的具体地址:

攻击核心

源链未对发起的跨链操作的数据进行检查。目标链未对解析出的目标调用合约以及调用参数进行检查。EthCrossChainData合约的owner为EthCrossChainManager。bytes4(keccak256(abi.encodePacked(_method,"(bytes,bytes,uint64)")))可以被hash碰撞。攻击细节

PolyNetwork会在各个链上部署智能合约以便进行跨链互操作,其中EthCrossChainManager合约用于验证PolyChain同步来的区块头以确认跨链信息的真实。EthCrossChainData合约用于存储跨链数据,中继链验证人(即Keeper)的公钥也存储在这个合约中。LockProxy则用于资产管理。

Cameo CEO因Apple ID被黑导致BAYC#9012遭窃:8月9日消息,Cameo 首席执行官Steven Galanis在社交媒体上披露,由于自己的Apple ID被黑,导致BAYC #9012、三个 Otherside 地块、以及一个 Phanta Bear 和两个11Captain's Club NFT遭窃,但目前仍不清楚他是如何被黑客入侵的。

BAYC #9012 是 Steven Galanis 在 1 月份以 100 ETH(约合 319,500 美元)的价格购买,目前黑客已经以 77 ETH(约合 130,000 美元)的价格卖掉。为了应对这起 NFT 盗窃事件,OpenSea 冻结了这只猿且阻止其在平台上进行交易。据分析,Steven Galanis 有可能在 iCloud 上保留了钱包助记词副本并被黑客获取。(NFTEvening)[2022/8/9 12:11:41]

本次攻击中,攻击者分两步来完成这次攻击,我们接下来进行详细分析:

首先攻击者通过在其他链调用crossChain函数构造数据发起跨链交易。

我们切入此函数进行分析:

EthCrossChainManager.crossChain

从上图我们可以清晰的看出,此函数只是用于帮助用户构造makeTxParam并存储了构造后的哈希以便后续验证,其并未对用户传入的跨链操作参数进行任何限制,因此攻击者完全可以通过构造任意想构造的数据而让Relayer毫无防备的将其同步至PolyChain,通过PolyChain将其同步至以太坊Relayer。

因Poly Network被黑客入侵,O3 Swap跨链功能已暂停:O3 Swap官推宣布,O3 Swap跨链功能目前因Poly Network被黑客入侵而暂停。正在与团队联系,请耐心等待恢复完整功能。非跨链功能可用,可以正常使用。

此前消息,Poly Network官推宣布遭到黑客攻击,币安智能链、以太坊和Polygon上的被盗资产已转移至到黑客的以下地址:ETH:0xC8a65Fadf0e0dDAf421F28FEAb69Bf6E2E589963;BSC:0x0D6e286A7cfD25E0c01fEe9756765D80313B32C77;Polygon:0x5dc3603C9D42Ff184153a8a9094a73d461663214。Poly Network还呼吁受影响区块链和加密交易所的矿工将来自上述地址的代币列入黑名单。[2021/8/10 1:46:57]

随后在以太坊上的Relayer通过调用EthCrossChainManager合约中

的verifyHeaderAndExecuteTx函数提交区块头信息来验证这笔跨链信息的真实性。

我们切入此函数进行分析:

EthCrossChainManager.verifyHeaderAndExecuteTx

通过上图代码我们可以看出其先对区块头进行反序列化,以解出所需要验证的具体信息。随后调用getCurEpochConPubKeyBytes函数从EthCrossChainData合约中获取Keeper公钥,并通过deserializeKeepers函数得到Keeper地址。

慢雾:Cover协议被黑问题出在rewardWriteoff具体计算参数变化导致差值:2020年12月29日,慢雾安全团队对整个Cover协议被攻击流程进行了简要分析。

1.在Cover协议的Blacksmith合约中,用户可以通过deposit函数抵押BPT代币;

2.攻击者在第一次进行deposit-withdraw后将通过updatePool函数来更新池子,并使用accRewardsPerToken来记录累计奖励;

3.之后将通过_claimCoverRewards函数来分配奖励并使用rewardWriteoff参数进行记录;

4.在攻击者第一次withdraw后还留有一小部分的BPT进行抵押;

5.此时攻击者将第二次进行deposit,并通过claimRewards提取奖励;

6.问题出在rewardWriteoff的具体计算,在攻击者第二次进行deposit-claimRewards时取的Pool值定义为memory,此时memory中获取的Pool是攻击者第一次withdraw进行updatePool时更新的值;

7.由于memory中获取的Pool值是旧的,其对应记录的accRewardsPerToken也是旧的会赋值到miner;

8.之后再进行新的一次updatePool时,由于攻击者在第一次进行withdraw后池子中的lpTotal已经变小,所以最后获得的accRewardsPerToken将变大;

9.此时攻击者被赋值的accRewardsPerToken是旧的是一个较小值,在进行rewardWriteoff计算时获得的值也将偏小,但攻击者在进行claimRewards时用的却是池子更新后的accRewardsPerToken值;

10.因此在进行具体奖励计算时由于这个新旧参数之前差值,会导致计算出一个偏大的数值;

11.所以最后在根据计算结果给攻击者铸造奖励时就会额外铸造出更多的COVER代币,导致COVER代币增发。具体accRewardsPerToken参数差值变化如图所示。[2020/12/29 15:58:07]

接下来将通过ECCUtils.verifySig验证签名是否为Keeper,从以下代码中我们可以发现verifySig函数中会切出签名者的vrs,并通过ecrecover接口获取签名者地址,然后调用containMAddresses函数循环比较签名者是否为Keeper,只要Keeper签名数量符合要求即可通过检查,数量要求即为EthCrossChainManager合约传入的n-(n-1)/3)。

优盾钱包:警惕近期市面上客户电脑被黑客入侵盗币的事件:优盾钱包官方提醒各位钱包使用客户,近期市面上出现不少起电脑被黑客入侵及异地登录盗币事件。针对这两种情况,优盾钱包提醒广大客户积极防护,以避免不必要的损失

1、安装腾讯电脑管家,检测电脑木马病,以免电脑被监控。

2、不要将管理员账号的密码、私钥、助记词信息泄露给他人。

3、不要将登录密码、交易密码、助记词存在电脑设备中,尽量使用物理媒介进行助记词的存储。[2020/7/13]

签名验证后会通过ECCUtils.merkleProve进行默克尔根验证,只要是正常跨链操作即可通过此项检查。随后会对交易是否重复发送进行检查并存储已验证后的数据。这里只需保证不重复提交即可。

最后,也是最关键的一步,其将通过内部调用_executeCrossChainTx函数执行构造的数据。

从上图我们可以看出_executeCrossChainTx函数未对传入的_toContract、_method等参数进行检查就直接以_toContract.call的方式执行交易。

其中通过链上数据我们可以看出EthCrossChainData合约的owner即为EthCrossChainManager合约,而先前我们知道中继链验证人(即Keeper)的公钥存在EthCrossChainData合约中,且此合约存在putCurEpochConPubKeyBytes函数可以直接修改Keeper公钥。

经过以上分析,结果已经很明确了,攻击者只需在其他链通过crossChain正常发起跨链操作的交易,此交易目的是为了调用EthCrossChainData合约的putCurEpochConPubKeyBytes函数以修改Keeper角色。随后通过正常的跨链流程,Keeper会解析用户请求的目标合约以及调用参数,构造出一个新的交易提交到以太坊上。这本质上也只是一笔正常的跨链操作,因此可以直接通过Keeper检查与默克尔根检查。最后成功执行修改Keeper的操作。

币安官微发布交易所被黑客入侵事情的始末详情:今天下午,币安官微发布交易所被黑客入侵事情的始末详情。币安称,黑客首先先在谷歌搜索投放大量钓鱼广告,由此获取了一些英语语言区用户的账号;在当晚22.58-22.59两分钟里,被盗账户买入大量VIA,由此触发风控,系统自动停止提币;币安经过排查发现负责输送利益的31个黑客账户,成功截获输送利益的币并扣留了黑客的VIA;随后币安跑路等谣言在华语社区放大,币安遭到多家自媒体围攻。[2018/3/9]

但我们注意到putCurEpochConPubKeyBytes函数定义为

functionputCurEpochConPubKeyBytes(bytescalldatacurEpochPkBytes)externalreturns(bool);

而_executeCrossChainTx函数执行的定义为

abi.encodePacked(bytes4(keccak256(abi.encodePacked(_method,"(bytes,bytes,uint64)")))

我们可以知道这两个函数的函数签名在正常情况下传入的_method为putCurEpochConPubKeyBytes肯定是完全不同的,因此通过_toContract.call理论上是无法调用到putCurEpochConPubKeyBytes函数的。但_method是攻击者可以控制的,其完全可以通过枚举各个字符组合以获得与调用putCurEpochConPubKeyBytes函数相同的函数签名,这要求其只需枚举前4个字节符合即可。我们也可以自己尝试枚举验证,如下所示:

可以看出前四个字节与putCurEpochConPubKeyBytes函数是一致的

至此我们就已还原出攻击者的攻击细节。

通过解析链上数据,我们可以发现攻击者将Keeper替换为了0xA87fB85A93Ca072Cd4e5F0D4f178Bc831Df8a00B。

最后攻击者只需使用替换后的Keeper地址进行签名即可通过所有检查执行调用LockProxy合约将其管理的资产转出。

攻击流程

攻击者在源链精心构造一笔修改目标链Keeper的操作。

利用官方Relayer正常在目标链提交数据并执行替换Keeper操作。

攻击者通过替换后的Keeper地址对其转出资产的操作进行签名提交至EthCrossChainManager进行验证。

验证Keeper为攻击者已替换完的地址通过检查,执行将资产转移至攻击者指定地址。

获利走人。

MistTrack分析过程

慢雾AML团队分析统计,本次攻击损失共计超6.1亿美元!

具体如下:

资金流向分析

慢雾AML旗下?MistTrack反追踪系统分析发现,攻击者初始的资金来源是门罗币(XMR)。

然后在交易所里换成了BNB/ETH/MATIC等币种并分别提币到3个地址,不久后在3条链上发动攻击。

事件梳理

资金情况

BSC上:

黑客地址1,黑客将近1.2亿美元的流动性添加到Curve分叉项目EllipsisFinance中,目前仍在做市无异动。Polygon上:

资金无异动。

Ethereum上:

1)黑客地址3,只有一笔转出13.37ETH到地址0xf8b5c45c6388c9ee12546061786026aaeaa4b682的交易;

2)黑客在Curve上添加了超9706万美元的流动性。后又撤销流动性将9638万枚USDC和67万枚DAI换成9694万枚DAI,这笔资金仍停留在地址3。目前,3343万枚USDT已被Tether冻结。

疑难问答

注: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、欧科云链等团队及许多个人伙伴在合规的前提下及时与慢雾安全团队同步相关攻击者信息,为追踪攻击者争取了宝贵的时间。

目前,在多方努力下,黑客开始陆续归还资金。

来源链接:mp.weixin.qq.com

免责声明:作为区块链信息平台,本站所发布文章仅代表作者个人观点,与链闻ChainNews立场无关。文章内的信息、意见等均仅供参考,并非作为或被视为实际投资建议。

慢雾

慢雾

慢雾科技是一家专注区块链生态安全的国家高新技术企业,通过「威胁发现到威胁防御一体化因地制宜的安全解决方案」服务了全球许多头部或知名的项目。慢雾科技的安全解决方案包括:安全审计、威胁情报、漏洞赏金、防御部署、安全顾问等服务并配套有加密货币反、假充值漏洞扫描、漏洞监测、被黑档案库、智能合约防火墙、SafeStaking等SAAS型安全产品,已有商业客户上千家。慢雾慢雾科技慢雾AML慢雾安全Slowmist查看更多以太坊

标签:AINKEEPKEEEPEblockchain是什么网站bitkeep新版本下载KEEC币pepe价格走势图

Filecoin热门资讯
?Filecoin桥为开发人员提供免费且可扩展的存储

Filecoin正在与NEAR联手支持web3堆栈上的新增长和实验,具体为在NEAR主网上启动Filecoin桥,为开发人员提供免费且可扩展的存储.

1900/1/1 0:00:00
BKEX Global 关于上线 ASAP(Chainswap)并开放充值功能的公告

尊敬的用户:?????????????BKEXGlobal即将上线ASAP,详情如下:上线交易对:ASAP/USDT??币种类型:ERC20充值功能开放时间:已开放交易功能开放时间:2021年8月11日16:00提现功能开放时间:20.

1900/1/1 0:00:00
全方位回顾Chainlink & SmartCon#1智能合约峰会,七大重点值得期待

日前,由Chainlink主办的第二届智能合约峰会SmartCon#1圆满落下帷幕。此次峰会有来自全球140多个国家的15000多名与会者参与,共同收看了200多名行业顶尖创始人、研究者和开发者分享区块链生态中最重要的前沿创新与合作.

1900/1/1 0:00:00
Gate.io 今日智能量化收益排行,最高总收益20324.98 USDT

为帮助用户更轻松实现数字资产量化交易,Gate.io量化交易中心全面升级,改名“量化跟单”全新上线,功能及页面全面升级。策略分享者正式命名为信号者,信号者被跟单可享受5%无限制复制层级的利润分成.

1900/1/1 0:00:00
多链钱包 Liquality 完成 700 万美元融资,Hashed 和 Galaxy Digital 等参投

链闻消息,内置原子互换的多链钱包Liquality宣布完成700万美元融资,Hashed、GalaxyDigital、WhiteStarCapital、Accomplice、CoinbaseVentures、AlamedaResear.

1900/1/1 0:00:00
SANA空投及测试网空投领取教程--重要通知

测试网已经结束。自从宣布测试网启动以来,SANA测试网络已经从200个节点发展成遍布全球的数以万计个节点。测试网络上每天都充满着积极的节点传输以及交互响应.

1900/1/1 0:00:00