一、事件概覽

北京時間2021年2月27日,【鏈必安-區塊鏈安全態勢感知平台(Beosin-OSINT)】輿情監測到,DeFi知名項目Yeld.finance官方發出通告,表示該項目的DAI池遭受到閃電貸攻擊,原文鏈接如下: yeldf.medium.com/the-ye

成都鏈安(Beosin)安全團隊第一時間介入響應,對原文中所提及的交易(0x57b378f8d20d3945ab40cd62aa24063f375bcfc5693c2e788dc193ffa1a5cc3a)進行分析。經分析後發現,該筆交易為Yeld.finance項目自身的策略機製而導致的資金轉移,與閃電貸攻擊無關。閃電貸攻擊表示不背這個鍋。

二、事件分析

圖1 交易信息

如圖1所示,該筆交易是名為0xf0f225e0的用戶,調用了0xe780cab7ca8014543f194fc431e6bf7dc5c16762合約的deposit函數。經確認,0xef80cab7合約正是項目方的DAI池。該筆交易一共產生了6筆代幣轉移,分別用T1到T6表示。那麼,這些代幣轉移究竟是什麼操作導致的呢?下面通過代碼進行分析:

圖2 deposit函數源代碼

很明顯,第538行代碼,產生導致了序號為T1的代幣轉移,將token(即DAI)轉移到yDAI合約。這是一筆普通的代幣轉賬,表示用戶存入了9,377 DAI到yDAI合約。

第541-553行代碼,是yDAI合約用於計算用戶存入的DAI應返回給用戶多少yDAI,並在第554行進行鑄幣,對應序號為T2的代幣轉賬,表示yDAI合約向用戶鑄了9,306 yDAI。

然後進入第555行的rebalance函數,分析該函數的邏輯。

圖3 rebalance函數源碼

圖4 recommend函數

第732行代碼會計算newProvider,該函數會調用recommend函數(如圖4所示),recommend函數會調用IEarnAPRWithPool合約查詢4個Defi項目DYDX,COMPOUND,AAVE,FULCRUM中,年利率(APR)最高的項目,查詢結果如圖5所示:

圖5 recommend查詢結果

其中dYdX池的APR最高,newProvider被設置為dYdX池。當前池為AAVE池,進入736行的if代碼塊,調用內部函數_withdrawAll。

圖6 _withdrawAll函數源代碼

第778行代碼將會提出AAVE池中的所有DAI,產生了序號為T3-T5的代幣轉移,具體代碼可參考AAVE(0xfC1E690f61EFd961294b3e1Ce3313fBD8aa4f85d)合約redeem函數相關代碼,此處不再詳述。

最後是第741行代碼,將從AAVE中提出的16.6餘萬枚DAI存入dYdX合約,產生了序號為T6的代幣轉移,即將16.6萬枚DAI存入dYdX池。

整個交易就此結束,可以看到,這次所謂的“閃電貸攻擊”只是虛驚一場。用戶只是單純的存入了一筆DAI,然後剛好觸發了Yeld.finance項目的策略機制,並不是所謂的“閃電貸攻擊”,可謂是鬧了場烏龍事件。值得注意的是,dYdX在該事件中充當了一個“良心商家”的角色,並不是以往閃電貸攻擊中的幫兇。

三、安全建議

儘管本次事件經成都鏈安(Beosin)安全團隊分析後被判斷為虛假一場,但在這裡還是有必要提醒各項目方,依然需要在日常的安全防護工作中,對閃電貸攻擊加以預警和防範。

同時,作為致力於區塊鏈生態安全建設的成都鏈安(Beosin)也在此建議,項目方的安全預警機制和安全加固工作切不可等閒視之。尋求第三方安全公司的力量,搭建覆蓋全生命週期的一站式安全解決方案方為萬全之策。