鸵鸟区块链

SharkTeam独家分析 | 闪电贷攻击:Indexed Finance被黑事件分析

SharkTeam 2021-10-17 10:05
摘要:

闪电贷攻击:Indexed Finance被黑事件分析

北京时间2021年10月15日凌晨2:38分(UTC+8),Indexed Finance遭受闪电贷攻击,代币价格断崖式下跌。攻击者利用了该项目数字资产价格计算公式的缺陷实施了攻击,获利高达1600万美元。

image.png

SharkTeam第一时间对此事件进行了攻击分析和技术分析,并总结了安全防范手段,希望后续的区块链项目可以引以为戒,共筑区块链行业的安全防线。

一、事件分析

交易地址

0xbde4521c5ac08d0033019993b0e7e1d29b1457e80e7743d318a3c27649ca4417

黑客地址

0xba5ed1488be60ba2facc6b66c6d6f0befba22ebe

攻击合约地址

0xfbc2e6b188013fc5eacd9944e6b8ced2c467464a

其根本原因在于更新索引池采用的策略不当,攻击者能够通过操纵SUSHI Token的初始权重,使得添加流动性能够获得远高于正常情况的LP Token最终获利。

交易明细

1.攻击者首先调用reindexPool函数。通过调用MarketCapSqrtController合约(0x120c6956d292b800a835cb935c9dd326bdb4e011)获取当前前五的Token。

image.png

当前排名前五的Token为UNI,AAVE,CRV,COMP,SUSHI(新增)。

image.png

下面是函数调用及对绑定Token的逻辑解释。

image.png

reindexPool函数具体代码如下图。当我们调用reindexPool函数时,MarketCapacity 会根据tokens的地址作为参数调用对应池中的 reindexTokens。如果前五的Token发生变化(新Token排名上升到前五),DEFI5则会在原有的基础上绑定上新Token。

image.png

reindexTokens代码如下图,只允许MarketCapSqrtController.reindexPools调用reindexTokens函数。

image.png

注意DEFI5只允许reindexTokens函数通过_bind绑定新Token。

image.png

但此时(绑定SUSHI Token后)并不能使用SUSHI进行交易,因为要求record.ready=true,此时为false。只有下图中条件成立后,Token就被视为已初始化,可以由矿池买卖。这一步骤为后面的攻击打下了基础。

image.png

2.从SushiSwap平台闪电贷获取指定的Token

61fcc98db2c158dcbdb1d4f1a5ce08b.png

3.将闪电贷获取的资金通过调用DelegateCallProxyManyToOne.swapExactAmountIn函数全部兑换成UNI Token(池中 UNI 的数量减少),使得poolValue值减少(UNI实际上是池中的first Token,由于poolValue是通过first Token来计算的,攻击者通过操纵UNI的数量进而控制poolValue的值,计算公式见步骤4)。

3.1 AAVE

ccc4a29c1aa4c4f5080816937278c68.png

以下面框中为例,从DEFI5 Token池中,最终将闪电贷借出的AAVE全部兑换成UNI Token(其余Token同理)

image.png

3.2 COMP

1c219e2f1b98b82d2dbcf461ef9dda9.png

3.3 CRV

2fef298bb939d52ed2de0a6a7170260.png

3.4 MKR

21d7e09a9a9cc6986f00e64be9232ca.png

3.5 MKR

5cee029c1588f466bdf3c206aba9191.png

4.调用MarketCapSqrtController.updateMinimumBalance函数设置 SUSHI 在DEFI5中的 minimumBalance。

image.png

image.png

官方说明:为了防止最低余额与索引池的1%的价值相差甚远,以至于没有人愿意将其交换到池中,控制器通过函数updateMinimumBalance来重置未初始化Token的虚拟余额。

image.png

image.png

image.png

其计算totalsupply的公式如下:

357189ae472c5b28911e8930ca16cbe.png

由于其中是根据first Token的流动性来估算整个池子的价值,其公式又可以视为:

d9d57a0111713c8661b6b7af0e08645.png

即攻击者可以通过操纵poolValue的值来间接操纵minimumBalance的值,进而控制新Token的初始权重,其公式见步骤5。

5.通过调用DelegateCallProxyManyToOne.joinswapExternAmountIn 函数将swap得到的UNI token添加到池中以提供流动性,获取LP token:DEFI5

image.png

c59979d5595225c4dc3a9f67853c633.png

6.使用闪电贷借取SUSHI Token,将其添加至DEFI5,然后调用gulp函数对SUSHI进行初始化,由于先前的步骤操纵了SUSHI的minimumBalance(令其变得极小),SUSHI初始权重(denorm)会非常大。

image.png

6dee5fe5627ef25f122810b40d4d924.png

gulp函数用来对新Token进行初始化并计算初始权重。定义由下图所示。

image.png

我们可以看到,计算初始权重denorm的公式为

eed25ae2fbb3e405c8e38a0c31adbe0.png

可以看到当minimumBalance越小,其初始权值enorm越大。

7. 通过exitPool函数将之前获得的LP Token换回underlying Tokens (UNI, AAVE, COMP, SNX, CRV, MKR, SUSHI)

image.png

81d1f5b319dd709ab2ffc4d076196c3.png8.将SUSHI兑换为DEFI5,由于SUSHI初始权重极高,使得兑换获得的DEFI5的价值也极高

image.png

964fd0913f04de8967f030b942d172a.png

 9.将所有DEFI5兑换掉,其中5061.099 DEFI5转移至0x78a3ef

image.png

cb563988de9462ece11cdc4c2834d94.png

10. 将SUSHI兑换成DEFI5 

image.png

11.将DEFI5兑换成其他Token

image.png

12.归还闪电贷

image.png

13.将剩余的Token 转移至黑客地址

image.png

二、安全建议

此次事件是又一次与闪电贷有关的安全事件,DeFi项目的业务逻辑设计复杂,涉及的经济学计算和参数较多,却不同项目和协议之间可组合性极其丰富,很难预测,非常容易出现安全漏洞。如下表,利用闪电贷这种新型产品进行攻击的DeFi事件在过去的一年里层出不穷,已增加到45起。通常闪电贷攻击包括“哄抬套利”、“操纵预言机”、“重入攻击”和“技术漏洞”四种,本次属于基于利用“技术漏洞”进行的闪电贷攻击。

image.png

SharkTeam提醒您,在涉足区块链项目时请提高警惕,选择更稳定、更安全,且经过完备多轮审计的公链和项目,切不可将您的资产置于风险之中,沦为黑客的提款机。而作为项目方,智能合约安全关系用户的财产安全,至关重要!区块链项目方应与专业的安全审计公司合作,进行多轮审计,避免合约中的状态和计算错误,为用户的数字资产安全和项目本身安全提供保障。

SharkTeam作为领先的区块链安全服务团队,为开发者提供智能合约审计服务。智能合约审计服务由人工审计和自动化审计构成,满足不同客户需求,独家实现覆盖高级语言层、虚拟机层、区块链层、业务逻辑层四个方面近两百项审计内容,全面保障智能合约安全。

image.png

==

和2万人一起加入鸵鸟社群

添加QQ群:645991580

添加TG群:鸵鸟中文社区 https://t.me/tuoniaox

声明: 鸵鸟区块链所有发布内容均为原创或授权发布,如需转载,请务必注明文章作者以及来源:鸵鸟区块链(微信公众号:MyTuoniao),任何不尊重原创的行为鸵鸟区块链都将进行责任追究!鸵鸟区块链报道和发布内容,不构成任何投资建议。

SharkTeam

——

73 篇 作品