原文:《被盜超1000萬美元,Yearn Finance如何被黑客“盯上”?

2023年4月13日,據Beosin-Eagle Eye態勢感知平台消息,Yearn Finance的yusdt合約遭受黑客閃電貸攻擊,黑客獲利超1000萬美元。

老牌DeFi項目Yearn Finance被盜超1000萬美元,簡要梳理攻擊過程 https://eagleeye.beosin.com/RiskTrxDetail/0xd55e43c1602b28d4fd4667ee445d570c8f298f5401cf04e62ec329759ecda95d

關於本次事件,Beosin安全團隊在白天已將簡析以快訊的形式分享給大家,現在我們再將長文分享如下:

老牌DeFi項目Yearn Finance被盜超1000萬美元,簡要梳理攻擊過程

事件相關信息

攻擊交易

0xd55e43c1602b28d4fd4667ee445d570c8f298f5401cf04e62ec329759ecda95d

0x8db0ef33024c47200d47d8e97b0fcfc4b51de1820dfb4e911f0e3fb0a4053138

0xee6ac7e16ec8cb0a70e6bae058597b11ec2c764601b4cb024dec28d766fe88b2

攻擊者地址

0x5bac20beef31d0eccb369a33514831ed8e9cdfe0

0x16Af29b7eFbf019ef30aae9023A5140c012374A5

攻擊合約

0x8102ae88c617deb2a5471cac90418da4ccd0579e

攻擊流程

下面以

0xd55e43c1602b28d4fd4667ee445d570c8f298f5401cf04e62ec329759ecda95d為例進行分析。

1.攻擊者首先通過閃電貸借出了500萬Maker: Dai Stablecoin、500萬USD以及200萬Tether: USDT Stablecoin作為攻擊本金。

老牌DeFi項目Yearn Finance被盜超1000萬美元,簡要梳理攻擊過程

2.攻擊者調用aave池子合約的repay函數償還其他人的欠款,這一步是為了將aave池子抵押收益降低,從而降低yearn:yUSDT Token合約中aave池子的優先級(yearn: yUSDT Token合約會根據收益情況判斷將資金投入哪個池子)。

老牌DeFi項目Yearn Finance被盜超1000萬美元,簡要梳理攻擊過程

3.接著攻擊者調用yearn: yUSDT Token合約的deposit函數質押了90萬Tether: USDT Stablecoin,該函數會根據質押量為調用者鑄相關數量的yUSDT,計算方式與池子中各種代幣餘額有關,如下圖,此時為攻擊者鑄了82萬的yUSDT。

老牌DeFi項目Yearn Finance被盜超1000萬美元,簡要梳理攻擊過程

老牌DeFi項目Yearn Finance被盜超1000萬美元,簡要梳理攻擊過程

4.此時,合約中有90萬Tether: USDT Stablecoin與13萬Aave: aUSDT Token V1

老牌DeFi項目Yearn Finance被盜超1000萬美元,簡要梳理攻擊過程

5. 接下來攻擊者使用15萬USD兌換了15萬的bZx USDC iToken,並將其發送給了yearn: yUSDT Token合約,此時,合約中有118萬的資金,攻擊者擁有90/103的份額,也就是能提取103萬資金。

老牌DeFi項目Yearn Finance被盜超1000萬美元,簡要梳理攻擊過程

6.隨後,攻擊者調用yearn: yUSDT Token合約的withdraw函數提取質押資金,此時合約中僅有攻擊者之前質押的90萬Tether: USDT Stablecoin、初始的13萬Aave: aUSDT Token V1以及攻擊者轉入的15萬bZx USDC iToken,而如果一個池子中代幣不足的話,會按順序提取後續池子的代幣,此時攻擊者將90萬Tether: USDT Stablecoin以及13萬Aave: aUSDT Token V1全部提取出來,經過本次操作,合約中僅有15萬bZx USDC iToken。

老牌DeFi項目Yearn Finance被盜超1000萬美元,簡要梳理攻擊過程

7. 隨後,攻擊者調用yearn: yUSDT Token合約的rebalance函數,該函數會將當前池子的代幣提取出來,並質押到另一個收益更高的池子中,由於第2步操作,合約會將USDT和USDC提取出來,添加到收益更高的池子中,但當前合約僅有bZx USDC iToken,也只能提取出USDC,提取出來後將復投到其他USDT池子,此時復投將跳過。

老牌DeFi項目Yearn Finance被盜超1000萬美元,簡要梳理攻擊過程

8.攻擊者向池子中轉入1單位的Tether: USDT Stablecoin,並再次調用yearn: yUSDT Token合約的deposit函數質押了1萬Tether: USDT Stablecoin,由於第7步的操作,合約已經將所有池子中的資金全部取出來了,並且沒辦法添加到新池子中,導致pool這個變量計算出來就是攻擊者向其中打入的1,而作為除數的pool,將計算出一個巨大的值,向攻擊者鑄了1.25*10^15枚yUSDT。

老牌DeFi項目Yearn Finance被盜超1000萬美元,簡要梳理攻擊過程

9.最後,攻擊者利用yUSDT將其他穩定幣全部兌換出來並歸還閃電貸。

漏洞分析

本次攻擊主要利用了yUSDT Token合約配置錯誤,在進行rebalance重新選擇池子的時候,僅使用了USDT(token為USDT)作為添加數量,而USDC無法添加池子,從而導致了攻擊者使用USDC將該合約所有USDT“消耗掉”後,池子餘額變為了0,從而鑄了大量的代幣。

老牌DeFi項目Yearn Finance被盜超1000萬美元,簡要梳理攻擊過程

老牌DeFi項目Yearn Finance被盜超1000萬美元,簡要梳理攻擊過程

資金追踪

截止發文時,Beosin KYT反洗錢分析平台發現被盜資金1150萬美元部分已經轉移到Tornado cash,其餘還存儲在攻擊者地址。

總結

針對本次事件,Beosin安全團隊建議:初始化配置時進行嚴格檢查。同時項目上線前建議選擇專業的安全審計公司進行全面的安全審計,規避安全風險。