月亮链 月亮链
Ctrl+D收藏月亮链

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

作者:

时间:1900/1/1 0:00:00

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

什么是“假充值”?

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

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

慢雾xToken被黑事件分析:两个合约分别遭受“假币”攻击和预言机操控攻击:据慢雾区消息,以太坊 DeFi 项目 xToken 遭受攻击,损失近 2500 万美元,慢雾安全团队第一时间介入分析,结合官方事后发布的事故分析,我们将以通俗易懂的简讯形式分享给大家。

本次被黑的两个模块分别是 xToken 中的 xBNTa 合约和 xSNXa 合约。两个合约分别遭受了“假币”攻击和预言机操控攻击。

一)xBNTa 合约攻击分析

1. xBNTa 合约存在一个 mint 函数,允许用户使用 ETH 兑换 BNT,使用的是 Bancor Netowrk 进行兑换,并根据 Bancor Network 返回的兑换数量进行铸币。

2. 在 mint 函数中存在一个 path 变量,用于在 Bancor Network 中进行 ETH 到 BNT 的兑换,但是 path 这个值是用户传入并可以操控的

3. 攻击者传入一个伪造的 path,使 xBNTa 合约使用攻击者传入的 path 来进行代币兑换,达到使用其他交易对来进行铸币的目的。绕过了合约本身必须使用 ETH/BNT 交易对进行兑换的限制,进而达到任意铸币的目的。

二)xSNXa 合约攻击分析

1. xSNXa 合约存在一个 mint 函数,允许用户使用 ETH 兑换 xSNX,使用的是 Kyber Network 的聚合器进行兑换。

2. 攻击者可以通过闪电贷 Uniswap 中 ETH/SNX 交易对的价格进行操控,扰乱 SNX/ETH 交易对的报价,进而扰乱 Kyber Network 的报价。从而影响 xSNXa 合约的价格获取

3. 攻击者使用操控后的价格进行铸币,从而达到攻击目的。

总结:本次 xToken 项目被攻击充分展现了 DeFi 世界的复杂性,其中针对 xSNXa 的攻击更是闪电贷操控价格的惯用手法。慢雾安全团队建议 DeFi 项目开发团队在进行 DeFi 项目开发的时候要做好参数校验,同时在获取价格的地方需要防止预言机操控攻击,可使用 Uniswap 和 ChainLink 的预言机进行价格获取,并经过专业的安全团队进行审计, 保护财产安全。详情见官网。[2021/5/13 21:57:48]

漏洞分析

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?

Serum通证SRM将于今日香港时间21:30上线,在此之前上线的SRM均为假币:据官方公告,DeFi项目Serum通证SRM将于今日香港时间21:30上线FTX,BitMax,HBTC,Uniswap,Balancer,Mesa DEX及TomoDEX,并且不会在此之前开放SRM交易,一切在21:30之前上线的的SRM均可判定为为假币。上线详情请留意各交易所官方公告。[2020/8/11]

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

动态 | 账号创建10亿个EOS假币,项目方应提高警惕:Beosin成都链安态势感知安全预警:今日下午14:20:11?根据成都链安区块链安全态势感知系统Beosin-Eagle Eye检测发现,账户larry5555555 发布了10亿 EOS假币并分发到了数个小号(pandoras1111,pandoras.e等),鹰眼将持续追踪这些假币的流向,请各项目方持续关注事件走势,做好及时应急措施预警准备和自查,检查自己的合约是否正确判断接收代币的发行方,必要时可以找区块链安全公司进行代码审计,并可加入成都链安鹰眼态势感知系统,我们将第一时间为大家免费提供预警报警服务,避免用户资产受损。[2019/6/21]

- 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() 进行判断,过滤了没有进行赋值的假充值代币。

总结

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

标签:ETHAINHAIChaintether币怎么提现blockchain钱包登录不了SkychainCORE MultiChain Token

比特币行情热门资讯
比特币:美国“九拒”比特币ETF 何时才能得以批准?_加密货币

自从今年早些时候加拿大允许第一只比特币 ETF 在多伦多证券交易所上市,Valkyrie、Stone Ridge Assert Management 的子公司 NYDIG 和富达投资的子公司 F.

1900/1/1 0:00:00
BTC:金色趋势丨知史鉴今 牛市下半场刚启动?_JUMBO

首先看下BTC2013年牛市行情走势,研究可以发现13年牛市BTC走二顶形态,年中有一波大幅度的调整,调整幅度高达80%,很多人都以为牛市结束了,后面BTC超跌反弹再回落筑底.

1900/1/1 0:00:00
区块链:首发 | 金融科技如何通过区块链技术降低外汇成本?_Voxel X Network

本文英文版发布于American Banker,中文版由Roxe支付网络亚太团队翻译,授权金色财经首发,转载请注明.

1900/1/1 0:00:00
比特币:指标显示我们正处于牛市周期的开始_lbtc币在中币为什么没周交易量了

根据Coinmetrics的消息,自5月12日崩盘以来,市场已经下跌了近7周。然而,即使许多大玩家对进行大规模购买缺乏兴趣,链上指标显示了技术指标不能显示的内容.

1900/1/1 0:00:00
比特币:为什么说2021 Q2或是数字货币史上最重要的一季_OIN

本文来自?messari.io,原文作者:Mira Christanto2021 年第二季度,可能是数字货币历史上最重要的季度之一.

1900/1/1 0:00:00
比特币:金色观察丨吹糠见米 四川叫停挖矿后全球比特币能耗已减少50%_MINTME

金色财经 区块链6月28日讯? ?根据剑桥大学比特币电力消耗指数显示,自国内打击数字货币挖矿以来,全球比特币能源消耗已经减少了一半以上.

1900/1/1 0:00:00