Price Manipulation Exploits, Christoph Michel - DeFi Security Summit 2022
三句話摘要
借貸協議如何從價格預言機的設計漏洞中反覆被攻擊,以及每一代協議是如何試圖修復前一代的漏洞。 借貸協議的漏洞史警示我們:安全不在於公式本身的優雅,而在於對底層資產機制的深刻理解和謹慎的風險設計選擇。 閃電貸攻擊的原理:攻擊者存入抵押品後,在AMM上進行大額交易臨時改變價格,以虛假低價借出代幣,再反向交易恢復價格,損失僅限手續費但獲利巨大。這被稱為「價格操縱漏洞」的起源,促使協議從現貨價格改用時間加權平均價格。
重點整理
重點- 1
閃電貸攻擊的原理:攻擊者存入抵押品後,在AMM上進行大額交易臨時改變價格,以虛假低價借出代幣,再反向交易恢復價格,損失僅限手續費但獲利巨大。這被稱為「價格操縱漏洞」的起源,促使協議從現貨價格改用時間加權平均價格。
- 2
LP代幣定價的隱藏風險:雖然LP代幣價格公式看似簡單(資金池價值÷總供應量),但在Uniswap的恆定乘積曲線上,沿著曲線移動(即交易)不改變K值卻會改變池中代幣總量,進而操縱LP代幣價值。What Finance和Cream Finance都因此被利用。
- 3
超額抵押的數學陷阱:雖然借貸協議要求超額抵押(抵押品價值>借出金額),但攻擊者可用兩個賬戶形成閉環——賬戶A借LP代幣給B,B再存入A借出的代幣作新抵押品,循環反覆直到存入LP數量超過流動池總供應量,再操縱價格翻倍,使虛假抵押品變成真實借貸力。
- 4
現代應對策略:現代協議(如Aave)理解到預言機安全性取決於資產本身特性,因此嚴格限制高流動性資產作為抵押品、避免將LP代幣作為抵押品、並注意Uniswap V3流動性集中帶來的新漏洞表面。
實用技巧與重點
乾貨- 時間軸與被攻擊協議:
- 2020年初:V1漏洞(現貨價格),Uniswap V2出現
- 2020年中:What Finance遭LP代幣價格操縱攻擊
- 2021年10月:Cream Finance被牆椅代幣價格操縱攻擊
- 關鍵概念:
- 恆定乘積公式:x × y = K
- Uniswap V2現貨價格:邊際交換比率(隨交易量動態變化)
- 時間加權平均價格(TWAP):防止單筆大交易操縱
- LP代幣V2定價:池價值 ÷ LP總供應量
- LP代幣V3公式:2 × √(P0 × P1 × K) ÷ 總供應量(其中P0、P1為代幣對TWAP,K為常數)
- 攻擊步驟細節:
- 攻擊者用兩個賬戶(A和B)配合
- 賬戶A進行閃電貸,存入作抵押品
- 賬戶A借入所有可用LP代幣,轉給賬戶B
- 賬戶B將收到的LP代幣再存入作抵押品
- 賬戶A再次借入同一批LP代幣,迴圈操作
- 循環持續到存入LP數量 > 總供應量 ÷ (2 × 抵押因子 - 1)
- 向Uniswap拋售代幣,操縱LP價格翻倍
- 以膨脹的LP抵押品價值借出ETH等高價值資產
- 可選:清算自己賬戶獲折扣
- 償還閃電貸,淨獲利
- 抵押因子設定:
- 所有提到的協議抵押因子 < 100%(即超額抵押要求)
- 這使循環借貸數學上可行(總供應量本身成為上限)
結論
結論“借貸協議的漏洞史警示我們:安全不在於公式本身的優雅,而在於對底層資產機制的深刻理解和謹慎的風險設計選擇。”
完整解析
詳細借貸協議的核心問題是:如何安全地從去中心化交易所(如Uniswap)獲取資產價格,以決定用戶能借多少錢?這個看似簡單的問題,在過去四年裡反覆擊敗了業界最聰慧的開發者。
最初的第一代協議採用現貨價格——即AMM當下的邊際交換比率。這在2020年初被一個致命的新機制破壞:閃電貸。攻擊者在同一筆交易內進行攻擊,存入一筆抵押品,立刻在AMM上進行巨額交易臨時改變價格(因為AMM的價格由池深度決定,交易量越大價格滑點越大),然後以這個虛假低價借出目標代幣,再反向交易恢復價格。整個過程只損失交易手續費,卻能借到本應更貴的代幣。這種「靴子掉下來」的攻擊徹底改變了整個領域,促使第二代協議改用時間加權平均價格(TWAP),這個價格基於過去一段時間的交易均值,攻擊者無法在單筆交易內改變它。
但修復現貨價格問題後,新需求出現了:用戶想用LP代幣(Uniswap流動性供應者代幣)作為抵押品。LP代幣代表對底層資金池的索取權,其價值應該等於「池中所有代幣的總價值÷LP代幣總供應量」。這個公式看起來簡單,但 What Finance在2020年因此被攻擊。問題根源於人們對Uniswap運作機制的誤解:雖然恆定乘積公式(x × y = K)意味著K值不變,但沿著這條曲線移動意味著池中代幣的實際數量在變化。攻擊者發現,他們可以操縱池中代幣的比例,進而改變LP代幣對應的底層資產組成,最終操縱LP代幣的價值。
第三代協議試圖透過數學推導解決這個問題。他們發現可以推導出一個只依賴於「各代幣的TWAP、初始價格和K值」的公式:LP代幣價格 = 2 × √(P0 × P1 × K) ÷ 總供應量。因為K值在交易中不變,TWAP和初始價格理論上也不受單筆交易影響,這個新公式應該無法被操縱。但Cream Finance在2021年10月證明了這個理論有致命漏洞。
攻擊者發現,雖然LP代幣價格公式無法被傳統的價格操縱擊敗,但他們可以操縱一個更根本的東西:被存入的LP代幣數量本身。借貸協議使用超額抵押(要求抵押品價值 > 借出金額),所以理論上用戶無法存入超過LP代幣總供應量的數量。但攻擊者用兩個賬戶巧妙地繞過這個限制:賬戶A進行大額閃電貸並存入作抵押品,再借出LP代幣轉給賬戶B;賬戶B將收到的LP代幣再存入作新的抵押品;賬戶A再次從賬戶B的新抵押品中借出同一批LP代幣。這個循環可以無限重複,直到存入的LP代幣數量超過原始總供應量。一旦達到這個狀態,攻擊者向Uniswap拋售大量代幣操縱價格翻倍,此時那些被「複製」出來的超額LP代幣在公式中就代表更大的池價值。攻擊者以這個膨脹的抵押品價值借出真實資產(如ETH),償還閃電貸後獲利。
從這些反覆的攻擊中,業界逐漸理解到三個根本教訓。首先,攻擊者總能在同一筆交易內操縱價格,所以協議應該設計成「可以在同一交易內被操縱的預言機會帶來攻擊者自身的風險」——比如要求攻擊者在整個區塊內持續操縱價格,這樣就存在套利者的對沖風險。其次,預言機的安全性取決於具體的資產特性,沒有通用的萬能公式。最重要的是,現代協議理解到應該限制哪些資產可以作為抵押品,特別是LP代幣這類容易被結構化操縱的資產應該被排除。現代協議如Aave嚴格控制抵押資產的範圍,優先選擇高流動性的基礎資產,而非衍生品或LP代幣。
關鍵時刻
Pipeline v2帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。
事實查核
Pipeline v2說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

