Back to Blog

BlockSec 回顧:2023 年 DeFi 協議安全性分析

January 21, 2024
10 min read

儘管 2023 年的大部分時間對於 DeFi 協議來說都是熊市,但由於協議漏洞,該生態系統仍持續遭受嚴重的駭客攻擊。值得注意的是,在 Euler Finance 駭客攻擊事件中,損失了近 2 億美元,數額巨大。與此同時,DeFi 安全事件出現了新的趨勢,例如由編譯器引起的漏洞以及廣泛使用的標準之間的不相容性。為了應對這些威脅,社群提出了多種解決方案,包括監控和威脅情報。雖然其中一些措施已被證明有效,但我們認為這些努力是臨時性的。社群仍然缺乏系統性的方法和指導來幫助保護 DeFi 協議。

在本部落格中,我們將首先使用代表性案例呈現 DeFi 協議安全的新趨勢,然後說明目前的解決方案及其侷限性。最後,我們將提出 BlockSec 對於如何保護 DeFi 協議的觀點。

0x0. DeFi 協議安全的新趨勢

趨勢一:知名協議遭受攻擊

2023 年,一些老牌且知名的協議遭到破壞,包括 CurveBalancerKyberSwap。下表說明了這些知名協議的發布日期及其被攻擊的時間。需要注意的是,所利用的漏洞可能是在協議最初發布後的更新中引入的。因此,表中提供的持續時間僅為近似值,旨在提供一個大致的時間跨度概念。

協議 發布時間 安全事件時間 持續時間
kyberSwap 2017 2023 年 11 月 ~ 6 年
Curve 2020 2023 年 7 月 ~ 3 年
Balancer 2020 2023 年 8 月 ~ 3 年

除了上述協議外,Aave V2 在 11 月收到社群提供的漏洞報告後也緊急暫停。雖然該協議未受到攻擊,但這仍引起了對知名協議安全性的擔憂。

這些協議已經過多次審計,並在內部實施了多項安全措施。下表列出了每個協議的審計方。需要注意的是,審計方可能僅對協議內的部分智慧合約進行了審計。表中提到的審計方並不一定對應於審計特定漏洞合約的審計方。此表的目的是說明這些協議在安全性方面投入了相當多的資源。

協議 審計方 連結
kyberSwap ChainSecurity, Sherlock, Hacken 審計 - KyberSwap 文件
Curve TrailOfBits, MixBytes, Quantstamp, ChainSecurity 審計 - Curve 文件
Balancer OpenZeppelin, TrailOfBits, Certora, ABDK 安全 | Balancer

幸運的是,受害者已經通過各協議實施的計畫獲得了賠償。例如,Kyber Network 宣布計畫通過 KyberSwap 國庫補償受影響用戶。同樣,Curve 社群投票支持一項旨在補償流動性提供者(LP)經濟損失的提案。儘管付出了高昂的成本,但這些措施是恢復 DeFi 社群信心的舉措。

趨勢二:新型攻擊向量出現

涉及編譯器錯誤和不相容第三方函式庫的攻擊向量確實已在 DeFi 領域出現。例如,Curve 安全事件的根本原因被確定為某些版本的 Vyper 編譯器中的錯誤。此外,一些協議遭受的攻擊源於兩個廣泛採用的標準(ERC2771 和 Multicall)之間的不相容,當這些標準在 thirdweb 等熱門第三方開發函式庫中實作時就會出現問題。這些複雜的技術挑戰凸顯了徹底的安全實作以及持續發展安全措施以抵禦新出現的、不可預見的漏洞的重要性。

編譯器錯誤

1983 年,Ken Thompson 在其圖靈獎演講中發表了題為「對信任的思考」(Reflections on Trusting Trust) 的演講。在演講中,他描述了修改 C 編譯器以在程式中植入後門的步驟,這可能導致意外結果。演講中傳達的觀點受到了社群的廣泛好評。然而,在實踐中,惡意編譯器的真實案例非常罕見(除了著名的 XcodeGhost 安全事件)。即使我們將安全模型從惡意編譯器放寬到 良性但意外的編譯器行為,導致嚴重經濟損失的公開案例仍然很少。

由 Vyper 編譯器錯誤引起的 Curve 安全事件是一個公開案例,造成了約 7000 萬美元的損失(其中部分資金已被追回,實際損失約為 2300 萬美元)。Vyper 編譯器版本 0.2.15、0.2.16 和 0.3.0 存在錯誤,會導致重入鎖(reentrancy guard)失效。這意味著攻擊者可以利用重入來執行駭客攻擊,如果編譯器生成了正確的位元組碼,這種情況本不應發生——因為開發者已經添加了防止重入的程式碼。

