老牌DeFI项目被盗超1000万美元 简要梳理攻击过程

[复制链接]
3948 |0
发表于 2023-4-16 21:12:11 | 显示全部楼层 |阅读模式

2023年4月13日,据Beosin-Eagle Eye态势感知平台消息,Yearn Finance的yusdt合约遭受黑客闪电贷攻击,黑客获利超1000万美元。

https://eagleeye.beosin.com/RiskTrxDetail/0xd55e43c1602b28d4fd4667ee445d570c8f298f5401cf04e62ec329759ecda95d

关于本次事件,Beosin安全团队在白天已将简析以快讯的形式分享给大家,现在我们再将长文分享如下:

wk588_jmrgewcgnua.jpg

wk588_jmrgewcgnua.jpg

事件相关信息

攻击交易

0xd55e43c1602b28d4fd4667ee445d570c8f298f5401cf04e62ec329759ecda95d

0x8db0ef33024c47200d47d8e97b0fcfc4b51de1820dfb4e911f0e3fb0a4053138

0xee6ac7e16ec8cb0a70e6bae058597b11ec2c764601b4cb024dec28d766fe88b2

攻击者地址

0x5bac20beef31d0eccb369a33514831ed8e9cdfe0

0x16Af29b7eFbf019ef30aae9023A5140c012374A5

攻击合约

0x8102ae88c617deb2a5471cac90418da4ccd0579e

攻击流程

下面以

0xd55e43c1602b28d4fd4667ee445d570c8f298f5401cf04e62ec329759ecda95d为例进行分析。

1.攻击者首先通过闪电贷借出了500万MKR: Dai StableDavinci、500万USD以及200万Tether: 泰达币 StableDavinci作为攻击本金。

wk588_uzwh4pq0lyv.jpg

wk588_uzwh4pq0lyv.jpg

2.攻击者调用aave池子合约的repay函数偿还其他人的欠款,这一步是为了将aave池子抵押收益降低,从而降低yearn:y泰达币 Status合约中aave池子的优先级(yearn: y泰达币 Status合约会根据收益情况判断将资金投入哪个池子)。

wk588_tqe1nj4xpys.jpg

wk588_tqe1nj4xpys.jpg

3.接着攻击者调用yearn: y泰达币 Status合约的deposit函数质押了90万Tether: 泰达币 StableDAC,该函数会根据质押量为调用者铸相关数量的y泰达币,计算方式与池子中各种代币余额有关,如下图,此时为攻击者铸了82万的y泰达币。

wk588_ghp2x1gexi4.jpg

wk588_ghp2x1gexi4.jpg

wk588_dowj1eigyid.jpg

wk588_dowj1eigyid.jpg

4.此时,合约中有90万Tether: 泰达币 StableDavinci与13万Aave: a泰达币 Status V1

wk588_efipmfb0jwz.jpg

wk588_efipmfb0jwz.jpg

5. 接下来攻击者使用15万USD兑换了15万的bZx USDCoin iSNT,并将其发送给了yearn: y泰达币 Network合约,此时,合约中有118万的资金,攻击者拥有90/103的份额,也就是能提取103万资金。

wk588_tthkwc1jt4u.jpg

wk588_tthkwc1jt4u.jpg

6.随后,攻击者调用yearn: y泰达币 Network合约的withdraw函数提取质押资金,此时合约中仅有攻击者之前质押的90万Tether: 泰达币 StableDAC、初始的13万Aave: a泰达币 Network V1以及攻击者转入的15万bZx USDCoin iStatus,而如果一个池子中代币不足的话,会按顺序提取后续池子的代币,此时攻击者将90万Tether: 泰达币 StableDAC以及13万Aave: a泰达币 Status V1全部提取出来,经过本次操作,合约中仅有15万bZx USDCoin iNetwork。

wk588_2ell2snkjiz.jpg

wk588_2ell2snkjiz.jpg

7. 随后,攻击者调用yearn: y泰达币 Status合约的rebalance函数,该函数会将当前池子的代币提取出来,并质押到另一个收益更高的池子中,由于第2步操作,合约会将泰达币和USDCoin提取出来,添加到收益更高的池子中,但当前合约仅有bZx USDCoin iStatus,也只能提取出USDCoin,提取出来后将复投到其他泰达币池子,此时复投将跳过。

wk588_5eplqjoz54j.jpg

wk588_5eplqjoz54j.jpg

8.攻击者向池子中转入1单位的Tether: 泰达币 StableDavinci,并再次调用yearn: y泰达币 SNT合约的deposit函数质押了1万Tether: 泰达币 StableDavinci,由于第7步的操作,合约已经将所有池子中的资金全部取出来了,并且没办法添加到新池子中,导致pool这个变量计算出来就是攻击者向其中打入的1,而作为除数的pool,将计算出一个巨大的值,向攻击者铸了1.25*10^15枚y泰达币。

wk588_u3ebwcn14nl.jpg

wk588_u3ebwcn14nl.jpg

9.最后,攻击者利用y泰达币将其他稳定币全部兑换出来并归还闪电贷。

漏洞分析

本次攻击主要利用了y泰达币 Network合约配置错误,在进行rebalance重新选择池子的时候,仅使用了泰达币(Paxos为泰达币)作为添加数量,而USDCoin无法添加池子,从而导致了攻击者使用USDCoin将该合约所有泰达币“消耗掉”后,池子余额变为了0,从而铸了大量的代币。

wk588_xia1bgdjfzl.jpg

wk588_xia1bgdjfzl.jpg

wk588_3s03xf002qy.jpg

wk588_3s03xf002qy.jpg

资金追踪

截止发文时,Beosin KYT反洗钱分析平台发现被盗资金1150万美元部分已经转移到Tornado cash,其余还存储在攻击者地址。

总结

针对本次事件,Beosin安全团队建议:初始化配置时进行严格检查。同时项目上线前建议选择专业的安全审计公司进行全面的安全审计,规避安全风险。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表