成都鏈安:DeFi專案Yearn Finance閃電貸攻擊事件分析


一、事件概覽

北京時間2021年2月5日,【鏈必安-區塊鏈安全態勢感知平臺(beosin-osint)】輿情監測到,defi知名專案yearn finance發生閃電貸攻擊事件。

簡言之,本次攻擊事件的具體手法為攻擊者利用閃電貸借取鉅額資金,而後進行迴圈套利。根據成都鏈安(beosin)安全團隊的響應和分析,本次攻擊事件的合約為yvalut+curve pool。

二、事件分析

1.攻擊者在yvault合約中存入dai,並呼叫earn觸發yvalut向流動性池使用dai新增流動性,如下圖所示:



上圖紅框顯示,在進行鑄幣時,需要讀取合約中的dai餘量,但因為策略合約中的dai已經抵押至curve合約進行盈利,所以要計算dai代幣的量,只能透過價值換算,計算出所持有的curve代幣能夠兌換的dai的量。

2.攻擊者利用借來的資金向流動性池使用usdt新增流動性,獲得curve代幣,如下圖所示:


這裡值得注意的是,攻擊者向池中注入的是單一的usdt,因為池子的特性,我們知道,當一種代幣的含量上升,其相對價格也就下降。

3.攻擊者取出yvalut合約中存入的dai,如下圖所示:



根據#2可知,此時的池子中因為usdt的含量增加,所以dai的相對價格是上升的,這也就導致攻擊者所持有的curve代幣兌換出的dai相對下降,池子中將會餘留少量dai。

4.攻擊者指定與新增流動性時相等的usdt數量,進行流動性移除,注意這裡因為#3時將一部分dai取走,所以usdt的相對#2時價格下降,所以這裡將餘下一部分curve代幣.


不斷進行上述迴圈,這使得攻擊者消耗dai進而獲取curve代幣。

經過多次迴圈之後,攻擊者套取了大量的curve代幣,而將dai代幣打入了curve合約中。在整個攻擊流程結束時,攻擊者使用curve代幣,兌換出dai/usdc。

這次兌換,因為不是usdt的兌換,即使此時的dai相對攻擊前含量較高,也會按照同等比例進行兌換,也就是攻擊者打入curve池子中多出的dai代幣,也會分發給攻擊者。

這裡,我們再來看攻擊者在進行攻擊時的第一步操作,如下圖所示:



攻擊者利用閃電貸向池子中新增了巨量的流動性,這就導致這些多出的dai,最終將會大部分分給攻擊者。

而除去這一部分損失,攻擊者還獲得了更多的curve代幣,從而獲利。

三、安全建議

針對本次事件,成都鏈安(beosin)安全團隊認為,很大程度上源於專案方潛在的合約漏洞未得到全面的安全排查,進而導致閃電貸攻擊事件的發生。

在此,成都鏈安需要提醒區塊鏈各生態專案方,切不可因專案上線完成之後就掉以輕心,做好日常的安全排查和安全加固等工作,尋求第三方安全公司的力量,建立一整套的安全防護機制,防範於未然。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读