跳到正文

預言機攻擊

預言機攻擊利用可操縱、過時、縮放錯誤或設定錯誤的外部資料,使協定以不安全的數值借貸、鑄造、贖回、結算或清算。

更新於

僅供教育參考,不構成投資建議;投資可能產生損失。

直接答案

預言機攻擊利用協定的資料信任邊界,讓價格、匯率、指數、資產淨值或狀態輸入觸發經濟上不安全的操作。攻擊者可能操縱流動性薄弱的交易場所、攻破報告者或金鑰、利用聚合或更新規則,也可能藉由借入資金,利用使用端缺少的新鮮度、單位、範圍與備援檢查。即使預言機營運者沒有惡意,過時或設定錯誤的資料源也可能造成相同損失,因此事件分析必須區分攻擊路徑與故障模式。

關鍵比較不是顯示價格是否劇烈波動,而是影響合約實際採用數值的成本與風險,是否低於借貸、鑄造、贖回、結算或清算可提取的可執行價值。閃電流動性可以為原子路徑融資,但它不會製造有缺陷的信任邊界,也不是利用漏洞的必要條件。

預言機數值也不一定是可成交的市場價格。每次審查都必須將數值綁定至鏈、區塊、資料源或池地址、基礎與報價資產方向、小數位數、時間戳、聚合方式、市場規模及使用函式。有效簽章只證明誰依某種方案報告資料;本身不證明資料新鮮、來源獨立、市場深度充足或經濟上正確。

運作方式

  1. 鎖定部署:鏈、區塊、使用端合約與函式、資產合約、資料源代理或池、聚合器、基礎與報價資產、小數位數、管理員及升級狀態。
  2. 對應從交易所、池或報告者,經聚合、簽章、代理或轉接器、備援機制到使用邏輯的完整信任路徑;記錄共用的場所、營運者、金鑰與治理,不能把不同標籤直接視為獨立來源。
  3. 精確重現鏈上讀取:答案、輪次中繼資料、時間戳、適用的信賴區間或狀態、小數正規化、報價方向反轉、排序器狀態與寬限期、最大資料年齡、偏差界限,以及零值或負值處理。
  4. 建立使用端曝險帳本:擔保品係數、清算門檻、借款與供應上限、可用流動性、債務、鑄造或贖回限額、關閉因子、清算獎勵,以及該數值可啟用的所有操作。
  5. 依可執行規模模擬操縱,納入準備金、活躍流動性、觀察值、視窗與加權慣例、費用、套利、區塊排序、閃電或自有資金、平倉損失、gas、MEV 及競爭清算者。
  6. 測試控制與故障狀態:獨立來源、TWAP 觀察容量、限額、熔斷器、暫停權限、時間鎖、過時或偏離的備援資料、報告者或金鑰遺失、L2 排序器停機、真實價格跳空,以及 fail-open 與 fail-closed 行為。
  7. 監控並核對 canonical 資料輪次、代理與設定變更、來源偏差、協定操作、清算、壞帳、暫停及復原決策;流動性、資產上架、升級或市場狀態改變後重新分析。

現貨 AMM 讀數通常可在單筆交易內改變。時間加權平均要求跨觀察值維持影響,可能提高攻擊成本,但安全性取決於具體算術或 tick 慣例、視窗、觀察容量、流動性分布及區塊控制。中位數能排除部分異常值,但上游場所相關或法定人數不足仍會損害安全性或活性。心跳與偏差設定決定部分資料源何時發布;使用端仍須制定自身的新鮮度與有效性政策。

