2023年4月、攻撃者はFlashbotsリレーに存在する脆弱性を悪用し、複数のMEVボットを攻撃して約2000万ドルを詐取しました。この攻撃の根本原因は、特定の条件下でプライベートトランザクションがパブリックプールに漏洩する可能性があり、攻撃者が漏洩したトランザクションをバックランして利益を得ることができたことにあります。また、攻撃には、被害者を攻撃するためにハニーポットトランザクションを使用したり、攻撃コントラクトに自己保護メカニズムを組み込んだりするなど、いくつかの洗練された技術が使用されていることも確認されています。
背景
Flashbots
Flashbotsは、ウェブサイトで示されているように、「Ethereumを皮切りに、ステートフルブロックチェーンに最大抽出可能価値(MEV)がもたらす負の外部性を軽減するために形成された研究開発組織」です。Flashbotsには、サーチャー、ビルダー、リレーなど、いくつかの異なるエンティティが関与しています。以下の図はそれらの関係を示しています。

この画像はFlashbotsドキュメントから引用されています。
PBS(プロポーザー・ビルダー分離)プロトコルは、ブロックプロポーザーがブロックを構築するように選択された際に、そのブロック空間を複数のビルダーに売却して利益を最大化できるプロトコルです。具体的には、複数のサーチャーがメモリプール内のトランザクションを監視し、バンドルを生成してビルダーに送信します。ビルダーはサーチャーからバンドルを集約し、最も価値のあるブロックを作成してからリレーに送信します。リレーはブロックをブロックプロポーザー、すなわちエポックのスロットのためにブロックを構築するように選択されたバリデーターに送信します。
このアーキテクチャでは、リレーはお互いを信頼しないビルダーとプロポーザーの両方から信頼されるパーティです。これにより、プロポーザーはブロックヘッダーに署名する前にブロックの内容を取得できないことが保証されます。また、手数料がプロポーザーに支払われることも保証されます。
詳細なアーキテクチャに興味のある読者は、Flashbotsドキュメントを参照してください。リレーが提供する必要があるセキュリティ保証、すなわち、ブロックがチェーン上にない場合、リレーはブロックの内容をプロポーザーに開示できないことを覚えておくだけで十分です。そうでなければ、悪意のあるプロポーザーは漏洩したブロックの内容を使用して利益を得ることができます(攻撃で示されているように)。
サンドイッチ攻撃
サンドイッチ攻撃とは、攻撃者が2つのトランザクションの間にスワップを挟んで利益を得る攻撃です。例を用いて説明します。
WETHとUSDCという2つのトークンを持つDEXプールがあるとします。あるユーザーがWETHをUSDCにスワップするリクエストを送信します。このスワップトランザクションはメモリプールに存在し、MEVボット(サーチャーとする)によって取得されます。次に、ボットはユーザーのスワップトランザクションの前後に1つずつ、2つのトランザクションを作成します。
具体的には、ボットの最初のトランザクションはWETHを使用してUSDCをスワップし、USDCの価格を上昇させます。次に、ユーザーのスワップトランザクションが実行されます(最初のトランザクションによりUSDCの価格が上昇したため、USDCは少なくなります)。その後、ボットの2番目のトランザクションはUSDCをWETHにスワップし、ボットの最初のスワップよりも多くのWETHを得ることができます。
この画像は、Liyi Zhouらの論文「High-Frequency Trading on Decentralized On-Chain Exchanges」から引用されています。
バックランニング
バックランニングは、大規模な取引の直後にトランザクションを実行する戦略です。バックランニングは基本的に、大規模な取引がトークン価格に与える影響によるアービトラージ機会を利用します。たとえば、ユーザーがDEXプールでWETHをUSDCにスワップする大規模な取引を行うと、USDCの価格が他の取引所よりも高くなる可能性があります。バックランニングボットは、このアービトラージ機会を即座に捉え、より低い価格でUSDCをWETHにスワップしてより多くのWETHを受け取り、他の取引所のDEXプールでWETHを売却して利益を得ることができます。
脆弱性
事後分析で示されているように、脆弱性はリレーのコードに存在しました。署名されたブロックヘッダーが無効であっても(署名自体は有効)、リレーはビルダーのブロック内容を(悪意のある)プロポーザーに開示します。この場合、ビーコンチェーンに送信された無効なブロックヘッダーとブロック内容は拒否され、プロポーザーは独自のブロックを送信する競争に勝つことができ、漏洩したブロック内容を利用して利益を得ることができます。
攻撃プロセス
攻撃者は悪意のあるプロポーザーであり、被害者はサンドイッチトランザクションを実行しようとするMEVボットです。
実際の攻撃トランザクションを例として使用します。
| ブロック 16964664 | ||
| ポジション 0 | 被害者トランザクション:0xd2edf726fd3a7f179c | Phalcon Explorer (blocksec.com) | MEVボットは2454.1 WETHを使用して4.5 STGをスワップしました。 |
| ポジション 1 | 攻撃トランザクション:0x4b2a2d03b3dc136ef9 | Phalcon Explorer (blocksec.com) | 攻撃者は158 STGを使用して2454.1 WETHをスワップしました。 |
被害者トランザクションと攻撃トランザクションは、ブロック16964664のポジション0と1にあります。基本的に、被害者(MEVボット)はUniswap WETH-STGプールで2454.1 WETHを使用して4.5 STGをスワップするという大規模な取引を実行しました。これにより、大きなアービトラージ機会が生まれ、攻撃者は158 STGを使用してプール内のすべてのWETHを枯渇させました。

