區塊鏈預言機攻擊類型、典型案例及多層次防禦策略

進階1/9/2025, 4:20:38 PM
本文將重點探討預言機在區塊鏈中的應用、攻擊類型,以及防範常見的預言機操縱方法,為讀者科普預言機的基本概念與重要性,提高安全意識,同時為開發者提供如何在智能合約中安全集成預言機的實踐建議。

引言

自 2019 年 DeFi 興起至 2024 年逐步走向成熟,數據問題始終是開發者關注的核心議題,因為 DeFi 的運行依賴精準、實時的鏈上數據,數據質量直接影響協議的安全性、效率和用戶體驗。數據不僅是價值交換的核心,同時是協議信任機制的基石。對於智能合約而言,數據如同輸入的事實,智能合約本身無法主動驗證數據的真實性,而是完全依賴於外部提供的數據。這種特性意味著,一旦輸入數據被篡改或不準確,智能合約將被動接受,從而可能引發系統性風險。因此,保證數據的去中心化、可信性和易用性是一個持續的挑戰。一是因為大部分數據通常為中心化的機構或平臺所有;二是數據的取用較為困難,從數據源到傳送渠道再到達需要用的地方,其間很難保證可信度。

作為鏈上與鏈下數據交互的橋樑,預言機時常成為攻擊的首要目標。因為預言機一旦被操縱,攻擊者便可以利用虛假的價格或市場信息實施大規模經濟攻擊,例如 2021 和 2022 年頻繁發生的預言機操縱和閃電貸攻擊。即便到了 2024 年,這種威脅依然存在,最近發生的 UwU Lend 和 Banana Gun 等事件,繼續警示我們,預言機數據的質量與安全不僅決定了單個協議的成敗,更關乎整個 DeFi 生態的穩定。

本文將重點探討預言機在區塊鏈中的應用、攻擊類型,以及防範常見的預言機操縱方法,為讀者科普預言機的基本概念與重要性,提高安全意識,同時為開發者提供如何在智能合約中安全集成預言機的實踐建議。

預言機的基礎概念

預言機的定義與作用

預言機(Oracle)是區塊鏈與外部世界之間的關鍵接口,它負責將鏈外數據導入區塊鏈,包含了:市場價格、氣象信息、賽事結果等,使智能合約能夠訪問外部信息。鑑於區塊鏈固有的封閉性質,預言機在 DeFi、預測市場、保險和遊戲等領域發揮著至關重要的作用。除了彌補區塊鏈的侷限性,同時促進了智能合約與現實世界數據的交互,拓展了區塊鏈技術的應用範圍。在此場景下,預言機也存在一些痛點和挑戰:

  • 預言機的準確性至關重要,若數據來源不可靠或受到攻擊,可能導致智能合約執行錯誤,導致資金損失。
  • 預言機本身也可能成為攻擊目標,如通過操控預言機傳遞虛假數據進行市場操縱,影響整個協議的運行。
  • 去中心化的預言機網絡雖然能夠減少單點故障,但其去中心化程度與可靠性存在爭議,因此如何提高預言機的可靠性與安全性,依然是當前技術發展的關鍵挑戰之一。
    瞭解了預言機的基本定義與作用後,我們將簡要探討預言機的種類與其適配場景,以及它們所面臨的安全風險。

預言機的分類:中心化與去中心化

預言機的實現路徑主要分為中心化和去中心化兩種。中心化預言機,如 Oraclize,通常依賴單一的數據源來提供鏈外信息。它通過硬件和軟件的結合,利用像 TLSNotary 和 Android Proof 等技術來確保數據的準確性。這類預言機以高效運行與穩定性能為優勢,然而,其依賴於單一信任來源的特性,既削弱了去中心化的本質,也因單點瓶頸制約了系統的擴展能力,從而在安全性與可擴展性方面面臨挑戰。

相比之下,去中心化預言機如 Chainlink 更加註重系統的安全性和信任透明度。在 Chainlink 的架構中,數據的獲取和驗證過程通過多個獨立的節點來完成,每個節點都在不同的參與者之間分散運作,從而避免了單點故障的風險。通過鏈上與鏈下的協同工作模式,Chainlink 能夠保證數據的多樣性和可靠性,尤其是在金融領域,去中心化的設計確保了預言機的抗攻擊能力。然而,這種設計在效率和成本上存在一定的權衡,可能對低頻需求的場景並不完全適用。

去中心化預言機的重要性在於,它們能夠降低數據源被操控的風險,防止單一信任方可能帶來的操控行為。去中心化的設計使得預言機不再依賴於少數幾個數據源,而是通過多個分佈式節點來增強數據的安全性和可靠性。然而,去中心化預言機也有需要面臨的挑戰,比如激勵機制能否長期有效、如何確保預言機網絡的整體穩定性等問題。接下來,我們將探討去中心化預言機面臨的安全風險及其解決方案。

預言機的工作原理和風險

不同數據源的預言機: Off-Chain 和 On-Chain

在預言機的工作中,數據的來源和傳輸方式直接影響其安全性和可靠性。預言機獲取數據的來源有兩種,分別為鏈下(Off-Chain)和鏈上(On-Chain)。兩種方式獲取數據的來源不同,方式也不同:

  • 鏈下數據對波動性的響應速度取決於數據源的特性和傳輸機制。例如,交易所的鏈外價格數據通常更新迅速,但其他鏈下數據(如傳統金融市場或複雜計算生成的數據)可能存在一定的延遲。鏈外數據傳輸通常依賴於少數擁有特權的機構將數據推送至鏈上,因此需要確保這些機構不會惡意篡改數據或在受脅迫的情況下推送錯誤更新。這種模式可能威脅去中心化區塊鏈上數據的可信性與可用性。
  • 鏈上數據則無需任何特權訪問權限,且始終保持為最新狀態,實時性較強。然而,這一特性也導致其極易遭受攻擊者的操控,進而可能引發災難性的後果。開發者獲取鏈上數據的方式較為容易,可以通過諮詢鏈上去中心化交易所(DEX)來計算即時價格。


鏈上鍊下預言機

決定採取鏈下還是鏈上數據,取決於開發者對數據特性的需求和取捨,同時也需關注對應選擇帶來的風險。這也促使我們進一步探索更為安全可靠的數據處理方式,接下來我們將介紹預言機的工作原理和風險點。

