Cheese Bank 事件:根本原因分析

本文分析了2020年11月6日发生的Cheese Bank黑客攻击事件,黑客利用AMM(自动化做市商)基础的价格预言机漏洞,通过闪电贷操纵资产价格,从Cheese Bank窃取了330万美元的USDC、USDT和DAI。文章详细探讨了此攻击的技术细节和操作步骤,揭示了DeFi生态系统中的漏洞及其风险。

在这篇博客中,我们分析了发生在2020年11月6日19:22:21 PM +UTC的Cheese Bank攻击。该攻击是在我们审查恶意快贷时发现的。这次攻击利用其测量资产价格的方式中的一个漏洞,从Cheese Bank盗取了330万美元的USDC/USDT/DAI。以下是技术细节的详细说明。

摘要

Cheese Bank是一个基于以太坊的去中心化自主数字银行,允许投资者管理资产,包括借贷、基金管理、保险服务等。然而,它在基于AMM的预言机(即,Uniswap)上测量抵押品价值的方法存在缺陷。因此,通过在Uniswap上基于快贷操纵抵押物价格的方式,该攻击成功地实施了一系列恶意借贷操作,导致Cheese Bank损失了330万美元的USDC/USDT/DAI。

背景

去中心化金融(DeFi)生态系统最近迅速增长,总锁仓价值超过160亿美元。随着这种指数级增长,恶意行为者对操纵和攻击脆弱的DeFi协议的动机也随之增加。在最近的许多DeFi攻击中,快贷被用于允许用户开启无担保贷款,唯一的要求是贷款必须在同一交易中偿还,否则将回滚。这与传统DeFi借贷产生了显著的区别,后者通常要求用户在开始时对贷款进行过度抵押。

在2020年11月,PeckShield的研究人员报告了两次快贷攻击,即AkropolisValue DeFi。在一系列攻击中,我们看到恶意行为者使用快贷瞬时借入、交换、存入并再次借入大量代币,以人工操纵单个交易所上特定代币的价格(例如,Uniswap、Curve)。这一过程本质上是打开了一个缺口,使攻击者能够利用该交易所的异常定价。在这篇博客文章中,我们详细说明了发生在Cheese Bank的最近事件——一个基于以太坊的去中心化自主数字银行。

细节

攻击过程

我们从攻击背后的交易开始分析:0x600a…f1cc。该攻击从一个恶意合约(位于0x9e02)初始化,具体过程如下:

  • 第一步:从dYdX借入21k ETH的快贷

第一步:dYdX快贷21k ETH

  • 第二步:在UniswapV2上用50 ETH交换107k CHEESE

第二步:在UniswapV2上用50 ETH交换107k CHEESE

  • 第三步:在UniswapV2的流动性池中添加107k CHEESE和相应的78 ETH,并获得UNI_V2 LP代币。

第三步:在UniswapV2上进行addLiquidity(107k CHEESE, 78 ETH)

  • 第四步:使用第三步获得的所有LP代币铸造sUSD_V2代币。这允许攻击合约将这些LP代币作为抵押贷款用以从Cheese Bank借入加密资产。

第四步:使用UNI_V2 LP代币铸造sUSD_V2代币

  • 第五步:通过将20k ETH交换为288k CHEESE在UniswapV2上提升CHEESE价格,这使得第一步的UNI_V2 LP代币作为抵押品对Cheese Bank来说更为有价值。这是这次事件中的关键一步,因为Cheese Bank使用流动性池中WETH的数量来估算相应的LP代币价格。经过操纵的UNI_V2-CHEESE-ETH池(存有20k以上的WETH)允许攻击者通过合法的borrow()调用从Cheese Bank中抽走所有的USDC、USDT和DAI。

第五步:在UniswapV2上通过将20k ETH兑换成288k CHEESE来提高CHEESE价格

  • 第六步:刷新Cheese Bank的价格数据。攻击者故意调用CheesePriceOracle::refresh()函数来刷新从流动性池中的WETH数量和来源于UNI_V2-USDT-ETH池的ETH价格衍生出的UNI_V2-CHEESE-ETH LP代币的价格。具体来说,CheesePriceOracle::fetchLPAnhorPrice()函数获取UNI_V2-CHEESE-ETH合约的wEthBalance。在传入的ethPrice的情况下,totalValuewEthBalance x 2 x ethPrice得出。因此,UNI_V2-CHEESE-ETH LP代币的单价由totalValue / LP代币的总供应量计算得出。这意味着,如果恶意行为者能够以某种方式增加池中的WETH数量(例如通过闪电借贷以太币的addLiquidity()),那么LP代币的价格就会增加。

第六步:刷新Cheese Bank的价格

CheesePriceOracle::fetchLPAnchorPrice()

  • 第七步:通过borrow()调用从Cheese Bank中抽走USDC、USDT、DAI。

第七步:从Cheese Bank借入2m USDC

除了借入2m USDC外,1.23m USDT和87k DAI也通过borrow()从Cheese Bank中被借出。请注意,攻击者实际上在borrow()之前检查了余额。如下面所示来自https://oko.palkeo.com/的截图所示,确定从攻击合约中borrow()到的USDC/USDT/DAI的确切余额。

提取USDC/USDT/DAI

  • 第八步:在UniswapV2上将288k CHEESE兑换回19.98k ETH。现在,恶意行为者收获了330万美元等值的USDC、USDT和DAI。她需要将21k ETH的快贷还给dYdX,首选的选择是这288k CHEESE,价值填补了大约20k ETH。
  • 第九步:在UniswapV2上用58k USDC兑换132 ETH。由于在之前的步骤中消耗了一些以太(例如,支付给Uniswap的费用),恶意行为者需要用USDC再购买一些以太。
  • 第十步:将被攻击的资产收集到0x02b7中。

第十步:收集被攻击的资产

  • 第十一步:将21k ETH的快贷归还给dYdX

第十一步:将21k ETH快贷归还给dYdX

余波

再次,基于AMM的预言机允许攻击者带走2m USDC + 1.23m USDT + 87k DAI + 2 ETH,总损失约为330万美元。由于基于AMM的预言机(例如,Uniswap,Curve)常常成为许多近期攻击的目标,我们建议在参考它们作为预言价格时要格外小心,因为它们很容易被操纵。

关于我们

PeckShield Inc.是一家领先的区块链安全公司,致力于提高当前区块链生态系统的安全性、隐私性和可用性。如有任何商业或媒体查询(包括智能合约审计的需求),请通过telegramtwitter邮件与我们联系。

  • 原文链接: peckshield.medium.com/ch...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
peckshield
peckshield
江湖只有他的大名,没有他的介绍。