11月3日、Balancer V2プロトコルおよびそのフォークプロジェクトが複数のオンチェーンで攻撃を受け、$120M以上の深刻な損失が発生しました。BlockSecは最初に[1]を警告し、初期分析の結論[2]を提供しました。これは高度に複雑な攻撃事件です。私たちの初期分析によれば、根本原因は攻撃者が不変量(invariant)を操作し、BPT(Balancer Pool Token ) – つまりoolのLPトークン – の価格計算を歪めたためであり、これにより一回のbatchSwap操作で特定の安定プール(stable pool)で利益を得ることができました。
異なるトークンの小数点以下の桁数を統一するために、Balancer コントラクトは:
結論:同一の取引内で、異なる段階で採用される丸め方向が非対称である場合、極小のステップで繰り返し実行すると、システム的な微小な偏差が生じる。
今回の攻撃の影響を受けたのは、Balancer V2プロトコルのComposable Stable Pool [3]およびフォークされたプロトコルです。Stable Poolは、1:1の交換比率を維持できると予想される資産(または既知の為替レートで交換される資産)向けに設計されており、大規模な交換を行っても顕著な価格衝撃を引き起こさず、類似資産または関連資産間の資金利用効率を大幅に向上させることができます。
!
上記の公式から、Dを帳簿上で小さくすることができれば(実際に資金が流出していなくても)、BPTの価格をより安くすることができることがわかります。BTPはプールのシェアを表し、流動性を撤回する際にプール内のリザーブからどれだけ得られるかを計算するために使用されます。したがって、攻撃者がより多くの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 価格が人為的に押し下げられます。
第3段階:攻撃者は基盤資産を逆にBPTに交換し、リカバリープール内のバランスを回復させると同時に、押し下げられたBPT価格を利用して利益を得る – より多くのBPTトークンを獲得する。
最後に、攻撃者は別の利益を上げる取引を利用して流動性を撤回し、追加で得たBPTを使用してプール内の他の基礎資産(cbETHとwstETH)から利益を得ました。
アタックトレーディング:
収益性の高い取引:
参考:
[1]
[2]
[3]
9.33K 人気度
59.58K 人気度
24.48K 人気度
6.08K 人気度
18.2K 人気度
Balancer V2 攻撃の予備分析
11月3日、Balancer V2プロトコルおよびそのフォークプロジェクトが複数のオンチェーンで攻撃を受け、$120M以上の深刻な損失が発生しました。BlockSecは最初に[1]を警告し、初期分析の結論[2]を提供しました。これは高度に複雑な攻撃事件です。私たちの初期分析によれば、根本原因は攻撃者が不変量(invariant)を操作し、BPT(Balancer Pool Token ) – つまりoolのLPトークン – の価格計算を歪めたためであり、これにより一回のbatchSwap操作で特定の安定プール(stable pool)で利益を得ることができました。
背景
1. スケーリング(scaling)とラウンド(rounding)
異なるトークンの小数点以下の桁数を統一するために、Balancer コントラクトは:
結論:同一の取引内で、異なる段階で採用される丸め方向が非対称である場合、極小のステップで繰り返し実行すると、システム的な微小な偏差が生じる。
2. D対BPT価格
今回の攻撃の影響を受けたのは、Balancer V2プロトコルのComposable Stable Pool [3]およびフォークされたプロトコルです。Stable Poolは、1:1の交換比率を維持できると予想される資産(または既知の為替レートで交換される資産)向けに設計されており、大規模な交換を行っても顕著な価格衝撃を引き起こさず、類似資産または関連資産間の資金利用効率を大幅に向上させることができます。
!
上記の公式から、Dを帳簿上で小さくすることができれば(実際に資金が流出していなくても)、BPTの価格をより安くすることができることがわかります。BTPはプールのシェアを表し、流動性を撤回する際にプール内のリザーブからどれだけ得られるかを計算するために使用されます。したがって、攻撃者がより多くの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 価格が人為的に押し下げられます。
!
第3段階:攻撃者は基盤資産を逆にBPTに交換し、リカバリープール内のバランスを回復させると同時に、押し下げられたBPT価格を利用して利益を得る – より多くのBPTトークンを獲得する。
最後に、攻撃者は別の利益を上げる取引を利用して流動性を撤回し、追加で得たBPTを使用してプール内の他の基礎資産(cbETHとwstETH)から利益を得ました。
アタックトレーディング:
収益性の高い取引:
参考:
[1]
[2]
[3]