預言機開發簡要實例

為了幫助讀者瞭解區塊鏈中預言機的使用場景,這裡簡要地介紹一個開發場景。在實際的區塊鏈智能合約開發中,智能合約獲取預言機價格數據的方式可以有多種,其中常見的包括直接調用預言機合約或使用 Chainlink CCIP(Cross-Chain Interoperability Protocol,跨鏈通信協議)等技術。主要區別有以下兩點:

  1. 若開發對象均位於同一鏈上,通常使用直接調用預言機合約的方法,方便快速獲取實時的價格信息。
  2. 使用 Chainlink CCIP 的典型應用場景是多鏈 DeFi 應用,跨鏈傳輸場景下 CCIP 可以較為安全地在不同鏈之間傳輸數據。
    這裡使用直接調用預言機合約的方式來演示。想象一下你是一個以太坊生態的智能合約開發者,現在你需要在合約調用中使用預言機來獲取 ETH/USD 的價格數據。首先,你會定義一個接口來連接到預言機的合約,並寫一個合約函數用於從預言機獲取價格數據。

通過這個簡單的合約示例,我們瞭解了 PriceConsumer 合約如何實時獲取價格數據並據此做出決策,這讓我們對智能合約利用預言機獲取價格數據的運作機制有了基本認識,接下來我們從兩個角度拆解其中的風險:

從合約內部使用的預言機視角來分析,攻擊者可以利用流動性較低的市場或小型交易所進行大量交易,刻意操控 ETH/USD 的價格,造成價格異常波動。由於部分預言機依賴多個交易平臺的數據彙總,這種異常波動可能迅速傳遞至 PriceConsumer 的 fetchPrice() 方法,導致價格失真。這種情況通常源於預言機數據來源過於單一,未能充分分散風險,從而使系統對價格操控更加脆弱。

從合約外部來講,則需要結合不同的應用場景來分析。假設 PriceConsumer 合約被用在一個借貸平臺上,其中用戶可以在平臺上抵押 ETH 以借出其他資產。攻擊者首先利用閃電貸借入大量資金,並將這些資金短暫地存入自動做市商(AMM,Automatic Market Maker)或其他流動性池。若該 AMM 交易深度較低,則短時間大量單一資產進入該池會直接造成價格滑點。

此時,由於攻擊者的大額交易改變了 AMM 上的價格,因此預言機也會報告這一受操控的價格。操控價格後,攻擊者會在其他業務場景中利用價格異常獲利。例如:

  1. 在借貸協議中,操控後的價格可能觸發某些抵押資產的清算操作。攻擊者可以以低價買入被清算的抵押資產,從而獲利。
  2. 若價格操控影響到不同平臺間的價格差異,攻擊者可以在其他平臺利用價差套利。

在攻擊者操作完成後,立即撤出資金,恢復 AMM 價格,並將借來的閃電貸資金連同利息歸還,從而完成整個操控過程。

接下來,我們將進行更深入的討論,通過具體案例分析預言機攻擊的類型和手法,探討其對 DeFi 協議以及鏈上生態的破壞性影響,並解析其中的邏輯與關鍵技術細節。

預言機直接和間接引發的風險

雖然市場操縱和預言機攻擊可能會導致類似的後果,如價格失真和資產損失,但它們的攻擊手段和故障點不同。區塊鏈領域中大多數損失源於市場操縱,而非預言機本身的設計缺陷。以下是詳細區別:

  • 市場操縱是通過人為改變供需關係,推高或壓低資產價格,常見手段包括虛假交易和跨市場操縱。例如,低流動性資產更容易受到操控,可能導致 DeFi 協議面臨壞賬和流動性風險。
  • 預言機攻擊則是通過干擾預言機數據源,使其報告與市場實際情況不符的價格,可能是由於故意操控、數據源不足或預言機安全性問題。攻擊者會利用喂價與真實市場價格的偏差來操控 DeFi 協議的抵押、清算等操作。

我們來分析以上這個案例:

簡而言之,市場操縱通過改變實際市場價格實現,預言機則忠實反映受操控後的價格;而預言機攻擊則是在市場價格正常的情況下錯報價格。瞭解了預言機與價格操縱的區別後,下一步我們將探討鏈上和鏈下數據獲取的差異,進一步瞭解預言機如何傳送數據。

預言機相關的攻擊案例

在眾多預言機攻擊事件中,常見類型包括價格操縱、閃電貸結合預言機失真、鏈下數據錯誤以及利用協議設計漏洞等。以下我們將通過兩個案例介紹兩類典型故障——UwU Lend 的價格操縱事件揭示了鏈上預言機在應對惡意操控時的脆弱性,而 Synthetix 的鏈下預言機故障則展現了外部數據錯誤對鏈上合約的深遠影響。

UwU Lend 價格操縱事件

2024 年 6 月 10 日,基於 EVM 鏈的數字資產借貸平臺 UwU Lend 遭遇攻擊,損失約 1,930 萬美元。本次事件暴露了預言機機制在 DeFi 協議中潛在的脆弱性。

UwU Lend 使用一種名為 sUSDE 的加密貨幣,其價格由價格預言機負責確定。作為借貸協議的核心組件,預言機的主要職責是獲取並提供準確的價格數據,從而確保借貸和清算等關鍵操作在合理且穩定的價格基礎上進行。然而,這一核心機制也成為攻擊者的突破口。

攻擊者通過在 Curve Finance 的流動性池中進行大額兌換操作,有意操縱 sUSDE 的市場價格。這一行為導致 UwU Lend 所依賴的價格預言機生成失真數據。攻擊者隨即利用被高估的 sUSDE 作為抵押品,從 UwU Lend 提取其他資產,最終導致平臺資產嚴重流失。

此次事件的根本原因在於 UwU Lend 在預言機抗操縱性方面的設計不足。這一漏洞直接導致攻擊者能夠通過操作市場價格,操縱預言機返回失真數據,從而實施精準攻擊。這一案例充分暴露了 DeFi 平臺在依賴預言機時普遍存在的抗操縱性缺陷,尤其是在流動性較低的市場環境中,這種風險尤為明顯。

