Balancer V2攻擊事件初步分析

11月3號,Balancer V2協議及其fork項目在多條鏈上遭受攻擊,導致超過$120M的嚴重損失。BlockSec在第一時間預警[1],並給出初步分析結論[2]。這是一起高度復雜的攻擊事件。我們的初步分析表明,根本原因在於攻擊者操縱了不變量(invariant),從而扭曲了 BPT(Balancer Pool Token ) – 也就是ool的LP token – 價格的計算,使其能夠通過一次 batchSwap 操作在某個穩定池(stable pool)中獲利。

背景知識

1. 縮放(scaling)與取整(rounding)

爲統一不同代幣的小數位,Balancer 合約會:

  • upscale:把餘額與數額放大到統一內部精度再做計算;
  • downscale:把結果縮回原生精度,並進行有方向的取整(例如輸入端通常向上取整,確保池子不少收;輸出路徑常有向下截斷)。

結論:同一筆交易內,不同環節採用的取整方向不對稱,在極小步反復執行時,會產生系統性微小偏差。

2. D 與 BPT 價格

遭受本次攻擊影響的是Balancer V2協議的 Composable Stable Pool [3]以及fork的協議。Stable Pool 用於那些預期可以保持接近 1:1 兌換比例(或在已知匯率下進行兌換的資產),允許在不產生顯著價格衝擊的情況下進行大額兌換,從而大幅提升相似資產或相關資產之間的資金利用效率。

  • 該pool採用 Stable Math(基於 Curve 的 StableSwap 模型),不變式 D 代表池子的“虛擬總價值”。
  • BPT (Pool的LP Token) 價格近似爲:

從上述公式可以看出若能讓D 在帳面上變小(哪怕資金實際未流失),就能讓BPT 價格更便宜。BTP 代表的是Pool的份額,用於計算撤出流動性的時候能獲得多少Pool中Reserve,因此如果攻擊者能獲得更多的BPT,最後在撤出流動性的時候就能獲利。

攻擊分析

以 Arbitrum 上的一筆攻擊交易爲例,batchSwap 操作可分爲三個階段:

第一階段: 攻擊者將 BPT 兌換爲底層資產,以精確地調整其中一種代幣(cbETH)的餘額至四舍五入邊界的臨界點(數量 = 9)。這一步爲下一階段的精度損失(precision loss)創造了條件。

第二階段: 攻擊者使用精心構造的數量(= 8),在另一種底層資產(wstETH)與 cbETH 之間進行交換。由於在縮放代幣數量時進行了向下取整(rounding down),計算得到的 Δx 略小(從 8.918 變爲 8),從而導致 Δy 被低估,並使不變量 D(來源於 Curve 的 StableSwap 模型)變小。由於 BPT 價格 = D / totalSupply,BPT 價格被人爲壓低。

第三階段: 攻擊者將底層資產反向兌換回 BPT,在恢復池內平衡的同時,利用被壓低的 BPT 價格獲利 – 獲得更多的BPT Token.

最後,攻擊者利用另外一個獲利交易進行流動性撤回,從而利用多獲得的BPT獲得 Pool中其他底層資產 (cbETH和wstETH)從而獲利

攻擊交易:

獲利交易:

Reference:

[1]

[2]

[3]

BPT-0.55%
查看原文
此頁面可能包含第三方內容,僅供參考(非陳述或保證),不應被視為 Gate 認可其觀點表述,也不得被視為財務或專業建議。詳見聲明
  • 讚賞
  • 留言
  • 轉發
  • 分享
留言
0/400
暫無留言
交易,隨時隨地
qrCode
掃碼下載 Gate App
社群列表
繁體中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)