前言
11月30日,知道创宇区块链安全实验室?监测到自动做市商协议MonoX.Finance遭黑客攻击,损失超3100万美元。实验室第一时间跟踪本次事件并分析。
简述攻击流程
本次攻击分析选用以太坊交攻击交易:
0x9f14d093a2349de08f02fc0fb018dadb449351d0cdb7d0738ff69cc6fef5f299
1、黑客首先通过swapExactTokenForToken函数将0.1WETH兑换为79.9MONO
Chiliz将Ankr选定为Chiliz Chain主要RPC提供商:6月1日消息,体育和娱乐区块链解决方案 Chiliz 宣布选定 Ankr 作为 Chiliz Chain 主要 RPC 提供商。Chiliz Chain 将引入一个由 11 个活跃的权益证明 (PoSA) 节点验证器组成的系统,Ankr 、Jump Crypto、Paribu 和 Meria(以前称为 Just Mining)为链前 4 个验证节点。[2023/6/1 11:52:58]
2、重复利用函数removeLiquidity移除Monoswap合约中的流动性,直至全部移除
以太坊ERC-20 Token标准发明者宣布即将推出Layer1区块链项目LUKSO:金色财经报道,以太坊 ERC-20 Token 标准的发明者 Fabian Vogelsteller?宣布即将推出 Layer1 区块链项目LUKSO,LUKSO是为创意经济设计的,将与以太坊进行竞争。LUKSO 将有机会让验证者加入网络。以太坊区块链上将有一个 Genesis Validator 存款智能合约,它将在几周后上线。
在 LUKSO 上,Genesis Validator Deposit Smart Contract 将允许用户存入LYXe,这是一种ERC-20 代币,主网上线后,LYXe 将转换为 LYX,即 LUKSO 的原生代币。[2023/4/6 13:46:58]
3、通过函数addLiquidity添加自己操控的流动性
推特用户发现比特币Logo存在设计瑕疵:对比特币运作方式无影响:2月11日消息,产品设计师Doc近日在推特上发布图片称,比特币Logo中有一个小的设计细节,自2010年最初问世以来,一直在多次迭代中保持不变。
2010年11月12日,bitcointalk.org成员bitboy(与YouTuber bitboy Crypto无关)发布了标志性比特币Logo的矢量文件,该Logo已在全球范围内被广泛接受。当它被放大时,可以看到一条橙色的小线从背景延伸到白色的“?”中。
这一信息最初是由推特用户@_Bosch_披露的,他随后分享了一个更新的比特币Logo,删除了此前发现的小标志,改善了风格比例。在进一步的调查中,社区成员@skyler_fs发现?标志的一个曲率也不光滑。
这一消息不会影响比特币的运作方式,社区成员也没有对此表示任何担忧。即使有人在修复了缺陷后创建了新的Logo矢量文件,它也不会得到主流的接受,除非社区另有决定。(Cointelegraph)[2023/2/11 12:01:13]
4、重复调用函数swapExactTokenForToken实现MONO->MONO的不合理兑换
一GMX巨鲸遭黑客攻击,被盗金额约340万美元:金色财经报道,根据Lookonchain监测数据,一GMX巨鲸遭黑客攻击,黑客共盗取82519枚GMX(约合340万美元)并兑换为2627枚ETH,而后将所有ETH跨链至以太坊网络。[2023/1/4 9:51:52]
5、最终利用被以上操作抬高价格的MONO兑换了WETH、WBTC、MONO、USDC、USDT、DUCK、MIM、IMX等从而获利。
漏洞成因分析
分析攻击流程可以发现两个不合理的地方:
攻击者可以通过函数removeLiquidity移除了其他人添加的流动性
攻击者通过函数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合约在设计时没考虑到特殊情况下的价格覆盖问题,而可任意移除流动性的缺陷则更加方便黑客对于价格的操纵。
来源:金色财经
作者?|?rekt编译?|?谷昱近日,Sushiswap陷入与多名离职成员争执的负面新闻中,被指控存在内部小圈子、逼走0xMaki、收回扣、不作为等种种问题,币价也一路下滑.
1900/1/1 0:00:0012月7日,亚马逊云发生宕机,致使全球多个知名网站和服务瘫痪。衍生品交易协议dYdX也因此暂停交易服务,并将订单设置为post-only模式.
1900/1/1 0:00:00RadioCaca将为元兽持有者空投价值7500万美金的新公链通证USM,RadioCaca公链USM支持元宇宙打造,测试网将于12月底上线,主网将于2022年3月上线.
1900/1/1 0:00:0012月7日消息,育碧推出了新平台UbisoftQuartz的测试版,该平台允许用户获取可在游戏中使用的物品的NFT,例如武器、服装或车辆.
1900/1/1 0:00:00近日,海南华辰数艺拍卖有限公司采访了Rivvoo,就12月7日参与北京华辰20周年庆暨2021年秋季拍卖会事宜、艺术家作品、数字藏品等进行了参展作品预告与数字藏品行业展望.
1900/1/1 0:00:00在近一年中,如果要问什么是科技圈与投资圈最炙手可热的新宠,NFT绝对可以和“各路英豪”争争头名.
1900/1/1 0:00:00