值得注意的是,本次事件與前文提到的閃電貸攻擊方式有一定相似之處。閃電貸攻擊通常利用短時間內鉅額資金流動製造價格異常,干擾預言機的價格反饋機制,從而實現資產套利或其他攻擊目標。這種相似性進一步說明了在 DeFi 系統中,預言機作為核心組件,其抗操縱性設計對協議安全性的重要性。

未來,DeFi 平臺在構建預言機機制時,應重點關注多源價格數據融合、價格更新頻率優化以及異常價格監測等策略,增強抗操縱能力,降低因單點失效或市場波動導致的系統性風險。

Synthetix Oracle 故障

2019 年 6 月 25 日,基於以太坊的衍生品流動性協議 Synthetix 在其定製的鏈下價格預言機系統中出現了一次嚴重故障,導致一筆交易意外產生了鉅額利潤。Synthetix 依靠一組祕密的來源來進行 price feed,以固定時間間隔將彙總的價格發佈至鏈上,為用戶提供多頭或空頭合成資產的交易價格。

然而,當其中一個價格渠道錯誤地報告了韓元價格,比當其匯率比真實匯率高出 1,000 倍時,系統未能過濾該異常數據,導致這一失準的價格被接受並在鏈上發佈。此時,一位交易機器人發現這一錯誤,迅速在 sKRW 市場上執行買賣操作,通過套利迅速積累了高額收益。由於交易機器人的套利行為,團隊迅速發現並與交易員協商,使得交易員返還利潤以換取 bug 賞金,從而避免了超 10 億美元的潛在損失。

Synthetix 團隊此前已採取了從多個來源獲取價格數據的措施,以防範單一來源失準的問題,但該事件顯示出鏈下數據預言機的潛在風險:當上遊數據源出錯時,鏈上合約無從得知價格的具體計算過程,因此無法自動辨別異常。

防範措施

通過以上案例我們可以看到,預言機面臨的挑戰不僅限於數據來源的準確性,還涉及到其抗操控性和鏈下數據整合的安全性。有鑑於此,防範預言機攻擊就顯得尤為重要。如何提高預言機的安全性、可靠性以及抗操控能力,成為了我們在設計和使用預言機時必須考慮的關鍵因素。在接下來的部分,我們將探討在預言機設計中應當採取的一些有效措施,以應對不同類型的攻擊,並增強其系統的整體安全性。

1.採用多數據源,確保數據準確性。
案例分析:UwU Lend 價格操縱事件中,攻擊者通過操控 CurveFinance 池中的 sUSDE 價格,成功操控了 UwU Lend 的價格預言機。攻擊者利用價格操控漏洞從而獲取了系統未能正確評估的資產。如果 UwU Lend 使用了多數據源來確定 sUSDE 的價格,那麼即便某一個數據源被操控,系統也能通過其他數據源來驗證價格,減少被攻擊的風險。

延伸分析:該事件不僅涉及價格操控,還暴露了流動性不足的問題。若某個代幣在市場中缺乏足夠的流動性,交易深度淺,價格易受少量交易影響,從而使得預言機易被操控。因此,項目方上線新代幣時需要謹慎評估其市場流動性,以避免因流動性差導致的價格失真和安全風險。例如,Aave、Kamino 和 Scallop 等借貸協議,在設計時就會針對流動性較差的代幣進行更多限制,確保其借貸市場的穩定性和安全性。

優化方案:為確保數據準確性,協議應通過引入多個去中心化的預言機,如 Chainlink 或 Band Protocol,來收集不同交易所或流動性池的數據。這種多數據源策略可減少某一個數據源被操控時對系統整體安全性的影響。

2.去中心化數據聚合器,確保數據傳輸安全。
案例分析:Synthetix 的鏈下預言機故障暴露了鏈下數據源錯誤的風險。在此事件中,韓元價格被錯誤報告,導致交易機器人利用這一錯誤進行套利。若 Synthetix 採用了去中心化的數據聚合器,那麼即使一個鏈下數據源出錯,其他去中心化的數據源也能夠及時糾正這一問題。

優化方案:像 Uniswap V3 的改進措施一樣,使用去中心化的數據聚合器能夠提高數據傳輸的安全性。通過使用加密協議(如 TLS)和簽名驗證,結合去中心化的中繼節點,能夠防止中間人攻擊和數據篡改。例如,在 Chainlink 預言機中,每個數據源都經過多個獨立節點驗證,並使用加密技術保護數據傳輸,確保數據不可篡改。

3.在應用架構上模塊化設計,降低單點故障風險。
案例分析:許多攻擊事件暴露出 DeFi 協議在模塊化設計上的不足,缺乏足夠的防禦性機制。通過精心設計和構建獨立模塊,可以防止攻擊者利用系統中某一個漏洞對整個系統產生致命影響。例如,在 Synthetix 的鏈下預言機故障中,若開發團隊能提前設計模塊化的預警系統,能夠更快速地識別異常數據並進行修復。

優化方案:為了提高抗攻擊性,開發者可以在開發過程中使用分層架構,並確保每個模塊(數據源、驗證邏輯、傳輸模塊)都能獨立工作。例如,在下文提及的 Uniswap V3 中,通過將不同的流動性池價格信息存儲在獨立的觀察池中,協議能夠在多個池子間比較價格,從而減少某一池被操控的風險。在實際開發中,可以考慮採用接口封裝和依賴注入技術,將數據驗證模塊與其他邏輯分開,確保系統的靈活性和可維護性。

4.智能合約中的自適應防護機制。
雖然目前的預言機多采取靜態的防護措施,但面對高度動態的攻擊手段,智能合約本身也可以採取自適應的防護策略。比如,通過檢測價格異常波動的頻率來判斷是否存在攻擊,並在出現異常波動時觸發額外的驗證或回滾機制。這種自適應機制在面對瞬時的價格操控時,能自動保護系統免受潛在損失。

實際應用:一些 DeFi 協議通過實現類似“閾值報警”機制來實時檢測價格的劇烈波動,一旦價格波動幅度超出預設閾值,系統就會自動啟動額外驗證流程或觸發回滾,防止操控行為的擴展。例如,Balancer 協議通過設定價格偏離閾值,若發現價格過高或過低,則會暫停某些交易,直至進一步確認價格的合理性。

