DeFi項目Yearn Finance被盜超1000萬美元,攻擊過程梳理
BlockBeats 律動財經 2023-04-14 12:00
2023 年 4 月 13 日,據 Beosin-Eagle Eye 態勢感知平台消息,Yearn Finance 的 yusdt 合約遭受駭客閃電貸攻擊,駭客獲利超 1000 萬美元。
關於本次事件,Beosin 安全團隊在白天已將簡析以快訊的形式分享給大家,現在我們再將長文分享如下:
事件相關資訊
攻擊交易
0xd55e43c1602b28d4fd4667ee445d570c8f298f5401cf04e62ec329759ecda95d
0x8db0ef33024c47200d47d8e97b0fcfc4b51de1820dfb4e911f0e3fb0a4053138
0xee6ac7e16ec8cb0a70e6bae058597b11ec2c764601b4cb024dec28d766fe88b2
攻擊者地址
0x5bac20beef31d0eccb369a33514831ed8e9cdfe0
0x16Af29b7eFbf019ef30aae9023A5140c012374A5
攻擊合約
0x8102ae88c617deb2a5471cac90418da4ccd0579e
攻擊流程
下面以
0xd55e43c1602b28d4fd4667ee445d570c8f298f5401cf04e62ec329759ecda95d 為例進行分析。
1. 攻擊者首先通過閃電貸借出了 500 萬 Maker: Dai Stablecoin、500 萬 USD 以及 200 萬 Tether: USDT Stablecoin 作為攻擊本金。
2. 攻擊者調用 aave 池子合約的 repay 函數償還其他人的欠款,這一步是為了將 aave 池子抵押收益降低,從而降低 yearn:yUSDT Token 合約中 aave 池子的優先級(yearn: yUSDT Token 合約會根據收益情況判斷將資金投入哪個池子)。
3. 接着攻擊者調用 yearn: yUSDT Token 合約的 deposit 函數質押了 90 萬 Tether: USDT Stablecoin,該函數會根據質押量為調用者鑄相關數量的 yUSDT,計算方式與池子中各種代幣餘額有關,如下圖,此時為攻擊者鑄了 82 萬的 yUSDT。
4. 此時,合約中有 90 萬 Tether: USDT Stablecoin 與 13 萬 Aave: aUSDT Token V1
5. 接下來攻擊者使用 15 萬 USD 兌換了 15 萬的 bZx USDC iToken,並將其發送給了 yearn: yUSDT Token 合約,此時,合約中有 118 萬的資金,攻擊者擁有 90/103 的市佔率,也就是能提取 103 萬資金。
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。
7. 隨後,攻擊者調用 yearn: yUSDT Token 合約的 rebalance 函數,該函數會將當前池子的代幣提取出來,並質押到另一個收益更高的池子中,由於第 2 步操作,合約會將 USDT 和 USDC 提取出來,添加到收益更高的池子中,但當前合約僅有 bZx USDC iToken,也只能提取出 USDC,提取出來後將復投到其他 USDT 池子,此時復投將跳過。
8. 攻擊者向池子中轉入 1 單位的 Tether: USDT Stablecoin,並再次調用 yearn: yUSDT Token 合約的 deposit 函數質押了 1 萬 Tether: USDT Stablecoin,由於第 7 步的操作,合約已經將所有池子中的資金全部取出來了,並且沒辦法添加到新池子中,導致 pool 這個變量計算出來就是攻擊者向其中打入的 1,而作為除數的 pool,將計算出一個巨大的值,向攻擊者鑄了 1.25*10^15 枚 yUSDT。
9. 最後,攻擊者利用 yUSDT 將其他穩定幣全部兌換出來並歸還閃電貸。
漏洞分析
本次攻擊主要利用了 yUSDT Token 合約配置錯誤,在進行 rebalance 重新選擇池子的時候,僅使用了 USDT(token 為 USDT)作為添加數量,而 USDC 無法添加池子,從而導致了攻擊者使用 USDC 將該合約所有 USDT「消耗掉」後,池子餘額變為了 0,從而鑄了大量的代幣。
資金追蹤
截止發文時,Beosin KYT 反洗錢分析平台發現被盜資金 1150 萬美元部分已經轉移到 Tornado cash,其餘還儲存在攻擊者地址。
總結
針對本次事件,Beosin 安全團隊建議:初始化配置時進行嚴格檢查。同時項目上線前建議選擇專業的安全審計公司進行全面的安全審計,規避安全風險。
暢行幣圈交易全攻略,專家駐群實戰交流
▌立即加入鉅亨買幣實戰交流 LINE 社群(點此入群)
不管是新手發問,還是老手交流,只要你想參與虛擬貨幣現貨交易、合約跟單、合約網格、量化交易、理財產品的投資,都歡迎入群討論學習!
- 從零開始學合約系列講座熱烈報名中
- 掌握全球財經資訊點我下載APP
文章標籤
上一篇
下一篇