著者: Immunefi編集: Cointime.com QDD
序章
ブロックチェーン空間における悪用行為はますます複雑になっています。
これまで、スマート コントラクトの開発者と監査人は主に、単一トランザクション内での悪用からスマート コントラクトを保護する方法を検討する必要がありました。しかし現在では、複数のトランザクションにわたって攻撃が発生することがますます一般的になってきています。
ハッカーはまた、巨額の利益を求めて、個人の資金を危険にさらして攻撃することをいとわないようになっています。
つい先週、あるハッカーが Rodeo Finance への攻撃で50 ETH (約 96,000 ドル) の危険を冒し、その結果約 472 ETH (約 890,000 ドル相当) の利益を得ました。このような事例は、「攻撃コスト」は効果的なセキュリティ抑止力ではないという原則を強化するものであり、自らを守るために高い攻撃コストに依存するプロトコルはその戦略を再考する必要がある。
この記事では、ハッカーが MEV を使用して脆弱なプロトコルを攻撃する一般的な方法の 1 つを説明します。また、バグ ハンターとして PoC (概念実証) を使用して、MEV 攻撃ベクトルを適切に実証する方法についても説明します。
MEVとは
MEV (マイナー抽出可能値または最大抽出可能値) を使用すると、マイナーはマイニング前にブロック内のトランザクションを除外、組み込み、順序付けできます。これは、イーサリアムの合併の結果として大きく変わり、このトランザクション注文の役割がネットワークのバリデーターに移されました。しかし、それにもかかわらず、MEV 攻撃ベクトルは依然として一般的であり、ブロックチェーン分野で関連性があります。
攻撃者はさまざまな方法で MEV を使用する可能性があります。いわゆる「メザニン攻撃」をデモンストレーションします。これは、被害者の交換トランザクションをスワップする前後に行うことによって達成されます。
プレリュード (フロントランニング)
プレリュードは、攻撃者が被害者のトランザクションの前に自分のトランザクションを送信することに成功し、攻撃者のトランザクションが最初に実行されるようにする手法です。これは、悪意のあるトランザクションのガス価格を引き上げ、ガス料金が低い被害者のトランザクションよりも優先されるようにすることで実現できます。
バックランニング
ポストプレイは、攻撃者が被害者のトランザクションの実行後に悪意のあるトランザクションを実行する手法です。攻撃者は、悪意のあるトランザクションのガス価格を下げることでこれを行うことができます。これにより、被害者のトランザクションがフォールアウト トランザクションよりも優先されるようになります。
メザニン攻撃
メザニン攻撃シナリオでは、攻撃者はトランザクション プール (保留中のトランザクションのリスト) を監視して、悪用したいターゲット トランザクションを探します。ターゲットを設定すると、具材を挟んだサンドイッチのように、ターゲット トランザクションの前後に 1 つずつ、2 つのトランザクションを送信します。このメザニンの目的は、攻撃者に有利になるように対象のトランザクションの実行や結果を操作することです。
前のセクションで説明した方法を使用して、攻撃者は被害者のトランザクションよりも高いガス料金と低いガス料金で 2 つのトランザクションを送信し、メザニン攻撃を成功させます。あるいは、有料でトランザクションの順序付けを保証する、専門の RPC プロバイダーを通じてトランザクション バンドルを送信することもできます。
トークン、流動性プール、または分散型取引所を含むトランザクションはトランザクション順序の影響を非常に受けやすいため、このタイプの攻撃は DeFi エコシステムで特に問題となる可能性があります。このような場合、攻撃者の目的は多くの場合、資産価格を操作したり、裁定取引の機会から利益を得たり、個人的な利益を得るためにプロトコルの他の脆弱性を悪用したりすることです。
MEV 攻撃をテストする方法
トークン、流動性プール、または分散型取引所を含むトランザクションはトランザクション順序の影響を非常に受けやすいため、このタイプの攻撃は DeFi エコシステムで特に問題となる可能性があります。このような場合、攻撃者の目的は多くの場合、資産価格を操作したり、裁定取引の機会から利益を得たり、個人的な利益を得るためにプロトコルの他の脆弱性を悪用したりすることです。
MEV 攻撃をテストする方法
MEV 攻撃を実証する PoC を作成するには、Hardhat や Forge などのツールを使用してブロックチェーンのローカル フォークを作成します。
これら 2 つのテスト間の決定的な結果を実証するために、この Github Gist からアクセスできる同じ攻撃者コントラクトを使用します。
このデモでは、最小金額を 0 に設定して、被害者が UniswapV2 で WETH から USDC へのスワップ トランザクションを意図的に呼び出せるようにします。このトランザクションをメザニン攻撃に対して脆弱にする脆弱性は、最小金額を 0 に設定することです。これは、被害者が 0 USDC または 99% のスリッページしか受け取らない場合でも、トランザクションはロールバックされないことを意味します。そのため、最低金額を設定することが重要です。
ヘルメット
Hardhat は、開発者が JavaScript/TypeScript を使用してスマート コントラクトを操作できるようにするスマート コントラクト開発用のフレームワークです。 Forge (新しいフレームワーク) が登場する前は、ほとんどのホワイト ハット ハッカーは Hardhat を使用してブロックチェーンをフォークして PoC を作成していました。
便利なことに、Hardhat はトランザクションをファイナライズした状態に保つメカニズムをすでに提供しているので、トランザクションがファイナライズされる前に、呼び出したトランザクションをトランザクション プールに集約できます。
ステップバイステップガイド:
l Hardhat がマシンにインストールされていることを確認してください ( https://github.com/NomicFoundation/hardhat )
l 単純なヘルメットプロジェクトを作成する
l mkdir MEV-poc
l cd MEV-poc
l 糸でヘルメットを追加します
l npx ヘルメット初期化
l 契約を攻撃者契約に変更します。
l scriptフォルダー内のファイルをsandwich Attack.jsに変更しますhttps://gist.github.com/GibranAkbaromiL/05020630475f4f2599f72b47e52c7949#file-sandwich Attack-js
l npx ハードハットを実行します scripts/sandwich Attack.js を実行します
出力:
フォージ
Forge は、Solidity スクリプトを使用してブロックチェーンのテスト、デプロイ、操作を可能にするスマート コントラクト開発ツールチェーンです。これにより、テスト ファイル内のトランザクションを順序付けるだけで MEV 攻撃を実証できるようになります。
ステップバイステップガイド:
Forge は、Solidity スクリプトを使用してブロックチェーンのテスト、デプロイ、操作を可能にするスマート コントラクト開発ツールチェーンです。これにより、テスト ファイル内のトランザクションを順序付けるだけで MEV 攻撃を実証できるようになります。
ステップバイステップガイド:
l マシンに Forge がインストールされていることを確認してください ( https://book.getfoundry.sh/getting-started/installation )。
l 単純な forge プロジェクトを作成します。
l mkdir MEV-poc
l cd MEV-poc
初期化を鍛造します
l src フォルダー内のコントラクトを攻撃者のコントラクトに変更します。
l テストフォルダー内のテストファイルを Sandwich.t.sol に変更します。 https://gist.github.com/GibranAkbaromiL/05020630475f4f2599f72b47e52c7949#file-sandwich-t-sol
出力:
これら 2 つのテスト ケースでは、Hardhat と Forge を使用した MEV メザニン攻撃を実証することに成功しました。テスト ケースの出力から、攻撃者と被害者の両方の初期残高は 1000 WETH で、攻撃者は被害者の前奏と後戯のトレードに成功し、その結果、攻撃者に約 123 WETH の利益が得られたことがわかります。被害者が受け取るUSDCは減ります。
私たちが学んだこと
セキュリティ研究で最も重要な部分の 1 つは、発見した潜在的な脆弱性に基づいて PoC を作成することです。なぜそれほど重要なのでしょうか?潜在的な脆弱性を特定するだけでは攻撃が効果的になるわけではないからです。攻撃が機能することを確認できる唯一の方法は、PoC を作成することです。PoC は、特定された脆弱性ごとに個別に作成する必要があります。
ここでは、MEV が発生する可能性のある多くの攻撃ベクトルのうちの 1 つについて説明しただけであり、研究者が発見する実際の攻撃シナリオは、ここで示したものとは大幅に異なる可能性があります。上記の例では、最も一般的なベクトルの 1 つであるスリッページ保護のないスワップ サンドイッチ攻撃のみを取り上げました。自分のスキルをテストし、他の攻撃ベクトルを再現してみたい場合は、 「NFT Minting Prelude」 、 「Off-Chain Word Machine Price Update Prelude」、および「JIT (Instant) Liquidity」も参照してください。
この記事は以上です。ここに数分間時間を費やして、新たな理解を深めたり、既存の知識を強化したりしていただければ幸いです。学習をやめずにバグを探し続けてください。新しいエクスプロイトや脆弱性が毎日発見されるのを待っているため、熱心に働くホワイト ハット ハッカーには報酬と機会が不足することはありません。
全てのコメント