CertiK CTO倪兆中博士:《流動性挖礦的安全問題與風險提示》

買賣虛擬貨幣

近幾個月以來,流動性挖礦風靡一時,那麼流動性挖礦是否能夠持久?究竟是曇花一現還是星星之火?

為此,金色財經舉辦了一系列以DeFi為主題的《金色百家談》線上直播節目。

“大流行”的背後,是否有一些人們難以察覺的風險?

CertiK CTO倪兆中博士,於9月10日直播中發表了以《金色百家談 | 流動性挖礦的安全問題與風險提示》為主題的直播演講,為大家詳細解析了流動性挖礦的安全問題,並闡述了關於風險防範的真知灼見。

以下是直播節目的全程文字回顧。

流動性挖礦的市場

Dex也好,流動性挖礦專案也好,本質上都是對金融市場中流動性的爭奪。流動性越多,意味著DeFi市場越繁榮,獲利的機會也就越多。

DeFi市場飆升的同時,諸如Yam Finance、Spaghetti Money、SushiSwap以及Kimchi Finance等流動性挖礦專案也正以鉅額挖礦收益收割著市場上的流動性,並強勢吸引了數十億美元的資產。

然而,流動性挖礦專案火熱的同時,安全和風險問題也層出不窮。冷靜觀察火熱背後的真正原因,有助於幫助我們理解這些安全問題的深層原理,進而幫助我們識別不安全的專案並規避風險。

大量的流動性被收割的背後必然導致其它流動性挖礦或Dex的流動性銳減,這也就是“吸血鬼攻擊”。這些流動性的很大部分來自於其它的Dex或流動性挖礦專案,最終會導致這些失去流動性的專案的衰敗。

因此,對於Dex或者流動性挖礦專案而言,流動性挖礦的整體是一個零和遊戲。為了避免自己成為失去流動性的衰敗專案,新專案只有依靠快速上線、放出巨大收益率等手段來吸引投資者進而攫取利潤,而隨之帶來了許多方面的負面影響——例如,任何區塊鏈專案都應當最為重視的安全問題。

對於投資者而言,面對如雨後春筍般出現的眾多流動性挖礦專案,以及動輒百分之幾千的收益率,很難不被吸引。瘋狂的市場熱度也會影響著投資者的情緒。眾多投資者在這股流動性挖礦的熱潮中,投資著見到的每一個挖礦專案並希望暴富,卻忽視了基本的經濟規律:在資產層面上,金融產品的收益與風險總是成正比的。在流動性挖礦專案市場的整體零和遊戲中,這些“投資者”更像是投機者,安全對於他們而言,是排在利潤之後的考量。

安全問題

答案其實不難得到。誰在這個流動性挖礦熱潮中最有可能受到損失,誰就最應該在乎安全。

專案建立者既可以依靠專案正規經營手段盈利,也可以依靠故意隱藏的漏洞來獲利。早期參與專案的投機者可以透過套利來快速獲利。

而跟隨市場熱度流向、對專案的安全完全沒有進行了解就盲目投資的投資者則會有很大概率成為受害者。作為普通投資者,對將要投資的專案應有足夠的瞭解,尤其是該專案的安全情況。

為了規避風險,及時發現流動性挖礦專案的安全問題,普通投資者可以考慮從以下幾方面進行了解:

程式碼安全:包括專案中所有程式碼的安全,如前端程式碼安全,智慧合約安全等。前端程式碼的漏洞主要在網站以及桌面應用中存在。這些漏洞可能導致DeFi專案網站在遭受DDoS攻擊的時候無法正常訪問,嚴重的甚至可能導致使用者資產被盜。而智慧合約方面的漏洞種類則比較多,從經典的DAO重入攻擊,到DeFi專案Lendf.me的hook重入攻擊,以及當前流動性挖礦專案Yuno和Kimichi中由於智慧合約擁有者許可權過大而可能會導致無限增發代幣的漏洞等。

邏輯安全:包括了金融模型安全、邏輯實現安全等。金融模型方面的近期著名漏洞有7月發生的bZx套利攻擊。邏輯實現方面的漏洞則需要根據檢查專案程式碼是否與專案描述一致。

管理風險:包括專案管理方安全、審計驗證安全等。專案管理方需要檢視專案團隊的行業經驗、既往專案等。而審計驗證安全則需要檢視是否有專業審計公司或者團隊對該專案進行了嚴謹的驗證,以及專案方是否為專案加入保險來確保自身及投資者的資產安全。

程式碼安全

