据慢雾区消息,2021 年 6 月 29 日,去中心化跨链交易协议 THORChain 发推称发现一个针对 THORChain 的恶意攻击,THORChain 节点已作出反应并进行隔离和防御。慢雾安全团队第一时间介入分析,经分析发现,这是一起针对跨链系统的“假充值”攻击,结果分享如下:
什么是“假充值”?
当我们在谈论“假充值”攻击时,我们通常谈的是攻击者利用公链的某些特性,绕过交易所的充值入账程序,进行虚假充值,并真实入账。
随着 RenVM、THORChain 等跨链服务的兴起,跨链节点充当起了交易所的角色,通过扫描另一条公链的资产转移情况,在本地公链上生成资产映射。THORChain 正是通过这种机制,将以太坊上的代币转移到其它公链。
DYDX基金会声明:请用户警惕DYDX假币:金色财经报道,近日,DYDX基金会接到反馈,市场已有部分非法分子打着DYDX旗号在发行假币DYDX。在此,DYDX基金会郑重声明,DYDX到目前为止,还未进行释放。DYDX首期领取时间为2021年9月8晚23:00(UTC+8)。请广大用户注意防范风险,保护自身财产安全,并对打着DYDX旗号发行代币的非法行为予以抵制。
DYDX地址:0x92d6c1e31e14520e676a687f0a93788b716beff5。[2021/9/8 23:10:05]
漏洞分析
我们从业务逻辑入口去追踪分析此漏洞的成因。
首先看到在处理跨链充值事件时,调用了 getAssetFromTokenAddress 方法去获取代币信息,并传入了资产合约地址作为参数:
MDEX官方:UniSwap上假币MDX与MDEX没有任何关系:近日,有用户举报发现UniSwap上出现冒充MDEX的假币。据MDEX官方核实,该网站使用“MDEX.COM”标志,并使用MDX为代币名称,冒充MDEX发币严重侵犯了MDEX品牌声誉与用户利益。MDEX官方团队发布声明称:“UniSwap链上假币MDX与MDEX没有任何关系,请用户谨慎辨别。” MDEX团队同时对用户发出提醒称,有关MDEX官方的所有进展和信息,均会通过官网公告及官方渠道进行发布。请广大投资者保持警惕,谨防上当受。[2021/1/20 16:33:19]
- bifrost/pkg/chainclients/ethereum/ethereum_block_scanner.go?
波卡生态项目Acala:此前ACA假币局是网站Bug目前已被修正:9月23日,波卡生态项目Acala官方再次发推,对此前Uniswap上的ACA假币局作出声明。官方表示,现已被告知ACA假币是网站网站Bug,目前已被修正。官方再次提醒称,用户需保持警惕。此前9月7日及15日,Acala官方两次发推提醒称,官方还没有发行ACA代币,用户需警惕Uniswap上的ACA假币。[2020/9/23]
在 getAssetFromTokenAddress 方法里,我们看到它调用了 getTokenMeta 去获取代币元数据,此时也传入了资产合约地址作为参数,但在此处有一个定义引起我们的警觉,在初始化代币时,默认赋予了代币符号为 ETH,这就是漏洞的关键点之一:asset := common.ETHAsset,如果传入合约地址对应的代币符号为 ETH,那么此处关于 symbol 的验证将被绕过。
声音 | 中央财经大学邓健鹏:目前我国关于反假币的相关规定难以适用于数字货币:金色财经报道,中央财经大学法学院教授邓健鹏认为,目前,我国关于反假币的相关规定难以适用于数字货币。由于对货币的定义仅停留在纸币和硬币层面,货币发行制度也仅针对纸币和硬币的特性而设计。根据中国人民银行法和人民币管理条例相关规定,首先,“伪造”“变造”的概念对数字货币不适用;其次,反假币工作程序对数字货币不适用。[2019/12/4]
- bifrost/pkg/chainclients/ethereum/ethereum_block_scanner.go
继续验证我们的猜测,我们看到当代币地址在系统中不存在时,会从以太坊主链上去获取合约信息,并以获取到的 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() 进行判断,过滤了没有进行赋值的假充值代币。
总结
幸运的是项目方及时发现了本次攻击,未造成巨额财产损失,但作为跨链系统,未来可能聚集巨额的多链资金,安全性不容忽视,因此慢雾安全团队建议在进行跨链系统设计时应充分考虑不同公链不同代币的特性,充分进行“假充值”测试,做好状态监控和预警,必要时可联系专业安全公司进行安全审计。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。