フラッシュローンの原則とセキュリティインシデントの分析

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

この記事の主な参考文献は次のとおりです。

【捕鯨船のシェアリング】(フラッシュローンの原則とセキュリティインシデントの分析~攻撃を受けたプロジェクトの原因と防止策(youtube.com)

[SharkTeam シリーズ記事 – フラッシュ ローン]([フラッシュ ローン テクノロジーの詳しい説明 - パート 3 | ログイン コミュニティ | ブロックチェーン テクノロジー コミュニティ (learnblockchain.cn)](https://learnblockchain.cn/article/4502#Aave Flash Loan Excellent)欠点))

ブロックチェーン上のフラッシュローンとは:

闪电贷:本来の目的はブロックチェーン上に実装され、ユーザーが担保として何も提供せずにお金を借りられるようにすることでした。

ブロックチェーン上のトランザクションの原子性を利用してフラッシュ ローンの機能を真に実現し、フラッシュ ローンの借入と返済を同じトランザクションで完了できるようにする方法、対応する返済が完了しない場合、トランザクション全体が停止するロールバックしました。

Defiでのフラッシュローンの乱用を防ぐために、各フラッシュローンの返済は融資額の0.09%などの融資手数料をサポートする必要があり、そうでない場合はトランザクション全体がロールバックされます。

Aave は当初、金融業界の製品開発者コミュニティにサービスを提供するためにフラッシュ ローンの概念を提案しました。これにより、より多くの開発者がフラッシュ ローンを使用して、資金を必要とせずに借り換えツールや裁定ツールを作成し、金融商品を構築し、開発の敷居を下げることができるようになります。 . . (いろいろ調べてみた結果、納得のいく答えが見つかりました)

しかし、フラッシュローンは現在広く悪用されており、資産間の裁定取引に使用されています。

フラッシュローンの具体的な導入例:

一般的なフラッシュ ローン プラットフォーム:Uniswap、Aave、Compound、MakerDAO、dYdXなど

フラッシュローンとフラッシュエクスチェンジには違いがあり、同じ資産を返済する必要があるかどうかです。

既存のフラッシュ ローンのほとんどは楽観的転送です。ローン機能の実装では、最初にローン トークンが借り手に転送され、次に借り手の関数がコールバックされ、借り手が操作を実行します。最後にローン関数の前に、融資額と対応する手数料を返済する必要があります。返済しない場合、取引は返金されます。

Aave_v2

  • フラッシュローントークンの枚数を確認し、手数料やプロトコル手数料などを計算します。

  • オプティミスティック転送を実行してトークンをユーザーのアドレスに転送します

  • ユーザーの excuteOperation 関数をコールバックすると、ユーザーは裁定操作を自分で実行します。aave_v1 は関数の終了時に対応する返済を行う必要があります。aave_v2 はすぐに返済する必要はありませんが、それに応じてローン契約を承認する必要があります。

  • v1 は返済金額 (契約ローン前の残高 + 手数料) を確認し、v2 ローン契約は、safetransform 関数を呼び出して対応する転送を実行し、対応する返済を実現します。

    以下の図は主に aave_v1 バージョンの実装を示しています

    画像.png

    画像.png

Uniswap_v2

uniswap はフラッシュ ローンの機能も提供しており、v2 バージョンでは主にスワップ機能によるフラッシュ ローンを実装します。

返済すべきかどうかを検出するフラッシュローンの原理は、自動マーケットメーカーAMMがk値テストを実行する原理に基づいています。

uniswap を大まかに理解すると、そのトークンのペアは
x 1 ∗ x 2 = k x_1*x_2 = kを満たします。バツ1バツ2=k

最終的な k 値の検証では、以下を満たす必要があるだけです。

(残高 1 ' − 手数料) ∗ (残高 0 ' − 手数料) ≥ k (残高^{'}_1-手数料)*(残高^{'}_0-手数料) \ge kバランス_ _ _ _1手数料_バランス_ _ _ _0手数料_返済後の口座k の
残高から対応する取引手数料を差し引いた額は、k を超えるのに十分です。

上記の式から、ユニスワップでお金を返済する場合、必ずしも同じ資産を返済する必要はなく、対応する資産のペアと交換することもできることが簡単にわかります。

  • 関連融資の検査実施
  • 楽観的な転送を行う
  • 借り手の uniswapV2call 関数をコールバックし、対応するアービトラージ操作を実行し、関数の終了時に返済を実現します。
  • ローンを返済するかどうかを判断するためのk値の検証

フラッシュ ローンの残りの手順は aave と似ていますが、唯一の違いは、uniswap は対応する返済を uniswapV2call 関数の対応する融資契約に直接転送することです。

画像.png

画像.png

フラッシュローン攻撃の種類

  • フラッシュローンの多額の資金を利用して価格操作を行っており、一部のプロジェクトでは調査メカニズムに抜け穴があり、それは[価格操作記事](価格操作攻撃の再理解 | メントーグ大学のエマニュエル氏(emmanuelwh.github.イオ)
  • 一部のプロジェクトでは、ステーキングまたはその他のプロセス中に即座に報酬が生成されます。多額の報酬を得るにはフラッシュ ローンを使用してください。
  • このプロジェクトには他にも論理的な抜け穴があり、フラッシュローンの多額の資金は大規模な裁定取引の機会を生み出すために使用される可能性があります。

DFX 攻撃インシデント分析

脆弱性の主な原因は主に次の 2 つです。

  • フラッシュ ローンの返済ロジックは、フラッシュ ローンの前後のプール内の金額の差です。

  • ただし、DFX契約では、融資方法や流動性追加方法にリエントリー制限を設けておりません。平たく言えば、借りたお金が同じプールに抵当に入れられることを意味し、ユーザーが返済する必要があるフラッシュローンは非常に少額ですが、大量のLP流動性証明があります。

攻撃の主な手順は次のとおりです。

  • フラッシュ関数を呼び出して大量のUSDCとXIDRを借ります
  • その後、借りた 2 つのトークンが同じプールに抵当に入れられます。
  • このとき、フラッシュローン前後のプールの差は、攻撃者が貸した資金に比べてはるかに小さく、攻撃者は少額の資金しか返還できません。
  • しかし、ユーザーの住宅ローンの流動性はまだ手中にあり、流動性を取り除き、多額のUSDCとXIDRを取得します。

画像-20231218112539740

おすすめ

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