程式碼安全是任何計算機程式都需要關注的問題。智慧合約本質上是一個執行在區塊鏈系統上的計算機程式,其獨特的開放性、透明性則需要更高的程式安全性。近兩個月內,流動性挖礦專案的火熱潮流中,安全問題層出不窮。CertiK安全研究團隊簡要蒐集了一些最近比較熱門的挖礦專案,列表如下:

這些流動性挖礦專案均來自同一個程式碼庫——SushiSwap,甚至某些專案的安全漏洞都是直接複製自其它專案,比如Yuno和Kimchi專案中的無限鑄幣漏洞。

“無限鑄幣漏洞”即為:在專案智慧合約程式碼中,合約擁有者許可權過大,可以任意增發代幣,且沒有任何社羣治理來限制合約擁有者的操作。雖然Yuno和Kimchi的專案方宣佈使用時間鎖對智慧合約加以限制,但這並未從根本上對專案智慧合約本身的漏洞進行修復。

程式碼層面來說,智慧合約中若缺少對專案方的許可權約束,也會帶來安全風險。而制約其許可權的方法包括:

在專案智慧合約內部建立社羣治理投票機制,對操作給出許可。

採用技術手段,分散專案方權力。例如,使用多簽名錢包(在多數人許可的情況下才能夠執行智慧合約層面的操作)的方式來進行操作。

此外,流動性挖礦專案也屬於區塊鏈智慧合約專案,因此傳統智慧合約專案中的安全漏洞也不應忽視,例如重入攻擊(reentrancy attack)或者整數溢位(overflow/underflow)等常見的智慧合約漏洞。

安全檢測方法

隨著技術發展,目前已有許多針對智慧合約安全漏洞的驗證工具,其驗證方式主要可以分為靜態分析、符號化執行、模糊測試等幾類。

靜態分析、符號化執行和模糊測試都存在測試狀態爆炸問題。一旦被檢測的智慧合約較為龐大或有較多迴圈結構,將導致工具無法檢測合約的所有可能路徑。

傳統符號化執行雖然可以透過使用符號化輸入來代替具體輸入值,採用SMT求解器對程式中特定路徑的條件進行求解,來確認該路徑是否會被實際執行,但依舊無法處理大型智慧合約或在合約中的迴圈結構。

當前,在軟體驗證領域,人們已達成某種程度的共識,認為只有形式化驗證(Formal Verification)才能夠徹底解決測試狀態爆炸問題。

形式化驗證可以從兩個層面上對合約進行保證。第一層面是安全無漏洞,即用數學推理的方法,捕捉合約的所有行為,覆蓋所有的執行可能性,從而保證合約沒有漏洞。第二層面是可信,即公開透明。合約的建立者不僅要說明會執行哪些操作,還需要證明其程式碼確實精確執行了這些操作。

經過這兩個層面所驗證過、並證明了安全性的智慧合約,只要原始碼不發生任何變化,就能保證100%安全無漏洞,並且無法被駭客攻破。

這裡簡單解釋一下第一層的數學推理方法。形式化驗證是透過從被檢測的智慧合約中抽象出數學模型並利用證明器對其進行證明的方法。對智慧合約抽象後,便可以利用數學證明的方法處理合約中的迴圈結構,進而將大型程式進一步簡化。因此可以在嚴謹的數學層面上證明智慧合約的安全性和正確性。

而CertiK的安全審計,也採用了這樣的方法,即用形式化驗證將智慧合約轉化為數學模型,透過邏輯推演驗證模型,從而證明合約的安全性。

除此之外,CertiK還開發了基於形式化驗證的程式語言DeepSEA,其編譯器是用Coq,一個機器輔助人工證明工具及語言,編寫並完全證明了正確性的,從而可以確保使用DeepSEA語言編寫的智慧合約不會出現安全漏洞。

今天我們不對形式化驗證進一步展開討論,但是大家可以簡單理解為,這是一種可以從嚴謹的數學邏輯上證明並確保智慧合約中不存在漏洞的方法。

動態檢測

大部分人都知道,智慧合約有著自身一旦部署到鏈上就無法修改的特點,因此任何現有的安全檢查都必須在部署之前完成,而之前提到的安全驗證方法均為鏈下靜態驗證。

在實際中,流動性挖礦專案不僅需要鏈下靜態驗證,還需要“動靜結合”進行安全檢測。這是因為DeFi專案一經發布並運用,智慧合約上線到了真實環境中,未授權的軟體程式和未稽覈的合約就會與之互動。由於這種互動是動態的,因此靜態安全審計再完備也不能百分百確保專案是安全的。

