首页 币圈资讯 三高有军训吗-(excel表格格式错误如何还原)

三高有军训吗-(excel表格格式错误如何还原)

摘要:慢雾认为,攻击主要在于EthCrossChainData合约的keeper被修改,而非私钥泄漏导致。目前,黑客已开始陆续归还资金。作者:慢雾安全小组2021年8月10日,根据来自慢雾区的消息,跨链互操作协议聚网遭到黑客攻击。慢雾

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

作者:慢雾安全小组

2021年8月10日,根据来自慢雾区的消息,跨链互操作协议聚网遭到黑客攻击。慢雾安全团队第一时间介入分析,分享分析结果如下。

攻击背景

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

如下图所示,通过官方的介绍,我们可以清楚的看到聚链网的架构设计:用户可以在源链上发起跨链交易,交易确认后,源链中继器将块头信息同步到聚链,然后聚链将块头信息同步到目标链中继器,目标链中继器将验证信息传递到目标链,然后在目标链中验证块头,执行用户期望的交易。

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

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

聚链网会在每个链上部署智能合约进行跨链互通(分析会以以太坊部署的智能合约为例),其中EthCrossChainManager合约用于验证聚链同步的块头,以确认跨链信息的真实性。EthCrossChainData契约用于存储跨链数据,中继链验证者(Keeper)的公钥也存储在该契约中。锁用于资产管理。

在这次攻击中,攻击者分两步完成了攻击。接下来,我们将进行详细的分析:

首先,攻击者通过调用跨链函数在其他链中构造数据来发起跨链事务。

我们切入这个函数进行分析:

ethcrossschainmanager . cross chain

从上图我们可以清楚的看到,这个函数只是用来帮助用户构造makeTxParam,并存储构造好的hash,以备后续验证。它对用户传入的跨链操作参数没有任何限制,所以攻击者完全可以通过构造他想要的任何数据,让中继将其同步到Poly Chain毫无戒备,并通过Poly Chain将其同步到以太坊中继。

然后以太坊上的Relayer调用EthCrossChainManager contract。

verifyHeaderAndExecuteTx函数提交块头信息,以验证此跨链信息的真实性。

我们切入这个函数进行分析:

ethcrossschainmanager . verifyheaderandexecutetx

通过上面的代码,我们可以看到,它先反序列化块头,找出需要验证的具体信息。然后调用getCurEpochConPubKeyBytes函数从EthCrossChainData契约中获取Keeper公钥,通过deserializeKeepers函数获取Keeper地址。

接下来我们会通过ECCUtils.verifySig来验证签名是否为保管人从下面的代码中我们可以发现,在verifySig函数中会裁剪出签名人的v r s,通过ecrecover接口获取签名人地址,然后调用containMAddresses函数循环比较签名人是否为保管人。只要保管员签名数量符合要求,就可以通过检验,数量要求是从EthCrossChainManager合约导入的n-(n-1)/3)。

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

最后,最关键的一步是通过内部调用_ executeCrossChainTx函数来执行构造的数据。

从上图我们可以看到_ executeCrossChainTx函数在没有检查_toContract和_method等传入参数的情况下,直接将事务作为_toContract.call执行。

根据链中的数据,我们可以看到EthCrossChainData契约的所有者是EthCrossChainManager契约。之前我们知道中继链验证者(也就是保管者)的公钥存在于EthCrossChainData契约中,这个契约有putCurEpochConPubKeyBytes函数,可以直接修改保管者的公钥。

经过上面的分析,结果是清楚的。攻击者只需要通过crossChain在其他链中发起跨链交易。此事务的目的是调用EthCrossChainData契约的putCurEpochConPubKeyBytes函数来修改Keeper角色。然后通过正常的跨链流程,Keeper会分析用户请求的目标合约和调用参数,构造一个新的交易,提交给以太坊。本质上这只是一个正常的跨链操作,可以直接被Keeper和Merkel root检查。最后,修改Keeper的操作成功执行。

但是我们注意到putCurEpochStartHeight函数被定义为

函数putCurEpochConPubKeyBytes(bytes calldata curepochkbytes)外部返回(bool);

而_ executeCrossChainTx函数执行的定义是