攻擊交易 (Tx): 0x2e7dc8b2fb7e25fd00ed9565dcc0ad4546363171d5e00f196d48103983ae477c

常用標準的不相容性

DeFi 的可組合性允許不同的智慧合約和標準互相連接,從而創建強大的應用程式。然而,這也帶來了潛在的相容性問題。例如,當每個智慧合約單獨運作時都很順暢,但組合在一起時卻可能引入新的安全漏洞。

此類不相容問題的一個例子涉及 ERC-2771 和 Multicall 標準。ERC-2771 定義了一個用於通過受信轉發器(trusted forwarder)接收元交易(meta transactions)的介面,而 Multicall 是一種在單筆交易中批次處理多個函數呼叫的機制。問題在於,當從受信轉發器轉發的呼叫從呼叫資料(calldata)中獲取實際呼叫位址時,該位址可能會被攻擊者操縱。儘管每個標準在獨立使用時都運作良好,但它們的結合使用可能會破壞某些假設並導致不可預見的問題。欲了解更多詳情,請參考 OpenZeppelin 的部落格文章

請注意,ERC-2771 和 Multicall 標準都在 OpenZeppelin 和 thirdweb 等熱門開發函式庫中實作。開發者經常信任這些知名的程式碼庫,並可能將其排除在程式碼審計之外。即便協議本身沒有內生漏洞,這種作法也可能引入新的安全漏洞。

趨勢三:舊漏洞產生了新的安全影響

精度損失是指計算過程中精度和準確性的降低,通常是因為結果的小數位數少於預期所致。雖然靜態分析工具可以輕易檢測到精度損失問題,但其存在並不一定意味著存在安全漏洞。只有當精度損失可能導致嚴重後果時,才被視為漏洞。然而,評估精度損失的影響通常具有挑戰性,因為這需要對協議的語義和程式碼的特定上下文有深入的理解。

一些攻擊針對的是其他領先協議(如 Compound v2 和 Aave v2)的衍生協議,這些協議可能容易受到已知的精度問題影響。具體而言,涉及 Hundred FinanceChannels Finance(二者均為 Compound v2 的衍生項目)的事件,源於初始化不當的市場以及與精度損失相關的問題。這些問題允許攻擊者由於捨入錯誤而以較少的代幣贖回抵押品。

攻擊交易 (Tx): 0x3f7de75566289224c5e95a35ee8717ddd6928500227a05c1d83838844c60491d

0x1. 當前解決方案

知名 DeFi 協議在安全措施上投入巨大,並經歷了多輪安全審計,這是事實。儘管如此,考慮到這些協議管理著海量的用戶資產,強調協議安全的重要性是完全合理的。除了程式碼審計之外,還有威脅監控等額外提議的解決方案。讓我們深入了解這些解決方案的現狀及其侷限性。

程式碼審計

此處定義的程式碼審計確實是加密貨幣協議安全評估中的關鍵過程,通常在協議上線前執行。它結合了一系列技術,包括手動程式碼審查、靜態分析、動態模糊測試(fuzz testing)和正式驗證。該過程可以由一家(或幾家)審計公司執行,也可以通過社群驅動的方式進行。然而,程式碼審計存在必須認知的侷限性。

  • 首先,程式碼審計主要發生在協議部署之前。一旦協議上線,審計過程通常就結束了,初始的程式碼審計無法提供持續的安全性評估。這意味著上線後出現的任何漏洞或問題可能無法被初始審計發現。

  • 其次,程式碼審計通常難以識別需要複雜互動和特定狀態才能被利用的隱蔽漏洞。DeFi 協議的可組合性雖然提升了靈活性和整合性,但顯著擴展了程式空間,並為人類審查員和靜態分析工具帶來了嚴峻挑戰,後者很難探索完整的程式狀態範圍。儘管動態模糊測試是有幫助的,但它受到交易和狀態依賴性的限制。缺乏能夠檢測故障的「DeFi 協議感知模糊測試預言機」,是該領域的一個顯著缺口,也是業界和學術界仍未解決的研究課題。

  • 第三,合格的程式碼審計師短缺,由於人才儲備有限,這一問題無法迅速解決。程式碼審計是一項跨學科任務,需要網路安全、金融和數學方面的知識。目前只有少數大學提供該專業領域的教育,導致高品質程式碼審計的成本高昂,服務等待時間長。因此,協議為了維持業務時間表,可能會在未經審計的情況下上線。

  • 第四,對於用戶而言,評估程式碼審計的品質具有挑戰性。雖然用戶因為存放資產而對協議的安全性最為關心,但大多數人缺乏評估程式碼審計徹底性的能力。這可能導致僅為了形式而進行的審計,最終損害協議和用戶資產的安全性。

