価格操作攻撃についての第 2 の理解

その他の関連コンテンツは次の場所にあります:個人ホームページ

この記事の主な参考資料は METATRUST のクジラ船のシェアリングです。リンクは次のとおりです。

MetaTrustの価格操作攻撃の共有

価格操作のソース:

ブロックチェーンの世界では、すべてのノードのコンセンサスを維持するために、ブロックチェーンは各ノードがチェーンの外で独立して情報を取得する能力を去勢します。

ブロックチェーンが外界と同様の価格情報を取得したい場合、方法は 2 つしかありません。

  • Chainlink と同様のエンティティを通じて価格を積極的にフィードし、価格データをチェーンに継続的に公開します。
  • uniswap などのスマート コントラクトに保存されているパラメーターを介して直接。

例: これは取得したい WETH 価格です。これは外部データです

getReserves()ETH 価格をリクエストすると、財務モデルの計算により対応する値が返されます。

ここでフラッシュ ローンが使用される場合、財務モデルが正しく計算されていない場合、計算された WETH に問題が発生する可能性があります。

画像-20231216214431185

価格操作攻撃とは次のとおりです。

価格操作攻撃とは、不当な利益操控市场的买卖行为(操控流动性池或地址余额)を追求することを指します。人为地影响产品或资产价格

価格操作の 4 つの要素:

  • 市場支配力の非対称性:フラッシュレンディングを通じて多額の資金を保有
  • 売買行動の操作:大量のトークン交換、市場メカニズム(市場流動性)の破壊
  • 価格への悪影響:資産価格計算ミス(脆弱な価格照会メカニズム)
  • 不当な利益の追求: 異常な額の報酬や担保

実質価格操作攻撃のケース:

画像-20231216215338496

通常のプロセス:

  • ユーザーはBNBとUSDTを誓約し、LP流動性証明書を取得します。
  • 次に、getReward() 関数を呼び出して LP を引き換えて特典を取得します。
  • 流動性を削除するプロセス中に、プール内の BNB トークンは Bunny トークンに交換されます。

攻撃プロセス:

スローフォグパンケーキ攻撃解析が見られる

  • 最初の取引のために特定の LP 流動性証明書を取得する

  • ユーザーはフラッシュローンを通じて多額のBNBとUSDTを交換した

  • 2 番目のトランザクションであるフラッシュ ローンは、プールに大量の流動性を追加し、同時に getReward() 関数を呼び出します。

  • まず、大量のBNBとUSDTが存在するWBNB-USDTプールにLPを移して流動性を除去します。

  • その後、大量のBNBとUSDTがWBNB-BUNNY流動性に変換され、WBNBプール内のWBNBの数が急増しました。

  • そして、取得したWBNB-BUNNYのLP番号に従って、valueOfAsset函数计算LP价值

  • 问题就出在valueOfAsset进行LP价值计算的时候,通过WBNB-BUNNY池子中的WBNB实时数量计算、結果的に 1 枚の LP の価値が大幅に増加します

脆弱性機能

画像-20231217113643150

getReserve() 関数は、プール内の BNB 残高を計算し、それを直接使用して BNB に対する LP の値を計算します。

具体的な財務モデルの計算:

画像-20231216220150156

価格操作攻撃を回避する方法:

画像-20231217113754981

脆弱な問い合わせメカニズムの使用を回避するには、主に 3 つの方法があります。

  • EOA (Chainlink) などのエンティティを通じて価格を継続的に供給
  • 複数のソースから価格を収集し、さまざまなソースからの価格の加重平均を実行します。
  • 過去の期間の価格の加重平均 (ユニスワップ) を実行します。

機密性の高い操作のための変数データは、ユーザーが操作しやすいデータに依存してはなりません。そうしないと、危険が生じやすくなります。

テイント分析を使用した脆弱性の検出

おすすめ

転載: blog.csdn.net/m0_53689197/article/details/135042846