iT邦幫忙

0

Day 23:著名案例三 — 其他值得學習的攻擊(Oracle 操控、Flash Loan 攻擊)

  • 分享至 

  • xImage
  •  

除了 The DAO、跨鏈橋事件之外,還有另一類非常值得學習的攻擊:利用外部價格來源(oracle)或瞬時借貸(flash loan)做出的經濟性攻擊。這類攻擊通常成本低、爆發快,且會把協議設計上的「假設」撕裂開來。今天挑兩個具代表性的向量來講:Oracle 操控(price oracle manipulation) 與 閃電貸(Flash Loan)攻擊,並總結可行的防護措施。

🔹 一、Oracle 操控(Price Oracle Manipulation)
概念速記
價格 Oracle 提供鏈上合約外界價格資訊(例如 token 價格)。若 Oracle 被操控,任何依賴該價格的邏輯(借貸抵押、清算、AMM 定價等)都會被錯誤觸發。
攻擊流程(簡化)
攻擊者觀察到某合約使用單一資料來源(如某去中心化交易對的 on-chain price)作為價格依據。
攻擊者以少量資本買入或賣出該交易對,迅速拉抬或打壓其 on-chain 價格(因流動性低,價格容易被推動)。
協議讀取被操控的價格並執行,例如認為某資產被高估或低估,觸發清算或錯誤借貸額度。
攻擊者利用錯誤邏輯套利,提走資金。
代表性案例(類型)
協議直接把某 AMM 的即時價格當作抵押估值來源,導致被操控。
Oracle 更新機制過於稀疏或採單一來源,缺乏抗操控性。
防禦建議
多 Oracle 聚合(multi-source):結合多個價格來源取中位數或加權平均。
TWAP(時間加權價格):用時間窗口平滑短時異常價格。
限制滑價 / 有最大接受偏差:若價格變動超過閾值則暫停關鍵動作或二次確認。
提高市場深度 / 使用更深 liquidity pool:避免使用流動性極淺的對做價格來源。
監控與告警:即時偵測價格異常並自動觸發風控(例如暫停清算)。

🔹 二、閃電貸攻擊(Flash Loan Exploit)
概念速記
閃電貸允許在單一交易中借入大量資金,條件是交易結束前必須還清。攻擊者利用閃電貸「零初始資本」快速放大操作,配合 Oracle 或 AMM 造成價格扭曲並套利。
攻擊流程(通用模板)
使用閃電貸借入大量資產(如 10,000 ETH)。
在多個 DeFi 協議中連鎖操作(例如在某 AMM 大量換入/換出以操控價格、在借貸協議造成錯誤抵押估值),觸發清算或錯誤的抵押比率計算。
利用價差或被錯誤分配的資金進行套利。
在交易同一個區塊內還回閃電貸,保留利潤。
真實案例(類型)
攻擊者用閃電貸操控某 AMM 價格,導致借貸協議被錯誤清算,從而獲得清算回報或提走抵押資產。
結合多個協議路徑(DEX、借貸平台、穩定幣池)做「價格旋轉」套利,留下協議損失。
防禦建議
避免直接使用單一 AMM spot price 作為 oracle;改用 TWAP / chainlink 等抗操控來源。
增加清算門檻與延遲機制:例如引入 delay、閾值或二次確認,讓短時操控不會立刻觸發大金額清算。
設計滑動限制(slippage limits)與大小上限:防止單筆交易改變過大比例流動性。
模擬攻擊情境(economic adversarial testing):使用模擬器或 fuzz 工具測試在極端閾值下的系統行為。
強化監控:偵測鏈上異常資金流、突增的交易量或極端價格變化,及早手動介入或自動暫停敏感功能。

Oracle 操控與閃電貸攻擊教會我們一件事:很多看起來是「程式錯誤」的損失,實際上是設計假設被打破。
在 DeFi 生態裡,單一環節(價格來源、流動性假設、清算參數)都可能被精算與利用。
因此設計 DeFi 協議時,既要寫好合約,也要做「經濟安全設計」、引入監控與回應流程,才是真正防守得住的策略。


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言