PeckShield:DeFiプラットフォームBalancerがハッキングされ、技術的解体の全プロセスが発生
PeckShield
2020-06-30 03:17
本文约2036字,阅读全文需要约8分钟
Balancer 上のデフレトークンとそのスマートコントラクトは、一部の特定のシナリオでは互換性がなく、攻撃者が価格偏差のある STA/STONK 流通プールを作成し、そこから利益を得ることができ

編集者注: この記事は以下から引用しましたPeckShield(ID:PeckShield)、許可を得てOdailyによって転載されました。

編集者注: この記事は以下から引用しました

、許可を得てOdailyによって転載されました。

北京時間6月29日午前2時3分、最近「借りてマイニング」モデルで注目を集めているDeFiプラットフォームBalancer上の2つのERC20デフレトークンプールSTAとSTONKがハッキングされ、総額50万ドル以上を失った。

PeckShieldのセキュリティ担当者が分析に介入した後、彼らはすぐに問題の本質を突き止め、バランサー上のデフレトークンとそのスマートコントラクトは特定のシナリオでは互換性がなく、攻撃者が価格偏差のあるSTA/STONK流通プールを作成して利益を得ることができた。 。

ハッカーの攻撃は、具体的には次の 4 つのステップに分かれていました。

1) 攻撃者はフラッシュ ローンを通じて dYdX プラットフォームから 104,331 WETH を貸し出しました。

2) 攻撃者は、バランサーが所有する STA トークンのほとんどがなくなるまで swapexactMountin() 呼び出しを繰り返し実行し、その後、次の攻撃を開始します。最終的に、バランサーには 0.000000000000000001 STA しか残りません。

3) 攻撃者は、STA トークンとバランサー スマート コントラクトの間の非互換性、つまり簿記と残高の不一致を利用して攻撃を実行し、ファンド プール内の他の資産を使い果たし、最終的に合計 523,616.52 ドル相当の資金を稼ぎ出しました。デジタル資産。4) 攻撃者は dYdX から貸したフラッシュローンを返済し、攻撃で得たデジタル資産を奪い取ります。フラッシュローン取引

副題

バランサーがハッキングされ、技術的に解体された全プロセス

画像の説明

(ハッキングの全プロセスを図解)

ステップ 1: フラッシュ ローン

dYdX フラッシュ ローン 104,331 WETH から、DeFi 融資モデルに精通している読者であれば、この部分については比較的明確に理解できるはずなので、ここでは繰り返しません。

ステップ 2: バランサーの STA アセットをクリアする

攻撃者は、次の攻撃に備えて swapExactAmountIn() を複数回呼び出して、Balancer の STA 資産を空にしました。特筆すべきは、コントラクトコードには実際に一度に交換できる資産の量に上限があることが判明したことですが、狡猾な攻撃者は交換できるWETHの最大量を事前に計算し、巧妙に攻撃しました。バランサーには 0.000000000000000001 STA だけが残りました。

ステップ 3: 利益のための攻撃

最初の 2 つの準備ステップが完了したら、攻撃者の本当のスキルを発揮するときが来ました。

(ステップ 3: 攻撃利益アイコン上)

上記に基づき、攻撃者は swapExactAmountIn() 関数を通じて 0.0000000000000000001 STA を BPool に送信し、すぐに 30,347 WETH と非常に高い価値の差を交換して利益を獲得しました。このとき、BPool の内部アカウンティング メカニズム _records[STA] は、BPool が実際に 0.000000000000000001 STA を受信する前に 1 を追加します (注: その後、攻撃者は gulp() を使用して値をリセットします)。

画像の説明


(ステップ 3: 攻撃から利益を得るためのアイコンの下)

さらに、swapExactAmountIn() の最後で、_pullUnderlying() が、対応する消費された STA を攻撃者側から収集しようとしていることがわかりました。ただし、STA も送金時に手数料の 1% を消費するため、実際の BPool は STA を受け取りません。これにより、BPol の実際の STA 残高と内部簿記との間に不一致が発生します。

最終的に、上の図に示すように、攻撃者はフラッシュ ローンから借りた 104,331 WETH を返済しました。

提案

副題

提案

もちろん、セキュリティインシデントが発生してから対策を取るだけでは、すでに発生した損失を補うことはできず、事前に防ぐことが最善の解決策であると考えています。 DeFiプロジェクトの開発者は、可能な限り優れたコード仕様を利用する必要があり、オンラインに移行する前に包括的な攻撃的および防御的テストを実施して、潜在的な抜け穴を可能な限りすべて見つけるためにサードパーティのセキュリティ会社の支援を求めることができます。最後に、可能な限り、ERC20、ERC777、その他の DeFi プロジェクトの組み合わせについて徹底的な調査を行ってください。

フォローアップ

副題

フォローアップ

PeckShield
作者文库