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

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)安全團隊認為,很大程度上源於項目方潛在的合約漏洞未得到全面的安全排查,進而導致閃電貸攻擊事件的發生。

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

分享至:

作者:Beosin

本文為PANews入駐專欄作者的觀點,不代表PANews立場,不承擔法律責任。

文章及觀點也不構成投資意見

圖片來源:Beosin如有侵權,請聯絡作者刪除。

關注PANews官方賬號,一起穿越牛熊
PANews APP
川普金卡計畫僅1人獲批,先前宣稱已售13億美元名額
PANews 快訊