在以上討論的預言機設計和應用的優化基礎上,我們可以進一步研究 DeFi 應用中的具體方案。接下來,我們將介紹 Uniswap V2 的時間加權平均價格機制以及 V3 的改進方式。

DeFi 預言機應用的安全優化案例

DeFi 預言機應用的安全優化案例 預言機的安全性是 DeFi 協議的核心問題。為有效防範預言機攻擊,不少 DeFi 協議通過技術創新提供了寶貴借鑑。以 Uniswap 為例,其在鏈上價格生成和防禦機制方面的優化,為預言機設計帶來了新思路。對 Uniswap V2 和 V3 的比較揭示了技術手段如何提升預言機的抗操控能力,為智能合約安全設計提供了清晰路徑。

Uniswap V2 的 TWAP

Uniswap V2 中首次引入了 TWAP(Time-Weighted Average Price,時間加權平均價格) 預言機,允許鏈上開發人員在去中心化交易所(DEX)獲取價格數據。TWAP 是鏈上預言機,它的數據源來自 Uniswap 自身的鏈上交易數據,不使用任何鏈下數據。

UniswapV2Pair 合約中,_update() 函數是用於更新交易對的儲備量和價格累積器的核心 private 函數,它的設計主要是通過時間加權價格累積器幫助防止預言機攻擊。

函數的核心思路是通過記錄每個區塊內的時間加權價格變化,來限制攻擊者在單一時間點操縱價格的能力。具體而言,函數會獲取當前時間與上一次更新時間的差值 timeElapsed,並將這個時間差乘以交易對的當前價格,然後將計算結果添加到價格累積器 price0CumulativeLast 和 price1CumulativeLast 中。這個累積操作記錄了隨時間加權的平均價格,以平滑可能的價格波動。由於價格在一段時間內被累積,使得攻擊者需要在多區塊內連續操作,才能顯著改變價格,從而增大了操縱成本。

另外,該函數只在時間差 timeElapsed 大於 0 時才會更新價格累積器,這意味著在同一塊中,價格只會更新一次,限制了攻擊者在短時間內的操作頻率。為了有效操縱價格,攻擊者需要持續干預多個區塊,而不是單一區塊,這進一步降低了操縱的可能性。

從安全的角度來考慮,該函數的機制也較為完善。函數加入了防溢出檢查,確保儲備的最大值不會超出系統承載範圍,並且累積價格的計算也經過了溢出處理,這一設計使得外部操縱更加困難。

然而 V2 版本的預言機存在一些實際應用上的侷限性。例如,官方合約僅提供最新的價格累積值,開發者需要自行記錄和抓取歷史價格數據,技術門檻較高。此外,V2 版本的預言機沒有直接記錄交易對的深度信息,而交易對的深度直接關係到預言機在面對攻擊時的穩定性,深度越小越容易被操縱。

Uniswap V3

為了解決這些問題,Uniswap 在 V3 版本對預言機功能進行了改進。V3 的合約不僅保留了價格時間累積值,還增加了對歷史價格信息的存儲能力,可以最多支持 65,535 條記錄,這為開發者免去了手動存儲歷史數據的操作。

同時,V3 版本的預言機記錄了不同費率的流動性時間累積值,允許開發者選擇流動性較大的交易池作為價格參考來源,確保價格的相對準確性。所有與預言機相關的邏輯都被封裝在 Oracle 庫中,允許合約自動記錄每個交易的累積價格和流動性信息,而無需外部用戶手動維護。

另一個值得注意的變化是價格計算方式的調整。在 Uniswap V2 中,TWAP 的計算基於算術平均值,而 V3 則採用了幾何平均值。幾何平均值相對於算術平均值在工程實現上更具穩定性,且更適用於價格波動較大的環境,進一步降低了操縱的風險。

未來的趨勢

預言機攻擊的實施者主要包括有組織的攻擊團體、獨立黑客和可能具有內外合作的內部人士等。此類攻擊通常具備中等的技術複雜性,意味著攻擊者需要具備一定的區塊鏈和智能合約知識,同時掌握特定的漏洞利用技巧。伴隨著技術門檻的降低,預言機攻擊的複雜程度呈現出不斷下降的趨勢,這使得更多技術背景較淺的黑客有可能介入。

在預言機攻擊中,自動化手段的使用程度較高。大多數攻擊者會使用自動化工具掃描、分析鏈上數據,以快速識別並利用預言機價格波動和數據延遲等安全漏洞。例如,套利機器人和自動化腳本可在毫秒級內完成對價格變化的響應,以確保攻擊者在市場調整前獲利。隨著區塊鏈網絡的去中心化發展,這類自動化手段正在變得越來越高效,使得預言機攻擊更加精準、隱蔽。

從未來趨勢來看,隨著準確定價機制的逐步標準化,例如基於時間加權平均價格(TWAP)或加密簽名的多重數據源驗證的廣泛採用,預言機數據的可靠性和抗操控性將逐步增強,這可能會降低預言機攻擊的可行性。然而,新的攻擊方式也可能隨之出現,特別是結合不同的套利方式繞過檢查等,仍需要 DeFi 開發者提高警惕。預言機安全的未來發展將取決於去中心化的數據防護手段的持續改進,以及對潛在攻擊矢量的前瞻性防範。

總結

本文深入探討了預言機在 DeFi 系統中的關鍵作用及其面臨的安全風險,涵蓋預言機類型、開發實例、案例分析和防範措施,重點剖析了閃電貸預言機攻擊及預言機故障導致的隨機攻擊。通過這些分析,文章揭示了預言機在 DeFi 安全設計中的核心地位及其抗操控性的重要性,為讀者指引預防預言機攻擊的主要方式。

聲明:本文內容僅供參考,旨在學習交流預言機攻擊相關知識,不構成實際操作或教學案例的指導。

作者: Doris
譯者: Sonia
審校: Piccolo、Edward、Elisa
譯文審校: Ashely、Joyce
* 投資有風險,入市須謹慎。本文不作為Gate.io提供的投資理財建議或其他任何類型的建議。
* 在未提及Gate.io的情況下,複製、傳播或抄襲本文將違反《版權法》,Gate.io有權追究其法律責任。

區塊鏈預言機攻擊類型、典型案例及多層次防禦策略

