假币的换脸戏法:技术拆解 THORChain 跨链系统“假充值”漏洞_DEX:GAIN币

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

什么是“假充值”?

当我们在谈论“假充值”攻击时,我们通常谈的是攻击者利用公链的某些特性,绕过交易所的充值入账程序,进行虚假充值,并真实入账。

MDEX官方:UniSwap上假币MDX与MDEX没有任何关系:近日,有用户举报发现UniSwap上出现冒充MDEX的假币。据MDEX官方核实,该网站使用“MDEX.COM”标志,并使用MDX为代币名称,冒充MDEX发币严重侵犯了MDEX品牌声誉与用户利益。MDEX官方团队发布声明称:“UniSwap链上假币MDX与MDEX没有任何关系,请用户谨慎辨别。” MDEX团队同时对用户发出提醒称,有关MDEX官方的所有进展和信息,均会通过官网公告及官方渠道进行发布。请广大投资者保持警惕,谨防上当受。[2021/1/20 16:33:19]

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

漏洞分析

我们从业务逻辑入口去追踪分析此漏洞的成因。

JustSwap白名单上SSK疑似为假币:9月23日,JustSwap白名单上SSK疑似为假币。根据SunStake(SSK)官方消息,SSK代币地址:TW1sqqq7UphAqGNHDXSLXsEainYHJuQeyC。而JustSwap上的SSK代币地址为:TYbtUJpoAos99Kt3ih81s6P8TZ1ATTv6Cj。(律动BlockBeats)[2020/9/23]

首先看到在处理跨链充值事件时,调用了getAssetFromTokenAddress?方法去获取代币信息,并传入了资产合约地址作为参数:

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

?

FTX创始人:警惕Uniswap上的SRM假币:8月6日消息,加密衍生品交易所FTX的创始人Sam Bankman-Fried发推提醒用户警惕Uniswap上的SRM假币。他表示,目前SRM还不能交易,如果你在Uniswap等平台上看到SRM,那么这是假币。[2020/8/6]

在getAssetFromTokenAddress方法里,我们看到它调用了getTokenMeta?去获取代币元数据,此时也传入了资产合约地址作为参数,但在此处有一个定义引起我们的警觉,在初始化代币时,默认赋予了代币符号为ETH,这就是漏洞的关键点之一:asset:=common.ETHAsset,如果传入合约地址对应的代币符号为ETH,那么此处关于symbol的验证将被绕过。

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

动态 | 者伪装成项目方让Newdex上假币 交易所承认审核不严:据区块律动BlockBeats消息,最近一名俄罗斯者设法让知名EOS去中心化交易所Newdex上架了一个虚假代币PKD,并成功欺诈了少部分用户买了该虚假代币。该虚假代币展示内容显示由Poker Chained游戏开发团队发行的,然后进行了典型拉高出货。 但是PokerChained团队并没有发过自己的代币,目前也没有发币计划。PokerChained项目负责人Kirill Lebedev声明称,“ PokerChained团队很快了解到了这个虚假代币,声称与他们无关,提醒用户请不要购买此代币,这是100%的局。” PokerChained团队联系Newdex交易所,成功阻止了PKD交易,并将这虚假代币下架。然而已经有几个用户买了该代币,成为者的牺牲品。Newdex承认他们在没有进行深入研究的情况下就把虚假代币上架了,并同意赔偿用户的损失。[2019/4/18]

精选 | Newdex回应EOS假币事件 用户利益并未受到伤害:Newdex今日针对假EOS攻击事件作出回应,媒体对于事件造成平台用户蒙受5.8万美元损失的报道与事实不符。事件中,Newdex及时启动应急措施,完成漏洞修复并发布公告。平台承担全部损失,用户资产并未受损。肇事黑客全数归还IQ、ADD,其转入Bitfinex交易所的资产已被冻结。[2018/9/20]

继续验证我们的猜测,我们看到当代币地址在系统中不存在时,会从以太坊主链上去获取合约信息,并以获取到的symbol构建出新的代币,此时所有的漏洞成因都已经显现:

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

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

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

总结一下,首先是由于错误的定义,如果跨链充值的ERC20代币符号为ETH,那么将会出现逻辑错误,导致充值的代币被识别为真正的以太币ETH。

还原攻击真相

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

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

发现这个地址对应的合约的代币符号正是ETH,攻击者正是通过部署了假币合约,完成了这次跨链假充值。

漏洞修复

漏洞补丁:

项目方在发现攻击后快速对代码进行了修复,删除了默认的代币类型,使用common.EmptyAsset进行空代币定义,并在后续逻辑中使用asset.IsEmpty()进行判断,过滤了没有进行赋值的假充值代币。

总结

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

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

水星链

[0:15ms0-0:979ms