流動性挖礦(Yield Farming)是近期DeFi領域中的最熱話題,以各種食物爲主題的流動性挖礦似乎每日都能湊成一桌饕餮盛宴,大爆炸式地將新的DeFi概念灌輸給投資者與用戶。

每天新的流動性挖礦項目都會出現,同時舊項目也在退出人們的視野。對於這些項目“新人哪聞舊人哭”的快速交替,身爲以建立區塊鏈健康安全生態爲己任的CertiK,希望給大家帶來更有價值的問題和答案:當我們在討論流動性挖礦項目安全性的時候,討論點和關注點都應該是什麼?

安全這個話題難以簡單概述,非細緻的講解不能窺探一二。

本文在此以Harvest.Finance爲例,分析作爲流動性挖礦項目其存在的安全風險。

Harvest.Finance,它的名字非常直觀的說明了其設計意圖 ——流動性挖礦。

該項目的代碼已經開源,網站社區等也一應俱全。儘管Harvest.Finance的審計報告已公佈,其項目中被審計部分的安全性目前可以被信任,但是這並不能說明Harvest.Finance的整體安全性得到了保障。

CertiK安全研究團隊從該項目智能合約出發,發現了該項目中存在與其他類似流動性挖礦項目同樣的問題:治理中心化,即許多關鍵操作只允許項目管理者來進行,沒有任何對項目限制者的限制手段,例如:

圖1:DelayMinter.sol

參考鏈接:

https://github.com/harvest-finance/harvest/blob/master/contracts/DelayMinter.so

圖2:Governable

參考鏈接:

https://github.com/harvest-finance/harvest/blob/master/contracts/Governable.sol

圖3:Storage.sol

參考鏈接:

https://github.com/harvest-finance/harvest/blob/master/contracts/Storage.sol

圖1中第102行起的函數executeMint()的功能是進行鑄幣操作,由於onlyGovernance的限制,使得只有於onlyGovernance許可的地址可以執行該函數,而onlyGovernance的定義來自於圖2中14行與圖3中27行的代碼,最終從圖3的28行可以看到所謂的“Governance”其實僅是指項目擁有者本身,並不是如名稱所暗示指代一個管理委員會。

通過觀察代碼可以瞭解到,該項目的治理與重要操作的控制權都被項目管理者據有,中心化程度極高,而這一點明顯違背了以去中心化爲基本的流動性挖礦項目的本質。

即便項目管理者加入了一個延遲操作的功能,並設置了每一個鑄幣操作都需要提前公佈給社區,這依舊無法從根本上解決問題。尤其是當Harvest.Finance項目把延遲的時間期限設置爲12個小時,這也違背了大部分人的作息規律。

除了項目的治理中心化程度過高的通病,流動性挖礦項目同樣存在被套利攻擊的風險。

套利攻擊是利用價格差進行低買高賣完成的以獲利爲目的的交易行爲。已經發生過套利攻擊的著名項目有Balancer和bZx。

10月26日Harvest.Finance項目也發生了套利攻擊事件,損失超3380萬美元。

對於此類攻擊,需要弄清兩個問題:

1. 發生套利攻擊的條件是什麼?

2. 爲什麼Harvest.Finance項目滿足了這些條件?

發生套利事件需要的條件其實非常直觀:可以完成低買高賣。

簡化來說就是可以通過自己的交易或者操作來影響交易物的價格。

這種交易影響價格的手段可以是直接改變,也可以是改變交易物的數目來間接的影響價格。

流動性挖礦項目自身通過交易來鑄幣或者燃燒幣的操作,十分容易滿足改變交易物的操作要求。

一旦套利攻擊者發現了可利用的攻擊點,可以在沒有風險的情況下當即利用閃電貸借取大額資金,將套利攻擊的獲利擴大。

圖4:Harvest.Finance套利攻擊的交易之一

參考鏈接:

https://etherscan.io/tx/0x35f8d2f572fceaac9288e5d462117850ef2694786992a8c3f6d02612277b0877

圖4所示交易是在此次發生於Harvest.Finance項目的套利攻擊的其中一筆交易,攻擊者通過查看該項目智能合約中控制鑄造fUSDC代幣數目的函數,發現鑄造的代幣數目依賴於其參考的Curve項目的計算公式,繼而依靠閃電貸獲得大量初始資金進行套利攻擊。

攻擊者的執行交易的流程大致如下:

1. 閃電貸借貸得到大筆USDC和USDT;

2. 利用借貸所得USDT通過Curve轉換爲USDC,提高USDC價格 ;

3. 將獲得的USDC存入Harvest.Finance項目的USDC儲藏室(vault)中, 同時Harvest.Finance會爲該存入的行爲攻擊者鑄造一定數目的fUSDC(鑄造的數目受Curve影響);

4. 將初始借貸所得的USDC通過Curve轉換爲USDT,提高USDT的價格,同時USDC價格降低 ;

5. 最終攻擊者將持有額所有fUSDC轉換回USDC,此時因爲Curve中的USDC價格降低,導致影響了兌換回USDC的數目增加。

最終攻擊者利用類似操作,完成了14筆利用針對USDC的套利交易,然後利用同樣的思路,針對USDT完成了另外13筆套利交易。

根據官方報告,計算了攻擊者返還給項目的1300萬USDC和11萬USDT之後,總損失超過2億人民幣。

在Harvest.Finance這次的套利攻擊事件中,攻擊者通過影響USDC、USDT代幣的價格來進行套利。

因此,項目代幣價格不能簡單的依賴於其相對數目,而應該穩定建立於實時、有效、可靠的價格提供系統之上。例如目前的chainlink的價格預言機便可以一定程度上解決此類隱患。

當討論一個流動性挖礦項目的安全性時,不應僅僅簡單的查看程序代碼、智能合約的安全,而需要查看更加深層的、邏輯性的漏洞,例如治理中心化以及代幣價格控制邏輯可能導致的套利攻擊風險。

傳統的代碼審計並不適合包括流動性挖礦在內的區塊鏈項目。

面對此類項目,需要有經驗豐富的區塊鏈項目專業審計人員,從傳統代碼審計、邏輯審計、金融模型審計等多角度對項目的安全進行逐步且完備的審覈,纔可確保項目的安全。

迄今爲止,CertiK已爲超過200名機構用戶提供了優質服務,保護了超過80億美元的數字資產與軟件系統免受安全損失。

歡迎搜索微信【certikchina】關注CertiK官方微信公衆號,點擊公衆號底部對話框,留言免費獲取諮詢及報價!

相關文章