進階1/9/2025, 4:20:38 PM
本文將重點探討預言機在區塊鏈中的應用、攻擊類型,以及防範常見的預言機操縱方法,為讀者科普預言機的基本概念與重要性,提高安全意識,同時為開發者提供如何在智能合約中安全集成預言機的實踐建議。

引言

自 2019 年 DeFi 興起至 2024 年逐步走向成熟,數據問題始終是開發者關注的核心議題,因為 DeFi 的運行依賴精準、實時的鏈上數據,數據質量直接影響協議的安全性、效率和用戶體驗。數據不僅是價值交換的核心,同時是協議信任機制的基石。對於智能合約而言,數據如同輸入的事實,智能合約本身無法主動驗證數據的真實性,而是完全依賴於外部提供的數據。這種特性意味著,一旦輸入數據被篡改或不準確,智能合約將被動接受,從而可能引發系統性風險。因此,保證數據的去中心化、可信性和易用性是一個持續的挑戰。一是因為大部分數據通常為中心化的機構或平臺所有;二是數據的取用較為困難,從數據源到傳送渠道再到達需要用的地方,其間很難保證可信度。

作為鏈上與鏈下數據交互的橋樑,預言機時常成為攻擊的首要目標。因為預言機一旦被操縱,攻擊者便可以利用虛假的價格或市場信息實施大規模經濟攻擊,例如 2021 和 2022 年頻繁發生的預言機操縱和閃電貸攻擊。即便到了 2024 年,這種威脅依然存在,最近發生的 UwU Lend 和 Banana Gun 等事件,繼續警示我們,預言機數據的質量與安全不僅決定了單個協議的成敗,更關乎整個 DeFi 生態的穩定。

本文將重點探討預言機在區塊鏈中的應用、攻擊類型,以及防範常見的預言機操縱方法,為讀者科普預言機的基本概念與重要性,提高安全意識,同時為開發者提供如何在智能合約中安全集成預言機的實踐建議。

預言機的基礎概念

預言機的定義與作用

預言機(Oracle)是區塊鏈與外部世界之間的關鍵接口,它負責將鏈外數據導入區塊鏈,包含了:市場價格、氣象信息、賽事結果等,使智能合約能夠訪問外部信息。鑑於區塊鏈固有的封閉性質,預言機在 DeFi、預測市場、保險和遊戲等領域發揮著至關重要的作用。除了彌補區塊鏈的侷限性,同時促進了智能合約與現實世界數據的交互,拓展了區塊鏈技術的應用範圍。在此場景下,預言機也存在一些痛點和挑戰:

  • 預言機的準確性至關重要,若數據來源不可靠或受到攻擊,可能導致智能合約執行錯誤,導致資金損失。
  • 預言機本身也可能成為攻擊目標,如通過操控預言機傳遞虛假數據進行市場操縱,影響整個協議的運行。
  • 去中心化的預言機網絡雖然能夠減少單點故障,但其去中心化程度與可靠性存在爭議,因此如何提高預言機的可靠性與安全性,依然是當前技術發展的關鍵挑戰之一。
    瞭解了預言機的基本定義與作用後,我們將簡要探討預言機的種類與其適配場景,以及它們所面臨的安全風險。

預言機的分類:中心化與去中心化

預言機的實現路徑主要分為中心化和去中心化兩種。中心化預言機,如 Oraclize,通常依賴單一的數據源來提供鏈外信息。它通過硬件和軟件的結合,利用像 TLSNotary 和 Android Proof 等技術來確保數據的準確性。這類預言機以高效運行與穩定性能為優勢,然而,其依賴於單一信任來源的特性,既削弱了去中心化的本質,也因單點瓶頸制約了系統的擴展能力,從而在安全性與可擴展性方面面臨挑戰。

相比之下,去中心化預言機如 Chainlink 更加註重系統的安全性和信任透明度。在 Chainlink 的架構中,數據的獲取和驗證過程通過多個獨立的節點來完成,每個節點都在不同的參與者之間分散運作,從而避免了單點故障的風險。通過鏈上與鏈下的協同工作模式,Chainlink 能夠保證數據的多樣性和可靠性,尤其是在金融領域,去中心化的設計確保了預言機的抗攻擊能力。然而,這種設計在效率和成本上存在一定的權衡,可能對低頻需求的場景並不完全適用。

去中心化預言機的重要性在於,它們能夠降低數據源被操控的風險,防止單一信任方可能帶來的操控行為。去中心化的設計使得預言機不再依賴於少數幾個數據源,而是通過多個分佈式節點來增強數據的安全性和可靠性。然而,去中心化預言機也有需要面臨的挑戰,比如激勵機制能否長期有效、如何確保預言機網絡的整體穩定性等問題。接下來,我們將探討去中心化預言機面臨的安全風險及其解決方案。

預言機的工作原理和風險

不同數據源的預言機: Off-Chain 和 On-Chain

在預言機的工作中,數據的來源和傳輸方式直接影響其安全性和可靠性。預言機獲取數據的來源有兩種,分別為鏈下(Off-Chain)和鏈上(On-Chain)。兩種方式獲取數據的來源不同,方式也不同:

  • 鏈下數據對波動性的響應速度取決於數據源的特性和傳輸機制。例如,交易所的鏈外價格數據通常更新迅速,但其他鏈下數據(如傳統金融市場或複雜計算生成的數據)可能存在一定的延遲。鏈外數據傳輸通常依賴於少數擁有特權的機構將數據推送至鏈上,因此需要確保這些機構不會惡意篡改數據或在受脅迫的情況下推送錯誤更新。這種模式可能威脅去中心化區塊鏈上數據的可信性與可用性。
  • 鏈上數據則無需任何特權訪問權限,且始終保持為最新狀態,實時性較強。然而,這一特性也導致其極易遭受攻擊者的操控,進而可能引發災難性的後果。開發者獲取鏈上數據的方式較為容易,可以通過諮詢鏈上去中心化交易所(DEX)來計算即時價格。


鏈上鍊下預言機

決定採取鏈下還是鏈上數據,取決於開發者對數據特性的需求和取捨,同時也需關注對應選擇帶來的風險。這也促使我們進一步探索更為安全可靠的數據處理方式,接下來我們將介紹預言機的工作原理和風險點。