計算範例

  • 恆定乘積現貨。 忽略池的費用,準備金為 1,000,000 ABC1,000,000 USDC,因此 k = 10^12。目標邊際價格 9 USDC/ABC 要求準備金變為 3,000,000 USDC333,333.333333 ABC:交易者投入 2,000,000 USDC,取得 666,666.666667 ABC。最終邊際價格為 3,000,000 / 333,333.333333 = 9,平均成交價為 2,000,000 / 666,666.666667 = 3 USDC/ABC。相較之下,投入 5,000,000 USDC 後準備金為 6,000,000166,666.666667,邊際價格是 36,不是 9。實際費用、套利、集中流動性與平倉會改變帳本。
  • TWAP 慣例。 十個等權一分鐘觀察值中,九個價格為 100,一個為 160。教學用算術 TWAP 為 (9 * 100 + 160) / 10 = 106,只比 100 高 6%,即使最後現貨高出 60%。若其他九個仍為 100,要使算術平均達到 130,遭操縱的觀察值必須是 400。Uniswap v3 的 tick 均值採幾何口徑,並非此算術範例,因此使用端必須重現已部署慣例。
  • 中位數與法定人數。 七個正規化觀察值為 [99, 100, 100, 101, 101, 500, 600];中位數為 101,兩個極端報告無法讓結果偏離誠實值群。若接受結果需要五個即時報告,而三個誠實報告者離線,就只剩 4 < 5:抵抗異常值不等於可用性,備援行為也成為安全模型的一部分。
  • 過時資料與錯誤清算。 八位小數的資料源回傳原始值 140,000,000,000,即 1,400,但資料年齡為 17 minutes,超過使用端上限 15 minutes,因此應拒絕。若仍用該過時數值計算 10 ETH75% 清算門檻及 12,000 債務,健康因子為 10 * 1,400 * 0.75 / 12,000 = 0.875;按最新價格 2,000 計算則為 1.25。之後修正價格不會撤銷已完成的清算。

風險

  • 鏈、資產、資料源、代理、池或使用端地址錯誤。
  • 基礎與報價資產方向反轉,或計價單位不一致。
  • 資料源、代幣與內部定點數的小數正規化錯誤。
  • 接受過時資料,或誤把心跳與偏差觸發條件當成新鮮度保證。
  • 接受不完整輪次、無效狀態、零值、負值、封頂值或越界答案。
  • 流動性薄弱的單一場所現貨價格控制龐大協定曝險。
  • TWAP 視窗過短、觀察稀疏、加權錯誤或讀取方向錯誤。
  • 誤解觀察容量、初始化、內插或備援行為。
  • 集中或即時流動性使池總價值無法反映攻擊成本。
  • 多個資料源共用相同交易所、資料商、營運者、金鑰或控制平面。
  • 報告者、交易所、API、簽署者、網路或法定人數故障破壞更新或完整性。
  • L2 排序器停機,或復原寬限期缺失、設定錯誤,暴露過時狀態。
  • 備援資料過時、循環相依、相關、縮放不同或語意不相容。
  • 閃電流動性與原子可組合性使短暫影響可用於獲利。
  • 預言機更新排序、搶先交易、夾擊、尾隨交易或清算 MEV 改變收益。
  • 擔保品係數、清算門檻、限額、獎勵與可用流動性放大小幅錯誤。
  • 治理方、管理員、guardian、多簽或簽署金鑰遭攻破,改變信任路徑。
  • 代理、聚合器、轉接器、升級、儲存或設定錯誤選取錯誤數值。
  • 熔斷器或 fail-closed 邏輯在壓力期凍結正常借貸、還款或清算。
  • 暫停、復原、帳戶核對、壞帳分配或跨協定隔離失敗。

常見誤解

  • 「每次預言機攻擊都會攻破預言機網路。」 許多故障利用薄弱來源、過時數值、錯誤單位、不安全轉接器或使用邏輯,而報告網路仍按設定運作。
  • 「多個或去中心化資料源保證價格正確。」 來源獨立性與品質、法定人數、新鮮度、單位、聚合與使用端檢查仍不可少。
  • 「TWAP 讓操縱不可能發生。」 它改變影響所需時長與成本;薄弱視窗、稀疏觀察、淺流動性或區塊控制仍可能遭利用。
  • 「禁止閃電貸就能消除預言機風險。」 閃電貸只是一種融資方式;自有資金、信用、跨協定借貸、報告者遭攻破及設定錯誤仍存在。
  • 「價格復原就會撤銷損失。」 canonical 借貸、鑄造、贖回、結算及清算仍然有效,除非協定另有獲授權的復原流程。

相關主題

資料來源

導覽

搜尋知識庫...