疑問は、なぜ被害者(MEVボット)は2,454 WETH(約500万ドル相当)を使用して、プールで4.5 STGトークン(約3ドル相当)をスワップしようとしたのかということです。被害者がこのスワップを実行したとき、プール内の流動性は非常に低かった(0.005 WETHと4.5 STG)ことに注意してください。
私たちの分析によると、MEVボットがこのようなばかげたスワップを実行した理由は2つあります。
第一に、攻撃者はハニーポットトランザクションを使用して、被害者にこのスワップを実行させてサンドイッチ攻撃を行うよう誘い込みました。このハニーポットトランザクションのハッシュは0xd534c46ba5a444e886 | Phalcon Explorer (blocksec.com)です。具体的には、攻撃者はWETHをSTGにスワップするトランザクションを(ブロック16964664より前に)ブロードキャストしました。プール内の流動性が非常に低いため、これによりMEVボットがサンドイッチ攻撃を行う機会が生まれました。以下の図に示すように、MEVボットは3つのトランザクション(サンドイッチ攻撃バンドル)を含むサンドイッチ攻撃バンドルを作成できます。

第二に、MEVボットは貪欲なサンドイッチ戦略を使用し、Flashbotsを利用してこのトランザクションを送信しました。利益を最大化するために、バンドル内の最初のトランザクションは、ほぼすべてのSTGトークン(2,454 WETHを使用)を枯渇させようとします。これは非常に貪欲な戦略であり、500万ドル(2,454 WETH)を使用して約700ドル(0.35 WETH)、すなわち7,000:1の利益を得ています。ボットは、このスワップがチェーンにコミットされない限り、公開されることはないと想定していました。しかし、この想定はリレーの脆弱性により破られました。これを利用して、攻撃者はボットの最初のサンドイッチ攻撃トランザクションを含む新しいバンドルを作成し、2,454 WETHを取得するためのバックランニングトランザクションを追加しました。
BlockSecのTwitterの図は、攻撃プロセス全体を示しています。

自己保護メカニズム
攻撃者はWETHをSTGにスワップすることによって被害者を誘い込むハニーポットトランザクションを送信したことを知っています。しかし、ハニーポットトランザクションを悪用できるサンドイッチトランザクションが存在しない場合はどうなるでしょうか?このような場合、攻撃者はプールの状態を監視し、逆スワップを実行して0.35 Etherを保護しました。これは賢明な動きです。以下は、ハニーポットトランザクションを実行したスマートコントラクト(0xe73f1576af5573714404a2e3181f7336d3d978f9)の逆コンパイルコードです。

発見を確認するために、Phalcon Forkでハニーポットトランザクションをシミュレートしました。しかし、ブロック16964664のポジション0でのことです。

まとめ
これは、洗練された攻撃戦略とともにFlashbotsリレーの脆弱性を悪用した最初の攻撃です。
- 第一に、この攻撃はFlashbotsリレーのゼロデイ脆弱性を悪用しました。
- 第二に、貪欲なサンドイッチ戦略を悪用し、ハニーポットトランザクションを使用してMEVボット(被害者)を誘い込みました。
- 第三に、攻撃が成功しなかった場合にハニーポットトランザクションのコスト(0.35 WETH)を節約するための自己保護メカニズムが含まれていました。
このシリーズの他の記事を読む:
- リードイン:2023年のトップ10「恐るべき」セキュリティインシデント
- #2:Euler Financeインシデント:2023年最大のハッキング
- #3:KyberSwapインシデント:極めて巧妙な計算による丸め誤差の巧妙な悪用
- #4:Curveインシデント:コンパイラエラーにより無害なソースコードから不正なバイトコードが生成される
- #5:Platypus Finance:幸運にも3度の攻撃を乗り切る
- #6:Hundred Financeインシデント:脆弱なフォークされたプロトコルにおける精度関連の悪用波を触媒する
- #7:ParaSpaceインシデント:業界で最も重大な攻撃に対する時間との戦い
- #8:SushiSwapインシデント:不器用な救出試みが一連の模倣攻撃につながる
- #9:MEV Bot 0xd61492:巧妙な悪用における捕食者から獲物へ
- #10:ThirdWebインシデント:信頼されたモジュール間の非互換性が脆弱性を露呈させる