預言機開發簡要實例

為了幫助讀者瞭解區塊鏈中預言機的使用場景,這裡簡要地介紹一個開發場景。在實際的區塊鏈智能合約開發中,智能合約獲取預言機價格數據的方式可以有多種,其中常見的包括直接調用預言機合約或使用 Chainlink CCIP(Cross-Chain Interoperability Protocol,跨鏈通信協議)等技術。主要區別有以下兩點:

  1. 若開發對象均位於同一鏈上,通常使用直接調用預言機合約的方法,方便快速獲取實時的價格信息。
  2. 使用 Chainlink CCIP 的典型應用場景是多鏈 DeFi 應用,跨鏈傳輸場景下 CCIP 可以較為安全地在不同鏈之間傳輸數據。
    這裡使用直接調用預言機合約的方式來演示。想象一下你是一個以太坊生態的智能合約開發者,現在你需要在合約調用中使用預言機來獲取 ETH/USD 的價格數據。首先,你會定義一個接口來連接到預言機的合約,並寫一個合約函數用於從預言機獲取價格數據。

通過這個簡單的合約示例,我們瞭解了 PriceConsumer 合約如何實時獲取價格數據並據此做出決策,這讓我們對智能合約利用預言機獲取價格數據的運作機制有了基本認識,接下來我們從兩個角度拆解其中的風險:

從合約內部使用的預言機視角來分析,攻擊者可以利用流動性較低的市場或小型交易所進行大量交易,刻意操控 ETH/USD 的價格,造成價格異常波動。由於部分預言機依賴多個交易平臺的數據彙總,這種異常波動可能迅速傳遞至 PriceConsumer 的 fetchPrice() 方法,導致價格失真。這種情況通常源於預言機數據來源過於單一,未能充分分散風險,從而使系統對價格操控更加脆弱。

從合約外部來講,則需要結合不同的應用場景來分析。假設 PriceConsumer 合約被用在一個借貸平臺上,其中用戶可以在平臺上抵押 ETH 以借出其他資產。攻擊者首先利用閃電貸借入大量資金,並將這些資金短暫地存入自動做市商(AMM,Automatic Market Maker)或其他流動性池。若該 AMM 交易深度較低,則短時間大量單一資產進入該池會直接造成價格滑點。

此時,由於攻擊者的大額交易改變了 AMM 上的價格,因此預言機也會報告這一受操控的價格。操控價格後,攻擊者會在其他業務場景中利用價格異常獲利。例如:

  1. 在借貸協議中,操控後的價格可能觸發某些抵押資產的清算操作。攻擊者可以以低價買入被清算的抵押資產,從而獲利。
  2. 若價格操控影響到不同平臺間的價格差異,攻擊者可以在其他平臺利用價差套利。

在攻擊者操作完成後,立即撤出資金,恢復 AMM 價格,並將借來的閃電貸資金連同利息歸還,從而完成整個操控過程。

接下來,我們將進行更深入的討論,通過具體案例分析預言機攻擊的類型和手法,探討其對 DeFi 協議以及鏈上生態的破壞性影響,並解析其中的邏輯與關鍵技術細節。

預言機直接和間接引發的風險

雖然市場操縱和預言機攻擊可能會導致類似的後果,如價格失真和資產損失,但它們的攻擊手段和故障點不同。區塊鏈領域中大多數損失源於市場操縱,而非預言機本身的設計缺陷。以下是詳細區別:

  • 市場操縱是通過人為改變供需關係,推高或壓低資產價格,常見手段包括虛假交易和跨市場操縱。例如,低流動性資產更容易受到操控,可能導致 DeFi 協議面臨壞賬和流動性風險。
  • 預言機攻擊則是通過干擾預言機數據源,使其報告與市場實際情況不符的價格,可能是由於故意操控、數據源不足或預言機安全性問題。攻擊者會利用喂價與真實市場價格的偏差來操控 DeFi 協議的抵押、清算等操作。

我們來分析以上這個案例:

簡而言之,市場操縱通過改變實際市場價格實現,預言機則忠實反映受操控後的價格;而預言機攻擊則是在市場價格正常的情況下錯報價格。瞭解了預言機與價格操縱的區別後,下一步我們將探討鏈上和鏈下數據獲取的差異,進一步瞭解預言機如何傳送數據。

預言機相關的攻擊案例

在眾多預言機攻擊事件中,常見類型包括價格操縱、閃電貸結合預言機失真、鏈下數據錯誤以及利用協議設計漏洞等。以下我們將通過兩個案例介紹兩類典型故障——UwU Lend 的價格操縱事件揭示了鏈上預言機在應對惡意操控時的脆弱性,而 Synthetix 的鏈下預言機故障則展現了外部數據錯誤對鏈上合約的深遠影響。

UwU Lend 價格操縱事件

2024 年 6 月 10 日,基於 EVM 鏈的數字資產借貸平臺 UwU Lend 遭遇攻擊,損失約 1,930 萬美元。本次事件暴露了預言機機制在 DeFi 協議中潛在的脆弱性。

UwU Lend 使用一種名為 sUSDE 的加密貨幣,其價格由價格預言機負責確定。作為借貸協議的核心組件,預言機的主要職責是獲取並提供準確的價格數據,從而確保借貸和清算等關鍵操作在合理且穩定的價格基礎上進行。然而,這一核心機制也成為攻擊者的突破口。

攻擊者通過在 Curve Finance 的流動性池中進行大額兌換操作,有意操縱 sUSDE 的市場價格。這一行為導致 UwU Lend 所依賴的價格預言機生成失真數據。攻擊者隨即利用被高估的 sUSDE 作為抵押品,從 UwU Lend 提取其他資產,最終導致平臺資產嚴重流失。

此次事件的根本原因在於 UwU Lend 在預言機抗操縱性方面的設計不足。這一漏洞直接導致攻擊者能夠通過操作市場價格,操縱預言機返回失真數據,從而實施精準攻擊。這一案例充分暴露了 DeFi 平臺在依賴預言機時普遍存在的抗操縱性缺陷,尤其是在流動性較低的市場環境中,這種風險尤為明顯。