ABI . encodepacked(bytes 4(ke ccak 256(ABI . encodepacked(_ method,“(bytes,bytes,uint64)”))

我们可以知道,一般情况下传入的_method是putcurepochstarttheight时,这两个函数的函数签名是完全不同的,所以理论上不可能通过_ tocontract.call调用putcurepochstarttheight函数,但是_method可以被攻击者控制,它可以通过枚举每个字符组合获得与调用putCurEpochConPubKeyBytes函数相同的函数签名,这就要求它只需要枚举前4个字节就可以匹配。我们也可以自己尝试枚举验证,如下所示:

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

到目前为止,我们已经还原了攻击者的攻击细节。

通过分析链中的数据,可以发现攻击者用0 xa 87 FB 85 a 93 ca 072 CD 4 e 5 f 0d 4 f 178 BC 831 df 8 a 00 b替换了Keeper。

最后,攻击者只需要签署替换后的保管人地址,就可以通过所有检查调用LockProxy契约,将自己管理的资产转出。

攻击流程

攻击者精心构造了一个操作来修改源链中目标链的Keeper。

使用官方中继器正常提交目标链中的数据,并执行替换保管员操作。

攻击者通过替换后的保管员地址对转出资产的操作进行签名,并提交给EthCrossChainManager进行验证。

验证Keeper是攻击者替换的地址。检查后,将资产转移到攻击者指定的地址。

赚了就走。

MistTrack 分析过程

据慢雾反洗钱团队分析统计,此次攻击损失总额超过6.1亿美元!

如下所示:

资金流向分析

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

然后在交易所换成了BNB/ETH/MATIC等货币,钱分别取到三个地址。不久后,它对三条链发起了攻击。

事件梳理在BSC上:

黑客地址1、黑客近1.2亿美元的流动资金(其中BUSD约3210万,USDC约8760万)已加入曲线分叉项目Ellipsis Finance,目前仍在市场中。

在多边形上:

资金没有变化。

以太坊上:

1)黑客地址3,只有一次将13.37 ETH转移到地址0x F8 b5 c 45 c 6388 c 9 e 12546061786026 aae aa4b 682的交易;

2) Hackers为Curve增加了超过9706万美元的流动性(包括67万戴和9638万)。后来取消了流动性,9638万和67万戴换成了9694万戴。这个基金仍然停留在地址3。目前已有3343万USDT被系绳冻结。

疑难问答

注:eccm是EthCrossChainManager Contract的缩写,eccd是Ethcrosschain Manager Contract的缩写。

问:为什么守护者可以被成功替换?合同代码没有经过认证吗?

答:eccd契约是经过认证的,只允许拥有者调用putCurEpochConPubKeyBytes来更改保管者。因为eccd合同的所有者是eccm,所以可以通过eccm更改保管者值。

问:为什么我可以签约更换门将?

答:因为要跨链执行的数据没有被判定为契约,所以可能是原保管人作为正常的跨链交易签字,但他是替换保管人的交易。

问:为什么可以绕过代码bytes 4(keccak 256(ABI . encode 比特币听证会(比特币听证会上讨论了哪些?会不会崩盘?) packed(_ method,“(Bytes,Bytes,uint64)”)的这个限制,然后执行putcurepochconpubkeybytes(Bytes)函数?

答:函数签名使用KECC CAK-256散列,然后取前4个字节。在这种情况下,很容易被hash击中。

问:黑客更换保管员的交易如何让老保管员签字?

答:keepers是一个链播放器,它会对所有正常用户的跨链请求进行签名。当用户在BSC上发起跨链交易时,keepers会分析用户请求的目标契约和调用参数,构造一个新的交易提交给以太坊,在以太坊上用eccm契约调用用户交易中包含的目标契约。黑客的保管员替换的交易本质上是正常的跨链交易,只不过调用的目标契约是eccd契约,调用的参数是保管员替换,所以可以正常签约。

总结

这种攻击主要在于EthCrossChainData契约的keeper可以被ethcrossschainmanager契约修改,ethcrossschainmanager契约的verifyHeaderAndExecuteTx函数可以执行用户通过_ executeCrossChainTx函数输入的数据。因此,攻击者通过该函数输入精心构造的数据,修改了EthCrossChainData契约的保管人指定的地址。并不是守护者的私钥泄露导致了这次事件。

慢雾AML的MistTrack反洗钱追踪系统会持续监控被盗资金的转移,黑掉所有被攻击者控制的钱包地址,并提醒交易所和钱包注意加强地址监控,避免相关恶意资金流入平台。此外,特别感谢Hoo、聚网、Zlabs、链讯、WePiggy、TokenPocket Wallet、Bibox、欧直云链等团队,以及众多个人合作伙伴,在合规的前提下,及时与慢雾安全团队同步相关攻击者信息,为追踪攻击者赢得了宝贵的时间。

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

链家仅提供相关信息展示,不构成任何投资建议。

免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。

为您推荐

Zb交易所安全吗?ZB交易所合法吗?

随着数字货币市场的蓬勃发展,交易所作为数字资产交易的重要平台,其便捷性和安全性备受关注。ZB交易所作为全球领先的数字资产...
REP币能涨到一万一个吗?REP币还能在涨吗?

REP币能涨到一万一个吗?REP币还能在涨吗?

在加密货币市场风起云涌的大潮中,REP币凭借其独特的价值主张和技术优势,吸引了众多投资者的目光。REP币能否涨到一万一个...
REP币值得长期拥有吗?REP币有什么价值?

REP币值得长期拥有吗?REP币有什么价值?

REP币是Augur平台的原生代币,该平台是一个去中心化的预测市场,允许用户对各种事件和结果进行预测。REP币在平台上具...
CVC币创始人是谁?CVC币创始人及团队详细介绍

CVC币创始人是谁?CVC币创始人及团队详细介绍

Civic(CVC)币是一种基于区块链技术的身份验证和管理平台,旨在简化和保护数字身份。其创始人团队在区块链行业拥有丰富...

山寨币是什么?山寨币交易平台有哪些?

加密货币世界浩瀚无垠,除了家喻户晓的和以太坊之外,还存在着种类繁多的其他加密货币,统称为山寨币。山寨币凭借其独特的功能和...
返回顶部