原标题|千万美元被盗——DeFi平台MonoXFinance被黑分析
作者|九九@慢雾安全团队
2021年11?30?,据慢雾区消息,DeFi平台MonoXFinance遭遇攻击,本次攻击中约合1820万美元的?WETH和1050万美元的MATIC被盗,其他被盗Token包括WBTC、LINK、GHST、DUCK、MIM和IMX,损失共计约3100万美元。慢雾安全团队第?时间介?分析,并将简要分析结果分享如下。
攻击核心
本次攻击的核?在于利?swap合约中没有对池中传?和传出代币是否相同作检查,以此利?价格更新机制的缺陷,使得攻击者传?和传出代币相同时,价格被二次计算并覆盖,导致代币价格不断被推?,并以此代币换出池中的其他代币来获利。
相关信息
MonoX是?种新的DeFi协议,使?单?代币设计?于流动性池。这是通过将存?的代币与vCASH稳定币组合成?个虚拟交易对来实现的。其中的单?代币流动性池的第?个应?是?动做市商系统-Monoswap,它在2021年10?时推出。
三月调整后稳定币链上交易额达8232亿美元,上涨47.5%:金色财经报道,据The Block Pro数据显示,三月调整后的稳定币链上交易额增长至8232亿美元,涨幅达到了47.5%;不过已发行稳定币供应量小幅收缩至1256亿美元,降幅约为2.3%,其中美元稳定币USDT市场份额升至64.1%,USDC的市场份额降幅较大,为24.6%。此外,三月调整后比特币和以太坊链上总交易额增加了48.8%,上涨至2550亿美元,其中比特币链上交易额增长48.3%,以太坊链上交易额涨幅达到了62.7%。[2023/4/5 13:46:43]
攻击者地址1:
0xecbe385f78041895c311070f344b55bfaa953258
攻击者地址?2:
0x8f6a86f3ab015f4d03ddb13abb02710e6d7ab31b
Coinbase:英国有能力成为全球数字和金融服务转型中心:金色财经报道,据Coinbase分享的最新消息,英国拥有令人印象深刻的创新基础设施,包括主要研究型大学和仅次于美国的金融科技投资水平。这“为英国成功孵化和接纳一些欧洲最大的科技公司做出了贡献。
鉴于需要依靠尖端技术来保持这一领先地位,英国政府现在正在就加密资产监管进行咨询,未来金融服务监管制度将针对加密资产进行咨询。该框架将“提供监管清晰度并帮助推动创新,并以消费者保护为核心。[2023/3/21 13:17:43]
攻击合约?1:
0xf079d7911c13369e7fd85607970036d2883afcfd
攻击合约2:
0x119914de3ae03256fd58b66cd6b8c6a12c70cfb2
攻击交易1:
币安证实其已被Paxos告知停止铸造新的BUSD代币:2月13日消息,加密交易所币安表示,Paxos Trust Co. 告知币安其已被指示停止铸造新的稳定币BUSD。币安发言人称:“BUSD是由Paxos全资拥有和管理的稳定币,因此,BUSD的市值只会随着时间的推移而下降。Paxos将继续为该产品提供服务,管理赎回,并将根据需要提供额外的信息。Paxos还保证,这些资金是安全的,并由银行的储备金完全覆盖。”
此前今日早些时候消息,Paxos因BUSD面临美SEC的诉讼;纽约州金融服务部命令Paxos停止发行新BUSD代币。[2023/2/13 12:04:04]
https://etherscan.io/tx/0x9f14d093a2349de08f02fc0fb018dadb449351d0cdb7d0738ff69cc6fef5f299
攻击交易2:
澳大利亚监管机构起诉Finder Wallet提供“无证”金融服务:金色财经报道,澳大利亚金融监管机构起诉Finder.com的子公司Finder Wallet,因为它推出了一款与加密货币相关的收益产品。12月15日,澳大利亚证券和投资委员会(ASIC)在一份声明中表示,该公司起诉这家初创公司“涉嫌无证行为和风险披露不足”。
这款名为Finder Earn的产品于今年2月至11月10日推出,涉及将用户的澳元存款转换为一种与澳元挂钩的稳定币TAUD, Finder随后将其用作营运资金。该公司提供的存款利率为4.01%和6.01%。ASIC表示,该产品与债券非常相似,因此需要适当的许可。(the block)[2022/12/16 21:48:10]
https://polygonscan.com/tx/0x5a03b9c03eedcb9ec6e70c6841eaa4976a732d050a6218969e39483bb3004d5d
蚂蚁链高速通信网络BTN全项通过信通院能力测评:金色财经消息,近日,蚂蚁链高速通信网络BTN通过信通院能力测评,系统核心功能、多通信模式支持、区块链网络优化、网络通信安全、去中心化系统通信设施基础保障、网络运维能力等六大项25小项均符合要求。这意味着BTN网络的系统能力和业务适用性得到了权威认证,可满足区块链、多方隐私计算等多种去中心化方案的实际应用。据了解,这也是信通院评测通过的首个区块链通信技术项目。BTN是蚂蚁链推出的可信数字通信技术方案,通过智能路由算法、高效传输协议、传输优化算法、虚拟专线等技术搭起覆盖全球的高速通信网络,从而解决大规模区块链场景下通信效率低、稳定性差,难以支撑工业级生产应用的问题。据介绍,BTN可以将区块链网络的吞吐量提升186%,带宽成本降低80%,时延降低40%。目前,BTN已经在全球部署了30多个区域节点,覆盖了全国和国外主要区域,满足不同区域的区块链平台“就近接入”。[2022/7/8 2:00:27]
攻击细节
1、首先攻击者调用Monoswap.swapExactTokenForToken:0.1个WETH换出79.986094311542621010个MONO。
2、接着攻击者利用漏洞移除池子中其他用户的流动性,并为添加攻击合约的流动性以此来获取最大的利益。
这里移除流动性处的漏洞在Monoswap.sol中的471-510行,移除池中流动性时通过removeLiquidity函数调用_removeLiquidityHelper函数,而这两个函数都未做调用者和传入的to参数的身份验证,所以可直接移除任意用户在池中的流动性。
移除0x7b9aa6的流动性,把1670.7572297649224个MONO和6.862171986812230290个vCASH转出给0x7b9aa6;移除cowrie.eth的流动性,把152.9745213857155个MONO和0.628300423692773565个vCASH转出给cowrie.eth;移除0xab5167的流动性,把99940.7413658327个MONO和410.478879590637971405个vCASH转出给0xab5167;为攻击合约1在MONO代币流动池创建流动性。
3、紧接着攻击者调??55?次?Monoswap.swapExactTokenForToken以此来不断堆?MONO的价格。
这里攻击的核心是在Monoswap.sol中的swapExactTokenForToken函数,攻击者传入MONO代币使得tokenIn和tokenOut是相同的代币。
跟到swapIn函数中:
可以发现在swapIn函数中,调用了函数getAmountOut来计算价格。接着跟到getAmountOut函数中发现是利用了_getNewPrice函数来计算tokenInPrice和tokenOutPrice。
跟到_getNewprice函数中,发现当计算tokenInPrice时候传入的txType参数为TxType.SELL,此时:
当计算tokenOutPrice时候传入的txType参数为TxType.BUY,此时:
如果传入和传出为同一种代币时,价格计算式中的四个变量都相同,所以很容易得出tokenOutPrice会比tokenInPrice要大。
由于tokenIn和tokenOut是同一个token,swapIn函数在计算完价格后会再次调用_updateTokenInfo函数,使得tokenOutPrice的更新会覆盖tokenInPrice的更新,所以导致这个token的价格上涨。
4、最后攻击者调用swapTokenForExactToken函数用MONO来换出池子中的其他代币。
swapTokenForExactToken函数中调用了swapOut函数,而swapOut函数中计算价格是调用的getAmountIn函数。
在该函数中由于tokenInPoolPrice是取的MONO代币在池中的价格,而此价格在之前已被推高,导致tokenInPrice变大,计算最后的amountIn变小,用更少的MONO换出了原来相同数量的WETH、WBTC、MONO、USDC、USDT、DUCK、MIM、IMX等池子中的代币。
5、攻击者最终把攻击获利转入地址
0x8f6a86f3ab015f4d03ddb13abb02710e6d7ab31b。
以上为以太坊主链上的攻击分析,此外,攻击者除了在以太坊主链上进行攻击外,还在Polygon上进行了同样的攻击,攻击手法与以太坊主链上相同,此处不做过多重复的分析。
据慢雾AML统计,MonoXFinance最终损失约3400万美元,包括约2.1K个WETH、1.9M个WMATIC、36.1个WBTC、143.4K个MONO、8.2M个USDC、9.1M个USDT、1.2K个LINK、3.1K个GHST、5.1M个DUCK、4.1K个MIM以及274.9个IMX。
总结
本次攻击是利用了swap合约里没有对池中传入和传出代币作检查,从而利用价格更新机制的问题,由于在swap合约中会对池中传入和传出的代币的价格调用同一个函数_upTokenInfo来进行更新,而当传入和传出的代币为同一种代币时,第二次调用_upTokenInfo函数时,通过价格计算后的更高的tokenOutPrice会覆盖掉价格更低的tokenInPrice,以此来不断推高池中该代币的价格,最后可以换出池中其他的所有代币来获利离场。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。