据慢雾区消息,2021年6月29日,去中心化跨链交易协议THORChain发推称发现一个针对THORChain的恶意攻击,THORChain节点已作出反应并进行隔离和防御。慢雾安全团队第一时间介入分析,经分析发现,这是一起针对跨链系统的“假充值”攻击,结果分享如下:
什么是“假充值”?
当我们在谈论“假充值”攻击时,我们通常谈的是攻击者利用公链的某些特性,绕过交易所的充值入账程序,进行虚假充值,并真实入账。
随着RenVM、THORChain等跨链服务的兴起,跨链节点充当起了交易所的角色,通过扫描另一条公链的资产转移情况,在本地公链上生成资产映射。THORChain正是通过这种机制,将以太坊上的代币转移到其它公链。
“边玩边赚”游戏Axie Infinity发布RON假币风险警示:金色财经报道,1月7日,据“边玩边赚”游戏Axie Infinity官方推特发布警示消息,一些欺诈者正在以太坊上向AXS持有者发送所谓的RON代币,这些代币并非真正的RON代币。Axie Infinity提醒,官方RON代币尚未解锁,AXS持有人如果与Uniswap上一些“随机池”交互时,必须特别小心。[2022/1/7 8:32:43]
漏洞分析
我们从业务逻辑入口去追踪分析此漏洞的成因。
首先看到在处理跨链充值事件时,调用了getAssetFromTokenAddress?方法去获取代币信息,并传入了资产合约地址作为参数:
-?bifrost/pkg/chainclients/ethereum/ethereum_block_scanner.go
俄罗斯VTB银行董事长:比特币是假币,数字货币出现不可避免:俄罗斯第二大银行VTB董事长兼总裁Andrey Kostin表示,他不喜欢比特币。他认为比特币是假币,并将加密挖矿技术比作中世纪罪犯伪造货币的方式。然而,他承认CBDC的推出是重要的,俄罗斯将很快开始数字卢布试验。Kostin也承认世界正在走向数字化,数字货币的出现是不可避免的。然而,他坚持认为,这些应由央行控制。(U.Today)[2021/6/4 23:12:32]
?
在getAssetFromTokenAddress方法里,我们看到它调用了getTokenMeta?去获取代币元数据,此时也传入了资产合约地址作为参数,但在此处有一个定义引起我们的警觉,在初始化代币时,默认赋予了代币符号为ETH,这就是漏洞的关键点之一:asset:=common.ETHAsset,如果传入合约地址对应的代币符号为ETH,那么此处关于symbol的验证将被绕过。
Farmland Protocol提醒用户注意假币风险:Farmland Protocol提醒用户注意假币风险,目前上线的Farmland通证均为假币。据官方公告,跨链Defi聚合平台将于近期登陆交易平台,具体时间另行通知,并且表示在此之前不会开放交易,一切在官方通知之前上线的均为假币,上线详情留意官方公告,特别请用户注意鉴别,Uniswap上的farm非Farmland的通证。[2020/9/4]
-?bifrost/pkg/chainclients/ethereum/ethereum_block_scanner.go
声音 | 安全专家:假币攻击已不是个例:TronBank被报遭假币攻击,1小时内被盗约1.7亿枚BTT。针对此事件,北京链安安全专家hardman表示,本次发生的假币漏洞不是个例,类似的事件已经在其它公链发生过多起,主要分为假充值漏洞和假币漏洞。假充值漏洞如usdt、以太坊假充值漏洞,假币漏洞如eos公链上的多个dapp曾经也发生过假币漏洞。在这里需要说明的是,目前所有的假币漏洞或者假充值漏洞都是由于开发者代码编写不当导致的,公链和代币本身并没有漏洞。[2019/4/11]
继续验证我们的猜测,我们看到当代币地址在系统中不存在时,会从以太坊主链上去获取合约信息,并以获取到的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()进行判断,过滤了没有进行赋值的假充值代币。
总结
幸运的是项目方及时发现了本次攻击,未造成巨额财产损失,但作为跨链系统,未来可能聚集巨额的多链资金,安全性不容忽视,因此慢雾安全团队建议在进行跨链系统设计时应充分考虑不同公链不同代币的特性,充分进行“假充值”测试,做好状态监控和预警,必要时可联系专业安全公司进行安全审计。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。