Cheese Bank 攻击策略

引用PeckShield 的报告

PeckShield 近日发现,“科学家”于北京时间11月7日凌晨3时22分,利用闪电贷(Flash loan)通过一笔交易攻击一家去中心化数字银行 Cheese Bank 获利 330 万美元。

凭空套走的 330 万美元

PeckShield 通过追踪和分析发现,攻击者首先通过 dYdX 闪电贷贷出 21,000 枚ETH;

通过 dYdX 闪电贷贷出 21,000 枚ETH

随后,在 UniswapV2 中将 50 枚WETH 兑换为 107,000 枚CHEESE (Cheese Bank 通证),此时 CHEESE 的单价为 0.00047 ETH/枚(在 UniswapV2 协议中可将 ETH 1:1 转换为 WETH,同时WETH 也可 1:1 转换为 ETH ),攻击者剩余 20,950 枚ETH;

在 UniswapV2 中将 50 枚WETH 兑换为 107,000 枚CHEESE

接下来,攻击者在 UniswapV2 中抵押 107,000 枚CHEESE 和 78 枚ETH 来提供交易流动性,同时获得 UniswapV2 上自动生成的 UNI_V2 LP 凭证。UNI_V2 LP 凭证是流动性提供者(LP)在 UniswapV2 上提供流动性并提取相应资产的唯一质押凭证。此时攻击者剩余 20,871 枚ETH(包含交易手续费);

在 UniswapV2 中抵押 107,000 枚CHEESE 和 78 枚ETH 提供交易流动性

据悉,Cheese Bank 于今年10月推出借贷协议 2.0 版本,2.0 版本支持创新的流动性凭证(LP Tokens)抵押借贷功能。攻击者在上一步获取 UNI_V2 LP 凭证,有利于他接下来在 Cheese Bank 上贷出其他加密资产。

攻击者进一步把所获取的抵押品 UNI_V2 LP 凭证转换为 sUSD_V2 凭证,这一步有利于攻击者以 UNI_V2 LP 凭证作为抵押品在 Cheese Bank 上贷出稳定币;

把所获取的抵押品 UNI_V2 LP 凭证转换为 sUSD_V2 凭证

随后,攻击者在 UniswapV2 中将 20,000 枚ETH 兑换为 288,000 枚CHEESE,这一步会影响 UniswapV2 上 CHEESE 池子的平衡,进而抬高 CHEESE 的价格,此时 CHEESE 的单价为 0.069 ETH/枚(相较于此前 0.00047 ETH/枚的价格提高了145倍),攻击者剩余 871 枚ETH(包含交易手续费)。CHEESE 单价的提高能够有效地提升抵押在 Cheese Bank 中 UNI_V2 LP 的价值,帮助攻击者提高在 Cheese Bank 中借贷加密资产的额度。值得注意的是,Cheese Bank 以流动性矿池 UNI_V2-CHEESE-ETH 中 WETH 的数量来衡量所对应的 UNI_V2 LP 凭证的价格,攻击者通过提高 UNI_V2 LP 凭证的价格能有效地贷出更多 USDC 、USDT 、DAI 。

抬高 CHEESE 的价格

在这一步中,攻击者通过重置喂价预言机来操纵 UNI_V2 LP 凭证的价格,从下列公式可知,UNI_V2 LP 的价格受到流动池中 WETH 的数量和 UNI_V2-USDT-ETH 池中 ETH价格的影响,即 WETH2ETH的价格=LP总价,LP单价=LP总价/LP总供应量,当攻击者将增加池中 WETH 的数量时,UNI_V2 LP 凭证的价格也会上涨。

重置喂价预言机来操纵 UNI_V2 LP 凭证的价格

攻击者就是通过上一步,即提高 UNI_V2 LP 凭证的价格来贷出价值 330 万美元的 USDC 、 USDT 和 DAI,并顺利从 Cheese Bank 转出,将其纳入囊中,此时,他只需将所贷的 21,000 ETH 还上即可。

据 PeckShield 统计,攻击者共计从 Cheese Bank 中贷出 2 百万枚USDC, 123 万枚USDT 和 8.7 万枚 DAI 。

从 Cheese Bank 中贷出 2 百万枚USDC

共计 2 百万枚USDC, 123 万枚USDT 和 8.7 万枚 DAI

并将这笔攻击所获资产从 0x02b7 的地址中分批转出。

最后,攻击者在 Uniswap V2 上将 288,000 枚CHEESE 转换为 19,980 枚ETH (包含手续费),为补足所贷的 21,000 枚ETH,他将 58,000 枚 USDC 转换为 132 ETH ,再加上剩余的 871 枚ETH(包含交易手续费)归还给 dYdX 闪电贷,一切就好像没有发生过一样。

归还 dYdX 闪电贷

Last updated