主页 > 苹果可以下载imtoken钱包吗 > THORChain跨链系统“虚假充值”漏洞技术拆解

THORChain跨链系统“虚假充值”漏洞技术拆解

By: Johan@慢雾安全团队

欧易usdt怎么充值_六龙争霸假v怎么充值_假usdt充值

据慢雾消息,2021年6月29日,去中心化跨链交易协议THORChain发推称发现针对THORChain的恶意攻击,THORChain节点已响应并进行隔离防御。 慢雾安全团队第一时间介入分析。 经分析发现假usdt充值,这是一次针对跨链系统的“虚假充值”攻击。 结果分享如下:

什么是“虚假充值”?

当我们说到“虚假充值”攻击时,通常是指攻击者利用公链的某些特性,绕过交易所的充值入账流程,进行虚假充值,真正进入账户。

慢雾早期曾披露过多次“假充值”攻击:

欧易usdt怎么充值_假usdt充值_六龙争霸假v怎么充值

[1] USDT虚假充值:USDT虚假转账安全风险分析| 2345 新技术研究所区块链实验室

【2】EOS假充值:EOS假充值(hard_fail状态攻击)红色预警详情披露及修复方案 【3】以太坊代币假充值:以太坊代币“假充值”漏洞详情公开及修复方案

【4】比特币RBF虚假充值风险:比特币RBF虚假充值风险分析

随着RenVM、THORChain等跨链服务的兴起,跨链节点充当交易所,通过扫描另一条公链的资产转移,在本地公链上生成资产映射。 THORChain 正是通过这种机制将以太坊上的代币转移到其他公链上。

漏洞分析

我们从业务逻辑入口跟踪分析该漏洞产生的原因。

六龙争霸假v怎么充值_假usdt充值_欧易usdt怎么充值

首先,在处理跨链充值事件时,会调用getAssetFromTokenAddress方法获取token信息,并将资产合约地址作为参数传入:

- bifrost/pkg/chainclients/ethereum/ethereum_block_scanner.go‍

欧易usdt怎么充值_假usdt充值_六龙争霸假v怎么充值

在 getAssetFromTokenAddress 方法中,我们看到它调用 getTokenMeta 来获取令牌元数据。 这时候资产合约地址也作为参数传入,但是这里有个定义引起我们警惕。 初始化token时,默认给出token symbol为ETH,这是漏洞的重点之一:asset := common.ETHAsset,如果传入合约地址对应的token symbol为ETH,则验证这里的符号将被绕过。

- bifrost/pkg/chainclients/ethereum/ethereum_block_scanner.go

欧易usdt怎么充值_六龙争霸假v怎么充值_假usdt充值

欧易usdt怎么充值_假usdt充值_六龙争霸假v怎么充值

继续验证我们的猜测。 我们看到,当代币地址在系统中不存在时,会从以太坊主链获取合约信息,并用获取的符号构造新的代币。 至此,造成漏洞的原因全部排除。 出现:

- bifrost/pkg/chainclients/ethereum/ethereum_block_scanner.go

欧易usdt怎么充值_假usdt充值_六龙争霸假v怎么充值

- bifrost/pkg/chainclients/ethereum/tokens_db.go

假usdt充值_六龙争霸假v怎么充值_欧易usdt怎么充值

- bifrost/pkg/chainclients/ethereum/ethereum_block_scanner.go

六龙争霸假v怎么充值_假usdt充值_欧易usdt怎么充值

欧易usdt怎么充值_假usdt充值_六龙争霸假v怎么充值

综上所述,首先,由于错误的定义,如果跨链充值的ERC20代币的符号是ETH,那么就会出现逻辑错误,导致充值的代币被识别为真正的以太币货币 ETH。

还原袭击真相

我们来看一次攻击交易的执行过程,可以提取出充值的token合约地址:

假usdt充值_欧易usdt怎么充值_六龙争霸假v怎么充值

我们在 Etherscan 上查看代币合约地址:

欧易usdt怎么充值_假usdt充值_六龙争霸假v怎么充值

欧易usdt怎么充值_假usdt充值_六龙争霸假v怎么充值

发现该地址对应的合约代币符号为ETH,攻击者通过部署假币合约完成跨链假充值。

Bug修复

漏洞补丁:

六龙争霸假v怎么充值_假usdt充值_欧易usdt怎么充值

发现攻击后,项目方迅速修复代码,删除默认token类型,使用common.EmptyAsset定义空token,并在后续逻辑中使用asset.IsEmpty()进行判断,过滤掉no assignment fake top-上令牌。

总结

幸运的是,项目方及时发现了此次攻击事件,没有造成巨大的财产损失。 但是,作为跨链系统,未来可能会聚集庞大的多链资金,安全也不容忽视。 因此,慢雾安全团队建议在设计跨链系统时,应充分考虑不同公链、不同代币的特点,全面开展“虚假充值”测试,状态监测预警。做好了假usdt充值,必要时可以联系专业的安全公司进行安全审计。