その他の関連コンテンツは次の場所にあります:個人ホームページ
この記事の主な参考資料は METATRUST のクジラ船のシェアリングです。リンクは次のとおりです。
価格操作のソース:
ブロックチェーンの世界では、すべてのノードのコンセンサスを維持するために、ブロックチェーンは各ノードがチェーンの外で独立して情報を取得する能力を去勢します。
ブロックチェーンが外界と同様の価格情報を取得したい場合、方法は 2 つしかありません。
- Chainlink と同様のエンティティを通じて価格を積極的にフィードし、価格データをチェーンに継続的に公開します。
- uniswap などのスマート コントラクトに保存されているパラメーターを介して直接。
例: これは取得したい WETH 価格です。これは外部データです
getReserves()
ETH 価格をリクエストすると、財務モデルの計算により対応する値が返されます。
ここでフラッシュ ローンが使用される場合、財務モデルが正しく計算されていない場合、計算された WETH に問題が発生する可能性があります。
価格操作攻撃とは次のとおりです。
価格操作攻撃とは、不当な利益操控市场的买卖行为(操控流动性池或地址余额)
を追求することを指します。人为地影响产品或资产价格
価格操作の 4 つの要素:
- 市場支配力の非対称性:フラッシュレンディングを通じて多額の資金を保有
- 売買行動の操作:大量のトークン交換、市場メカニズム(市場流動性)の破壊
- 価格への悪影響:資産価格計算ミス(脆弱な価格照会メカニズム)
- 不当な利益の追求: 異常な額の報酬や担保
実質価格操作攻撃のケース:
通常のプロセス:
- ユーザーは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 の価値が大幅に増加します
脆弱性機能
getReserve() 関数は、プール内の BNB 残高を計算し、それを直接使用して BNB に対する LP の値を計算します。
具体的な財務モデルの計算:
価格操作攻撃を回避する方法:
脆弱な問い合わせメカニズムの使用を回避するには、主に 3 つの方法があります。
- EOA (Chainlink) などのエンティティを通じて価格を継続的に供給
- 複数のソースから価格を収集し、さまざまなソースからの価格の加重平均を実行します。
- 過去の期間の価格の加重平均 (ユニスワップ) を実行します。
機密性の高い操作のための変数データは、ユーザーが操作しやすいデータに依存してはなりません。そうしないと、危険が生じやすくなります。
テイント分析を使用した脆弱性の検出