值得注意的是,本次事件與前文提到的閃電貸攻擊方式有一定相似之處。閃電貸攻擊通常利用短時間內鉅額資金流動製造價格異常,干擾預言機的價格反饋機制,從而實現資產套利或其他攻擊目標。這種相似性進一步說明了在 DeFi 系統中,預言機作為核心組件,其抗操縱性設計對協議安全性的重要性。

未來,DeFi 平臺在構建預言機機制時,應重點關注多源價格數據融合、價格更新頻率優化以及異常價格監測等策略,增強抗操縱能力,降低因單點失效或市場波動導致的系統性風險。

Synthetix Oracle 故障

2019 年 6 月 25 日,基於以太坊的衍生品流動性協議 Synthetix 在其定製的鏈下價格預言機系統中出現了一次嚴重故障,導致一筆交易意外產生了鉅額利潤。Synthetix 依靠一組祕密的來源來進行 price feed,以固定時間間隔將彙總的價格發佈至鏈上,為用戶提供多頭或空頭合成資產的交易價格。

然而,當其中一個價格渠道錯誤地報告了韓元價格,比當其匯率比真實匯率高出 1,000 倍時,系統未能過濾該異常數據,導致這一失準的價格被接受並在鏈上發佈。此時,一位交易機器人發現這一錯誤,迅速在 sKRW 市場上執行買賣操作,通過套利迅速積累了高額收益。由於交易機器人的套利行為,團隊迅速發現並與交易員協商,使得交易員返還利潤以換取 bug 賞金,從而避免了超 10 億美元的潛在損失。

Synthetix 團隊此前已採取了從多個來源獲取價格數據的措施,以防範單一來源失準的問題,但該事件顯示出鏈下數據預言機的潛在風險:當上遊數據源出錯時,鏈上合約無從得知價格的具體計算過程,因此無法自動辨別異常。

防範措施

通過以上案例我們可以看到,預言機面臨的挑戰不僅限於數據來源的準確性,還涉及到其抗操控性和鏈下數據整合的安全性。有鑑於此,防範預言機攻擊就顯得尤為重要。如何提高預言機的安全性、可靠性以及抗操控能力,成為了我們在設計和使用預言機時必須考慮的關鍵因素。在接下來的部分,我們將探討在預言機設計中應當採取的一些有效措施,以應對不同類型的攻擊,並增強其系統的整體安全性。

1.採用多數據源,確保數據準確性。
案例分析:UwU Lend 價格操縱事件中,攻擊者通過操控 CurveFinance 池中的 sUSDE 價格,成功操控了 UwU Lend 的價格預言機。攻擊者利用價格操控漏洞從而獲取了系統未能正確評估的資產。如果 UwU Lend 使用了多數據源來確定 sUSDE 的價格,那麼即便某一個數據源被操控,系統也能通過其他數據源來驗證價格,減少被攻擊的風險。

延伸分析:該事件不僅涉及價格操控,還暴露了流動性不足的問題。若某個代幣在市場中缺乏足夠的流動性,交易深度淺,價格易受少量交易影響,從而使得預言機易被操控。因此,項目方上線新代幣時需要謹慎評估其市場流動性,以避免因流動性差導致的價格失真和安全風險。例如,Aave、Kamino 和 Scallop 等借貸協議,在設計時就會針對流動性較差的代幣進行更多限制,確保其借貸市場的穩定性和安全性。

優化方案:為確保數據準確性,協議應通過引入多個去中心化的預言機,如 Chainlink 或 Band Protocol,來收集不同交易所或流動性池的數據。這種多數據源策略可減少某一個數據源被操控時對系統整體安全性的影響。

2.去中心化數據聚合器,確保數據傳輸安全。
案例分析:Synthetix 的鏈下預言機故障暴露了鏈下數據源錯誤的風險。在此事件中,韓元價格被錯誤報告,導致交易機器人利用這一錯誤進行套利。若 Synthetix 採用了去中心化的數據聚合器,那麼即使一個鏈下數據源出錯,其他去中心化的數據源也能夠及時糾正這一問題。

優化方案:像 Uniswap V3 的改進措施一樣,使用去中心化的數據聚合器能夠提高數據傳輸的安全性。通過使用加密協議(如 TLS)和簽名驗證,結合去中心化的中繼節點,能夠防止中間人攻擊和數據篡改。例如,在 Chainlink 預言機中,每個數據源都經過多個獨立節點驗證,並使用加密技術保護數據傳輸,確保數據不可篡改。

3.在應用架構上模塊化設計,降低單點故障風險。
案例分析:許多攻擊事件暴露出 DeFi 協議在模塊化設計上的不足,缺乏足夠的防禦性機制。通過精心設計和構建獨立模塊,可以防止攻擊者利用系統中某一個漏洞對整個系統產生致命影響。例如,在 Synthetix 的鏈下預言機故障中,若開發團隊能提前設計模塊化的預警系統,能夠更快速地識別異常數據並進行修復。

優化方案:為了提高抗攻擊性,開發者可以在開發過程中使用分層架構,並確保每個模塊(數據源、驗證邏輯、傳輸模塊)都能獨立工作。例如,在下文提及的 Uniswap V3 中,通過將不同的流動性池價格信息存儲在獨立的觀察池中,協議能夠在多個池子間比較價格,從而減少某一池被操控的風險。在實際開發中,可以考慮採用接口封裝和依賴注入技術,將數據驗證模塊與其他邏輯分開,確保系統的靈活性和可維護性。

4.智能合約中的自適應防護機制。
雖然目前的預言機多采取靜態的防護措施,但面對高度動態的攻擊手段,智能合約本身也可以採取自適應的防護策略。比如,通過檢測價格異常波動的頻率來判斷是否存在攻擊,並在出現異常波動時觸發額外的驗證或回滾機制。這種自適應機制在面對瞬時的價格操控時,能自動保護系統免受潛在損失。

實際應用:一些 DeFi 協議通過實現類似“閾值報警”機制來實時檢測價格的劇烈波動,一旦價格波動幅度超出預設閾值,系統就會自動啟動額外驗證流程或觸發回滾,防止操控行為的擴展。例如,Balancer 協議通過設定價格偏離閾值,若發現價格過高或過低,則會暫停某些交易,直至進一步確認價格的合理性。

