前言
11月30日,知道创宇区块链安全实验室?监测到自动做市商协议MonoX.Finance遭黑客攻击,损失超3100万美元。实验室第一时间跟踪本次事件并分析。
简述攻击流程
本次攻击分析选用以太坊交攻击交易:
0x9f14d093a2349de08f02fc0fb018dadb449351d0cdb7d0738ff69cc6fef5f299
1、黑客首先通过swapExactTokenForToken函数将0.1WETH兑换为79.9MONO
澳大利亚金融科技公司Afterpay向纽约时装周提供NFT“钥匙”:金色财经报道,澳大利亚金融科技公司Afterpay与五位设计师合作为纽约时装周提供数量有限的NFT。这些不仅将是独一无二的收藏品,而且还将解锁对现实世界时装周体验和产品的访问。[2022/8/25 12:48:01]
2、重复利用函数removeLiquidity移除Monoswap合约中的流动性,直至全部移除
3、通过函数addLiquidity添加自己操控的流动性
4、重复调用函数swapExactTokenForToken实现MONO->MONO的不合理兑换
元宇宙入选《纽约时报》2022四大科技趋势:金色财经报道,《纽约时报》发布2022四大科技趋势,元宇宙入选。但据询公司Creative Strategies的消费技术分析师卡罗琳娜·米拉内西表示,她担心这可能会反映出有能力给数字自我花钱的少数阶层的特权,元宇宙仍然可能昙花一现,这取决于出现什么样的产品和购买者。[2022/1/14 8:48:20]
5、最终利用被以上操作抬高价格的MONO兑换了WETH、WBTC、MONO、USDC、USDT、DUCK、MIM、IMX等从而获利。
漏洞成因分析
分析攻击流程可以发现两个不合理的地方:
《纽约时报》称BTC或将转向PoS的观点遭到加密社区反对:《纽约时报》称,预计BTC将采用ETH的权益证明(PoS)机制并放弃严重耗能的工作量证明(PoW)机制。加密货币社区对此观点表示反对,人权基金会高管Alex Gladstein在他的一系列推文中将其描述为“废话”。其表示,《纽约时报》发表此观点足以说明当今BTC在主流媒体中的普及程度是很糟糕的,只要稍做研究,《纽约时报》就应意识到任何人都不期望BTC转向PoS。(U.Today)[2021/4/15 20:22:34]
攻击者可以通过函数removeLiquidity移除了其他人添加的流动性
声音 | 纽约时报:激进组织哈马斯正在用比特币融资:据《纽约时报》报道,激进组织哈马斯推出了一个最新版网站qassam.ps,旨在用比特币募集资金。据悉,该网站的每位访客都会获得一个唯一比特币地址,可以向其发送数字货币,哈马斯生成这种方法几乎不可能让执法部门追踪捐款。该网站提供七种语言版本,还包含一些精心制作的视频,向用户解释如何获取和发送比特币而不会被追踪。目前,哈马斯被西方政府和其他一些组织指定为恐怖主义份子,并将其排除在传统金融体系之外。[2019/8/19]
攻击者通过函数swapExactTokenForToken不断重复MONO兑换MONO的操作
检查源码
对函数removeLiquidity源码进行分析
可以看到函数removeLiquidity和它包含的内部函数_removeLiquidityHelper都没有对调用者进行权限限制,以及对需要被移除流动性的传参地址to进行验证,这导致了任意地址都能进行对该pool内所有流动性进行移除
对函数swapExactTokenForToken源码进行分析
1、发现函数swapExactTokenForToken主要功能由函数swapIn实现,对函数swapIn进行跟进分析
2、发现获取token信息的函数getAmountOut,对函数getAmountOut进行跟进分析
3、发现tokenInPrice与tokenOutPrice的计算规则相同都是通过函数_getNewPrice计算,跟进到函数_getNewPrice
4、发现price的获取对应两种状态
SELL状态:价格=代币初始价格*代币存储量/(代币存储量+费用)
BUY状态:价格=代币初始价格*代币存储量/(代币存储量-费用)
很明显相同token在BUY状态下获取到的价格大于SELL状态
5.回到swapIn函数,当传入token价格被获取到后会按照token种类通过_updateTokenInfo进行token信息更新。
由于传入的token都为MONO所以:
当通过if(tokenIn==address(vCash))判断时,MONO获取到的价格是SELL状态下计算的价格;
当通过if(tokenOut==address(vCash))判断时,MONO获取到的SELL状态下的价格会被BUY状态下获取的价格覆盖;
因此当发生MONO兑换MONO操作时,MONO的价格会上升。
重新梳理攻击过程
第一步:黑客将0.1WETH兑换为79.9MONO作为启动资金
第二步:黑客移除了pool内全部流动性,防止攻击受到影响或者价格波动被检测到
第三步:黑客添加了自己控制的流动性,便于兑换操作
第四步:黑客通过重复MONO兑换MONO的操作,不断抬高MONO价格
第五步:利用已经被抬高的MONO兑换pool内其他资产达到获利目的
总结
本次安全事件问题其实并不复杂,主要原因在于monoswap合约在设计时没考虑到特殊情况下的价格覆盖问题,而可任意移除流动性的缺陷则更加方便黑客对于价格的操纵。
来源:金色财经
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。