因此,對於使用者和DeFi專案方來說,理想的動態安全檢測工具應當能實時線上判斷要被呼叫的智慧合約是否安全。對於智慧合約的使用者而言,每次只透過呼叫介面(ABI)來呼叫其它智慧合約,是無法瞭解即將被呼叫的智慧合約內部的邏輯情況的,因此時刻都有未知安全風險。如果事前被呼叫的智慧合約沒有經過仔細的安全驗證,則風險將進一步擴大。

換句話說,如果在呼叫外部智慧合約之前,可以先透過鏈上的動態驗證方法來確認該外部合約的安全性,將會極大地提高使用者的使用安全,從而避免因呼叫外部合約而產生未知風險。

我們都知道,靜態驗證可以透過對智慧合約的安全審計來完成。那麼動態檢測應該怎樣進行呢?

就在上週,CertiK Foundation正式釋出了CertiK Security Oracle,即去中心化安全預言機。CertiK預言機可透過實時安全檢測,防止DeFi專案受到惡意攻擊。同時,CertiK預言機可被應用於任何支援智慧合約功能的區塊鏈平臺(如以太坊等)。簡單來說,如果想要為即將進行的交易取得實時的安全資訊,查詢CertiK預言機即可。更多詳情請關注我們的公眾號獲取。

除了程式碼層面的安全,DeFi專案同樣面臨來自其它方面的風險。

其他安全威脅

金融模型安全本身是一個被廣泛關注的話題,而流動性挖礦等DeFi專案本身與傳統金融專案息息相關,因此例如套利、通脹等傳統金融專案中存在的風險,在流動性挖礦中也依舊存在。

例如,在bZx套利事件中,套利者利用了資訊不對稱優勢進行獲利;再比如UniSwap專案,獲利者透過利用比其他投資者提前購買代幣的時間優勢完成套利操作。兩個事件的套利都並不依賴於程式碼層面的漏洞。

邏輯實現安全則需要確保專案描述與實際的專案程式碼邏輯實現一致,以防專案方將與專案不一致的程式碼無意甚至惡意地隱藏在專案程式碼中。

當前區塊鏈行業方興未艾,存在許多不成熟的企業和專案。衡量或評價一個專案的優質與否,很大程度上依賴於專案團隊經驗水平以及專案管理許可權。如果一個匿名團隊擁有很大的專案許可權,該專案就有可能存在風險,甚至由於專案方管理許可權過大而“卷錢跑路”。

個人關於流動性挖礦看法

流動性挖礦,是對DeFi專案前景和落地應用的一次探索。市場規模的迅速壯大以及市場熱度急速上升,都側面反映出探索的成功。然而,某些新專案“剪下-貼上-上鍊”的粗暴流程,與區塊鏈的可信優勢完全背道而馳。為了爭奪流動性(Liquidity),不考慮專案安全就匆忙上鍊,無疑加深了市場對流動性挖礦專案的質疑。

防範建議

CertiK團隊給大家提供以下幾點安全隱患防範建議,作為參考:

首先,投資前評估自己的風險偏好和資金實力。切勿因DeFi專案火熱並且出新頻繁就在短時間內忽略自己對風險偏好的判斷以及對風險承受能力的評估。

其次,在投資前儘量做好專案的調研。比如關注相關社羣及媒體訊息,是否有人對合約的安全性提出過質疑。兼聽不同來源的不同聲音,同時獨立思考、積極辨識訊息的真實性。

最後,也是最直接的方法:

檢查專案及其合約是否由著名安全團隊進行過專業審計並取得較高安全評價。

當前最火爆的流動性挖礦專案,絕大多數在上線前未經過嚴格、專業的安全審計,例如SushiSwap、Yuno以及Kimchi等。雖然上線後有的專案邀請了安全公司來進行審計,但此時即使安全審計能夠進行並完成,專案也已經很可能沒有任何提升安全性或修復安全漏洞的空間和餘地了。

目前,安全審計已成為了高質量DeFi專案的標配。對未經審計的專案投資需格外慎重。若專案已審計,投資者則需儘量瞭解審計公司的背景以及其審計報告中的各項指標,例如:

盲目地跟風、將安全性拋之腦後的行為,最終會使得流動性挖礦如曇花一現般不可持久。

DeFi專案只有在市場各方參與者的利益均受到保護並且沒有安全風險和漏洞的情況下才能真正做到可持續發展。只有迴歸區塊鏈公開、透明、去中心化的本質,結合金融市場的客觀規律,杜絕安全漏洞,DeFi的星星之火,才能點亮區塊鏈世界。

免責聲明:

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

推荐阅读

;