在以上討論的預言機設計和應用的優化基礎上,我們可以進一步研究 DeFi 應用中的具體方案。接下來,我們將介紹 Uniswap V2 的時間加權平均價格機制以及 V3 的改進方式。

DeFi 預言機應用的安全優化案例

DeFi 預言機應用的安全優化案例 預言機的安全性是 DeFi 協議的核心問題。為有效防範預言機攻擊,不少 DeFi 協議通過技術創新提供了寶貴借鑑。以 Uniswap 為例,其在鏈上價格生成和防禦機制方面的優化,為預言機設計帶來了新思路。對 Uniswap V2 和 V3 的比較揭示了技術手段如何提升預言機的抗操控能力,為智能合約安全設計提供了清晰路徑。

Uniswap V2 的 TWAP

Uniswap V2 中首次引入了 TWAP(Time-Weighted Average Price,時間加權平均價格) 預言機,允許鏈上開發人員在去中心化交易所(DEX)獲取價格數據。TWAP 是鏈上預言機,它的數據源來自 Uniswap 自身的鏈上交易數據,不使用任何鏈下數據。

UniswapV2Pair 合約中,_update() 函數是用於更新交易對的儲備量和價格累積器的核心 private 函數,它的設計主要是通過時間加權價格累積器幫助防止預言機攻擊。

函數的核心思路是通過記錄每個區塊內的時間加權價格變化,來限制攻擊者在單一時間點操縱價格的能力。具體而言,函數會獲取當前時間與上一次更新時間的差值 timeElapsed,並將這個時間差乘以交易對的當前價格,然後將計算結果添加到價格累積器 price0CumulativeLast 和 price1CumulativeLast 中。這個累積操作記錄了隨時間加權的平均價格,以平滑可能的價格波動。由於價格在一段時間內被累積,使得攻擊者需要在多區塊內連續操作,才能顯著改變價格,從而增大了操縱成本。

另外,該函數只在時間差 timeElapsed 大於 0 時才會更新價格累積器,這意味著在同一塊中,價格只會更新一次,限制了攻擊者在短時間內的操作頻率。為了有效操縱價格,攻擊者需要持續干預多個區塊,而不是單一區塊,這進一步降低了操縱的可能性。

從安全的角度來考慮,該函數的機制也較為完善。函數加入了防溢出檢查,確保儲備的最大值不會超出系統承載範圍,並且累積價格的計算也經過了溢出處理,這一設計使得外部操縱更加困難。

然而 V2 版本的預言機存在一些實際應用上的侷限性。例如,官方合約僅提供最新的價格累積值,開發者需要自行記錄和抓取歷史價格數據,技術門檻較高。此外,V2 版本的預言機沒有直接記錄交易對的深度信息,而交易對的深度直接關係到預言機在面對攻擊時的穩定性,深度越小越容易被操縱。

Uniswap V3

為了解決這些問題,Uniswap 在 V3 版本對預言機功能進行了改進。V3 的合約不僅保留了價格時間累積值,還增加了對歷史價格信息的存儲能力,可以最多支持 65,535 條記錄,這為開發者免去了手動存儲歷史數據的操作。

同時,V3 版本的預言機記錄了不同費率的流動性時間累積值,允許開發者選擇流動性較大的交易池作為價格參考來源,確保價格的相對準確性。所有與預言機相關的邏輯都被封裝在 Oracle 庫中,允許合約自動記錄每個交易的累積價格和流動性信息,而無需外部用戶手動維護。

另一個值得注意的變化是價格計算方式的調整。在 Uniswap V2 中,TWAP 的計算基於算術平均值,而 V3 則採用了幾何平均值。幾何平均值相對於算術平均值在工程實現上更具穩定性,且更適用於價格波動較大的環境,進一步降低了操縱的風險。

未來的趨勢

預言機攻擊的實施者主要包括有組織的攻擊團體、獨立黑客和可能具有內外合作的內部人士等。此類攻擊通常具備中等的技術複雜性,意味著攻擊者需要具備一定的區塊鏈和智能合約知識,同時掌握特定的漏洞利用技巧。伴隨著技術門檻的降低,預言機攻擊的複雜程度呈現出不斷下降的趨勢,這使得更多技術背景較淺的黑客有可能介入。

在預言機攻擊中,自動化手段的使用程度較高。大多數攻擊者會使用自動化工具掃描、分析鏈上數據,以快速識別並利用預言機價格波動和數據延遲等安全漏洞。例如,套利機器人和自動化腳本可在毫秒級內完成對價格變化的響應,以確保攻擊者在市場調整前獲利。隨著區塊鏈網絡的去中心化發展,這類自動化手段正在變得越來越高效,使得預言機攻擊更加精準、隱蔽。

從未來趨勢來看,隨著準確定價機制的逐步標準化,例如基於時間加權平均價格(TWAP)或加密簽名的多重數據源驗證的廣泛採用,預言機數據的可靠性和抗操控性將逐步增強,這可能會降低預言機攻擊的可行性。然而,新的攻擊方式也可能隨之出現,特別是結合不同的套利方式繞過檢查等,仍需要 DeFi 開發者提高警惕。預言機安全的未來發展將取決於去中心化的數據防護手段的持續改進,以及對潛在攻擊矢量的前瞻性防範。

總結

本文深入探討了預言機在 DeFi 系統中的關鍵作用及其面臨的安全風險,涵蓋預言機類型、開發實例、案例分析和防範措施,重點剖析了閃電貸預言機攻擊及預言機故障導致的隨機攻擊。通過這些分析,文章揭示了預言機在 DeFi 安全設計中的核心地位及其抗操控性的重要性,為讀者指引預防預言機攻擊的主要方式。

聲明:本文內容僅供參考,旨在學習交流預言機攻擊相關知識,不構成實際操作或教學案例的指導。

作者: Doris
譯者: Sonia
審校: Piccolo、Edward、Elisa
譯文審校: Ashely、Joyce
* 投資有風險,入市須謹慎。本文不作為Gate.io提供的投資理財建議或其他任何類型的建議。
* 在未提及Gate.io的情況下,複製、傳播或抄襲本文將違反《版權法》,Gate.io有權追究其法律責任。
即刻開始交易
註冊並交易即可獲得
$100
和價值
$5500
理財體驗金獎勵!