闪电贷套利模型

模型1 使用交易所原本差价

参见之前的文章

模型2 使用抵押品不足未爆仓–头寸健康度

Bzx事件( 0xb5c8bd9430b6cc87a0e2fe110ece6bf527fa4f170a4bc8cd032f768fc5219838 )

攻击流程:

1
2
3
4
[BTC吸筹]
第一步,从dYdX中借出了10,000个ETH。

第二步,当“攻击者”拿到10,000个ETH后,它将其中5,500个ETH存入Compound作为抵押品,并借出112个wbtc。这112wbtc为后续抛售做准备。

1616746978201

1
2
3
4
[BTC拉升]
第三步,将1,300个ETH存入bZX,发起bZx保证金交易,借入5637.6个ETH,并通过Kyber的Uniswap储备库,兑换获得51.3个wbtc,导致产生极大的滑点。

第四步,wbtc的价格在Uniswap上被拉高3倍多,然后攻击者将从Compound借来的112wbct抛售,这导致产生6871.4个ETH的回报。

1616747010642

1
2
[清算]
第五步,攻击者归还10,000ETH的dYdX闪贷。那么,这时攻击者的余额有71.4ETH。其中的6871.4ETH和未动用的3200ETH,加起来一共是10,071.4ETH。因此,偿还闪贷后,还剩余71.4ETH。此外,攻击者还剩余Compound和bZx的头寸,其中Compound里有5,500WETH抵押品和112wbtc债务,bZx有4337WETH债务和51wbtc的抵押(bZx部分无法提取)。根据市场价格,攻击者可以用大约4300ETH便可兑换出112wbtc,那么,也就是说攻击者归还112wbtc(用4300ETH左右)换回5500WETH,也就是1200ETH,那么加上之前71.4ETH,攻击者大约获利1,271.4个ETH,按照当时ETH280美元左右的价格,攻击者大约获利在35万美元左右。

本步骤如果1300ETH抵押物不足导致bzx爆仓、那么攻击者将不会得到51.3wbtc这么多。按理5倍杠杆,BTC如果下降20%则会爆仓。但这里未在中途爆仓。

1616747026364

产生原因

Uniswap中的WBTC/ETH价格是如何被操纵至高达61.4的利润? ( WBTC/ETH的价格甚至在正常市场价格仅为38左右时==>被推高到了109.8 )

bzx为何在抵押物不足时仍继续砸盘?

跟进 _borrowTokenAndUse 函数,如果已质押,则 amountIsADeposit 为true,这时候会调用 _getBorrowAmountAndRate 返回借贷率

1616751966794

返回的borrowAmount将会存入sentAmounts[1] ,并更新 sentAmounts[6]

然后后续进入 _borrowTokenAndUseFinal

1616752165377

看一下_borrowTokenAndUseFinal ,该方法对 sentAmounts 和 sentAddresses 进行检查后进入 takeOrderFromiToken 来返回借款量

1616752387274

然后执行部分进入 **bZxContract . takeOrderFromiToken() **

然而该处的shouldLiquidate 逻辑错误导致流动性检查被跳过

1616753014118

在shouldLiquidate 中使用return返回流动性是否充足。返回false但是却不能阻止require的通过。

总结

这是一次利用杠杆抵押率不足检查绕过的漏洞来进行多倍砸盘导致的闪电贷攻击

模型3 以子之矛、攻子之盾

Bzx事件2( 0x31e085afd48a1d6e51cc193153d625e8f0514c7f )

( 0x4cb01bd05e4652cbb9f312ae604f4549d2bf2c99 )

攻击流程:

1
2
3
4
5
[sUSD吸筹]
第一步,从bzx中借出了7500个ETH。

第二步,当“攻击者”拿到7500个ETH后,它将其中900个ETH存入在Kyberswap换出sUSD(156,003个)
(6000-2486)个ETH存入Synthetic Depot换出sUSD(94 3,837个)

1616985909391

1
2
3
4
[以拉升的价值抵押取出原代币]
第三步,100万个 sUSD抵押回bZx,然后向bZx借款6796个 ETH。
目前剩余(7,500—900—6,000)+2,482=3,082 ETH + 6796ETH =9878个ETH
第四步,将7,500 个ETH归还给bZx,获利2,378 个ETH的利润。

1616985968455

产生原因

(bzx使用 Kyberswap 作为价格更新端)、攻击者使用bzx闪电贷去将源头的价格进行改变。

进而充分拉升源头sUSD价值、同时进行价格更新后抵押sUSD取出更多的需归还的ETH代币

总结

这是一次利用源头价值更新不完整设计缺陷来进行自我砸盘导致的闪电贷攻击,价值更新未完全同步。

本文标题:闪电贷套利模型

文章作者:

发布时间:2021年03月26日 - 14:48:15

最后更新:2021年03月29日 - 11:04:32

原始链接:http://laker.xyz/2021/03/26/%E9%97%AA%E7%94%B5%E8%B4%B7%E5%A5%97%E5%88%A9%E6%A8%A1%E5%9E%8B/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。