CertiK安全研究團隊從該專案智慧合約出發,發現了該專案中存在與其他類似流動性挖礦專案同樣的問題:治理中心化,即許多關鍵操作只允許專案管理者來進行,沒有任何對專案限制者的限制手段,例如:
參考連結:
https://github.com/harvest-finance/harvest/blob/master/contracts/DelayMinter.sol
參考連結:
https://github.com/harvest-finance/harvest/blob/master/contracts/Governable.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專案滿足了這些條件?
發生套利事件需要的條件其實非常直觀:可以完成低買高賣。
簡化來說就是可以透過自己的交易或者操作來影響交易物的價格。
這種交易影響價格的手段可以是直接改變,也可以是改變交易物的數目來間接的影響價格。
流動性挖礦專案自身透過交易來鑄幣或者燃燒幣的操作,十分容易滿足改變交易物的操作要求。
一旦套利攻擊者發現了可利用的攻擊點,可以在沒有風險的情況下當即利用閃電貸借取大額資金,將套利攻擊的獲利擴大。
參考連結:
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億美元的數字資產與軟體系統免受安全損失。