總之,雖然程式碼審計是確保協議安全的寶貴工具,但其固有的侷限性意味著它不能成為唯一的安全解決方案。

威脅監控

威脅監控的基本理念是監視並檢測可疑交易。這確實提高了安全性,但若要發揮有效作用,需要解決以下問題:

  • 首先,威脅監控系統的準確性至關重要。它們必須在最小化誤報(false positives)和漏報(false negatives)之間取得平衡。高誤報率可能導致虛假警報,使用戶或安全團隊對警告變得遲鈍,從而可能忽略真正的威脅。

  • 其次,目前的威脅監控系統往往需要人工確認後才能對檢測到的可疑交易採取行動。這在很大程度上是由於上述的高誤報率問題。人工干預的被動性是有問題的,因為在區塊鏈和 DeFi 協議快節奏的環境中,攻擊可能會迅速耗盡資源,通常是在人工反應實作之前。因此,如果威脅監控系統無法提供及時的自動化行動來阻止或減輕攻擊,其價值將大打折扣。

  • 此外,威脅監控應該是持續性的,並且能夠適應新出現的威脅。

0x2. BlockSec 的觀點

我們認為協議安全需要協議生命週期中不同階段的多重防禦,包括高品質的程式碼審計、上線前的安全測試、攻擊檢測與阻斷,以及上線後的安全事件響應。我們還想強調社群中一些被忽視的觀點。

  • 第一,我們認為任何微小的程式碼或組態升級都需要進行徹底的安全測試。此類測試應在協議的實際狀態下進行,而不是在用戶資料的虛假狀態下執行。如前所述,協議狀態對於定位複雜協議中的漏洞至關重要。

  • 第二,需要一套自動化的攻擊響應系統,而非依賴人工干預。這需要一個準確且迅速的攻擊檢測系統,具有極低的誤報率和近乎零的漏報率。例如,如果部署了自動響應系統,可以挽救數百萬用戶的資產。

  • 第三,應建立適當的安全事件響應程序,並需要能夠提供全面安全服務的安全合作夥伴。例如,當出現攻擊事件時,合作夥伴可以協助建立指揮中心(war room)、建議採取的操作、協助審查和審計安全修補程式、追蹤資金流向等。Yearn finance 的這篇文章是處理駭客事件的絕佳參考資料

BlockSec 提供的全端安全服務

基於上述洞察,BlockSec 為協議提供全端安全服務:

  • 高品質程式碼審計服務。BlockSec 為 DeFi 協議提供嚴謹的程式碼審計服務。通過利用以創新學術研究為基礎的靜態分析工具、動態模糊測試和差分測試架構,我們的程式碼審計涵蓋了協議本身以及底層的 EVM 執行引擎。此外,我們的靜態分析工具 HookScan獲得 Uniswap Lab 的支持,用於檢測 Uniswap V4 Hook 中的漏洞
  • Phalcon攻擊檢測與阻斷系統。憑藉經實戰檢驗的技術,已成功阻斷超過 20 次攻擊並挽救了約 1400 萬美元的資金,BlockSec Phalcon 可以幫助協議主動監控攻擊合約和交易(甚至在駭客發起攻擊交易之前)。憑藉近 99.99% 精確的攻擊檢測引擎加上用戶自定義的策略,BlockSec Phalcon 在誤報和漏報之間取得了平衡,從而實現了自動防禦機制
  • 安全事件響應。BlockSec 始終是(如果不是第一個)能夠在 DeFi 事故中識別攻擊根本原因和漏洞的安全廠商。我們可以幫助協議審查安全修補程式(Telcoin)、提供白帽資金救援 [例如:AnySwapTransitSwapParaspaceLoot]、追蹤駭客資金流向,並精確定位 Hopeland 攻擊者的身分。

0x3. 結論

2023 年,我們發現 DeFi 協議安全出現了新趨勢,許多知名協議遭到攻擊。我們知道,在技術層面確保協議安全是一個複雜且持續的挑戰。僅僅採取程式碼審計或監控系統已不再足夠。我們需要一個結合這些要素並貫穿協議整個生命週期的全端解決方案。

總之,BlockSec 採取了全面的 DeFi 協議安全方法,結合了尖端的審計技術、自動化攻擊防禦工具和響應靈敏的事故管理,這使其成為尋求加強安全措施並在 2024 年面對 DeFi 領域不斷演變的威脅時保護用戶資產的協議的領先合作夥伴。