
MEV サンドイッチ攻撃の完全解析:並べ替えからフラッシュスワップまで、致命的な連鎖
TechFlow厳選深潮セレクト

MEV サンドイッチ攻撃の完全解析:並べ替えからフラッシュスワップまで、致命的な連鎖
MEVを理解し、そのリスクを認識することで、機会に満ちつつも危険が潜むこのデジタル世界をよりうまく navigating できるようになる。
執筆:Daii
先週水曜日(3月12日)、ある暗号資産トレーダーがMEV攻撃により一挙に21.5万ドルを失ったというニュースが話題となった。

簡単に言えば、このユーザーはUniswap v3の流動性プールで22.08万ドル相当のUSDCステーブルコインを等価のUSDTと交換しようとしたが、結果として得られたのはわずか5,272 USDT。数秒間で21.57万ドルもの資産が消失した(下図参照)。

上図はこの取引のブロックチェーン上での記録スクリーンショットである。このような悲劇が起こった根本的な原因は、ブロックチェーン界隈で悪名高い「サンドイッチアタック」(Sandwich Attack)を受けたことにある。

今回のMEV攻撃を最初に報告したのはMichael氏(上図)であり、彼の説明によると以下の通り。
An MEV bot front-ran the tx by swapping all the USDC liquidity out. After the transaction executed, they put back the liquidity. The attacker tipped a block builder (bobTheBuilder) $200k and profited $8k from this transaction. 訳:MEVボットは、すべてのUSDC流動性を交換することでトランザクションを先行実行した。トランザクション実行後、流動性を再び戻した。攻撃者はブロックビルダー(bobTheBuilder)に20万ドルのチップを支払い、この取引から8,000ドルの利益を得た。
ただし、上記の内容には誤りがあり、MEV攻撃ボットが引き出したのは大量のUSDTであり、USDCではない。
しかし、彼の説明や報道を見ても、おそらくまだよくわからないだろう。なぜなら、「サンドイッチアタック」「フロントラン(front-ran the tx)」「流動性の復元(put back the liquidity)」「ブロックビルダーへのチップ支払い(tipped a block builder)」など、多くの専門用語が出てくるからだ。
本稿では、このMEV攻撃事例を取り上げ、その全プロセスを分解し、MEVという“闇の世界”の実態に迫る。
まず、MEVとは何かを説明する必要がある。
1. MEVとは?
MEVは当初「マイナー抽出可能価値(Miner Extractable Value)」と呼ばれていた。これは、マイナーがブロック内でのトランザクションの並べ替え・挿入・除外を行うことで得られる追加利益を指す。こうした操作により、一般ユーザーはより高いコストを払ったり、不利な価格で取引されたりする可能性がある。
イーサリアムなどのブロックチェーンネットワークが作業量証明(Proof-of-Work、PoW)からステーク保証型(Proof-of-Stake、PoS)へ移行するにつれ、トランザクションの順序を決定する権限はマイナーからバリデータへと移った。そのため、用語も「マイナー抽出可能価値」から「最大抽出可能価値(Maximal Extractable Value)」へと進化した。
名称は変わったものの、トランザクション順序を操作して価値を抽出するという本質的な概念は変わっていない。
以上の説明はやや専門的だが、要点はこうだ:MEVが存在するのは、過去のマイナーおよび現在のバリデータが「メモリプール(mempool)内のトランザクションを並べ替える権利」を持っているためである。この並べ替えは各ブロック内で行われ、現在のイーサリアムでは約11秒ごとに新しいブロックが生成されるため、つまりは約11秒ごとにこの権力が行使される。今回も同様に、バリデータによる並べ替えによってMEV攻撃が成立している。
このリンクをクリックすると、今回の攻撃に関連するブロック番号22029771に含まれるトランザクション内容が確認できる(下図参照)。

注意すべきは、上図の①②③のトランザクションが冒頭で述べたMEV攻撃であり、その順序はバリデータ(bobTheBuilder)によって厳密に設定されたものだ。なぜこのようなことが可能なのか?
2. MEVの仕組み
MEVの動作原理を理解するには、まずブロックチェーンがどのように情報を記録・更新しているかを知る必要がある。
2.1 ブロックチェーンの状態更新メカニズム
ブロックチェーンは、発生したすべての取引を記録する、絶えず拡大する台帳と考えることができる。この台帳の状態、すなわち各アカウントの残高やUniswapプール内の各種トークンの保有量などは、過去の取引によって決まる。
新しいブロックがブロックチェーンに追加されると、そのブロックに含まれるすべての取引が、ブロック内の順序に従って逐次実行される。各取引の実行ごとに、ブロックチェーン全体のグローバル状態が変化する。
つまり、ブロックの順序だけでなく、ブロック内の取引順序も極めて重要なのである。では、ブロック内の取引順序はどのように決まるのか?
2.2 バリデータが取引順序を決定する
ユーザーがブロックチェーン上で取引(たとえばUniswapでUSDCをUSDTに交換する取引)を開始すると、まずそれがネットワーク内のノードにブロードキャストされる。基本的な検証を経た後、この取引は「メモリプール(mempool)」と呼ばれる待機領域に入る。メモリプールは未承認の取引が集まる一時的なキューである。
かつてのマイナー(PoW方式)、あるいは現在のバリデータ(PoS方式)は、このメモリプールから取引を選択し、次のブロック内での順序を決定する権限を持つ。
ブロック内の取引順序は極めて重要である。ブロックが最終的に確定されブロックチェーンに追加される前に、バリデータ(たとえばbobTheBuilder)が決めた順序に従って取引が実行される。つまり、同じプールとやり取りする複数の取引が一つのブロックに含まれている場合、それらの実行順序が各取引の結果に直接影響を与える。
この能力により、バリデータは特定の取引を優先処理したり、他の取引を遅延・排除したり、自らの取引を挿入して利益を最大化することが可能となる。
今回の攻撃でも、この取引順序が極めて重要であり、わずかなミスがあれば攻撃は成功しなかった。
2.3 今回のMEV攻撃における取引順序
まず、今回のMEV攻撃に関係する3つの取引を簡単に紹介する。

-
取引①(攻撃者の最初の取引): 被害者の取引よりも前に実行される。目的は、被害者が取引したいトークンの価格を吊り上げること。
-
取引②(被害者の取引): 攻撃者の最初の取引の後に実行される。攻撃者の前段階の操作により、プール内の価格は被害者にとって不利になり、同等のUSDTを得るためにより多くのUSDCを支払うか、あるいは得られるUSDTの量が大幅に減少する。
-
取引③(攻撃者の2回目の取引): 被害者の取引の後に実行される。目的は、被害者の取引によって生じた価格変動を利用して利益を得ること。
今回の攻撃のバリデータはbob-The-Builder.ethであり、彼が取引を①→②→③の順に並べ替えた。もちろん、bobTheBuilderは無償でこれをしたわけではない。彼はこの並べ替え参加により100ETH以上を獲得した。一方、MEV攻撃の発起人である攻撃者はわずか8,000ドルの収益しか得ていない。彼らの収入源はすべて、被害者の2番目の取引から生まれたものである。
要するに、攻撃者(MEVボット)とバリデータ(bobTheBuilder)が共謀し、被害者の2番目の取引により21.5万ドルの損失を出させた。そのうち、攻撃者が8,000ドル、バリデータが20万ドル(100ETH以上)を得た。
彼らが使用した攻撃手法には「サンドイッチアタック」という比喩的な名称が付けられている。以下、1つずつ取引を解説し、複雑なMEVのサンドイッチアタックがどのように行われるのかを完全に理解してもらおう。
3. サンドイッチアタック完全解説
「サンドイッチアタック(Sandwich Attack)」と呼ばれるのは、攻撃者の2つの取引(取引①と取引③)が、被害者の取引(取引②)の前後に挟まれており、全体の取引順序がサンドイッチのように見えるためである(上図参照)。
-
取引①と取引③はそれぞれ異なる機能を担っている。簡単に言うと、取引①が「犯行」を行い、取引③が「収穫・分配」を行う。具体的な流れは以下の通り。
-
3.1 取引①:USDTの価格を上昇させる
-
上図の取引①のリンクをクリックすると、詳細な内容が確認できる。攻撃者は非常に直接的な方法でUSDTの価格を引き上げた。つまり、1,865万USDCを使って、プール内の1,758万USDTをすべて買い占めたのである(下図参照)。

これにより、流動性プールには大量のUSDCとわずかなUSDTしか残らなくなった。報道によれば、攻撃前のUniswapプールにはそれぞれ約1,980万のUSDCとUSDTがあったとすると、取引①実行後、USDTは222万(=1,980-1,758)にまで減少し、USDCは約3,845万(=1,980+1,865)に増加した。
この時点で、USDCとUSDTの交換レートはもはや1:1ではなく、およそ1:17になる。つまり、1USDTを得るのに17USDCが必要になる。ただし、これはあくまで概算であり、V3プールでは流動性が均等に分布していないため正確な比率ではない。
なお、一点補足しておくと、攻撃者は実際には1,865万USDCを一度に動かしたわけではない。実際に使用したUSDCは109万に過ぎず、全体の6%にも満たない。どうやってそれを実現したのか? これは後ほど詳しく説明する。
3.2 取引②:22万USDCをUSDTに交換
上図の取引②のリンクをクリックすると下図が表示される。

上図の通り、被害者の取引②は取引①の影響を受け、22万USDCに対してわずか5,272 USDTしか得られなかった。気づかないうちに17万USDT以上を失ったことになる。なぜ「気づかないうち」なのか? もし被害者がUniswapのフロントエンドを使って取引していた場合、取引送信時の画面は下図のようになる。

上図からわかるように、被害者は最低でも22万USDT以上を得られるように見えている。最終的に5,000USDT程度しか得られなかったのは、スリッページ(価格滑落)が90%以上に達したためである。しかし、Uniswapにはデフォルトで5.5%の最大スリッページ制限がある(下図参照)。

つまり、被害者がUniswapのフロントエンドから取引を行っていた場合、少なくとも208,381 USDT(=220,510 × 94.5%)は得られていたはずだ。ここで疑問が生じるだろう。なぜブロックチェーンの記録ではこの取引が「Uniswap V3」で行われたと表示されているのか?
理由は、ブロックチェーン取引のフロントエンドとバックエンドが分離しているためである。「Uniswap V3」とは、ここではUSDC-USDTの流動性プールそのものを指しており、このプールは公開されており、どのようなフロントエンドからでもアクセス可能である。
この点から、一部では被害者が単なる一般人ではなく、異常なスリッページが発生したことから、MEV攻撃を利用してマネーロンダリングを行っていたのではないかとの疑惑も出ている。これについてはまた別の機会に触れる。
3.3 取引③:収穫+分配

リンクをクリックすると取引③の詳細が確認できる(上図)。A、B、Cの3つの取引をそれぞれ解説する。
-
取引A:プールの流動性を正常に戻す。1,732万USDTを使って、1,860万USDCを再びプールに戻した;
-
取引B:分配の準備。利益の一部である20.4万USDCを105ETHに交換;
-
取引C:分配。100.558ETHをバリデータbob-The-Builder.ethに支払った。
これにて、サンドイッチアタックは完了である。
ここで、前述の重要な疑問に答えよう:攻撃者はなぜ109万USDCだけで1,800万USDC規模の攻撃を実現できたのか?
4. 攻撃者はいかにして1,800万USDC規模のプール攻撃を実現したか
攻撃者がわずか109万USDCの自己資金で1,800万ドル規模の攻撃を可能にしたのは、ブロックチェーンに存在する特殊かつ巧妙な仕組み――Uniswap V3の「フラッシュスワップ(Flash Swap)」のおかげである。
4.1 フラッシュスワップ(Flash Swap)とは?
簡潔に言えば:
フラッシュスワップは、ユーザーが同一トランザクション内で、まずUniswapプールから資産を引き出し、その後別の資産(または同じ資産+手数料)で返済することを許可する仕組みである。
この一連の操作が同一トランザクション内で完結すれば、Uniswapは「先に商品を受け取り、後に代金を支払う」という行為を認めている。ただし、これは必ず「同一トランザクション内」で完結しなければならない。この設計は、Uniswap自体の安全性を守るためのものである。
-
ゼロリスクの貸し借り:Uniswapは無担保でプールから一時的に資金を借用(類似の貸し出し)することを許可するが、取引終了時に即座に返済が求められる。
-
原子性(Atomicity): 操作全体は原子的であり、完全に成功するか(資金が返却される)、完全に失敗するか(トランザクションがロールバックされる)のいずれかである。
フラッシュスワップの本来の目的は、オンチェーンでの裁定取引(Arbitrage)をより効率的に行うことにあったが、残念ながらMEV攻撃者によって悪用され、市場操作の武器と化している。
4.2 フラッシュスワップはどのように攻撃を支援したか?
以下、図を交えながら、今回の攻撃におけるフラッシュスワップの仕組みをステップバイステップで解説する(下図参照)。

-
F1:攻撃者は自身の701 WETHを担保にAAVEから109万USDCを借り入れる;
-
F2:攻撃者はフラッシュスワップを発行し、Uniswapプールから1,758万USDTを引き出す(この時点では支払い不要)。攻撃者の口座に一時的に1,758万USDTが加算される;
-
F3:攻撃者は直ちにこの1,758万USDTをCurveプールに投入し、1,755万USDCと交換。口座のUSDTが1,758万減り、USDCが1,755万増える。下図からわかるように、攻撃者がCurveを選んだ理由は、流動性が豊富(USDTが7,054万以上、USDCが5,071万以上)で、スリッページが比較的低いからである。

-
F4:攻撃者はCurveで得た1,755万USDCに、AAVEから借りた109万USDCを加え、合計1,864万USDCを一括でUniswapに返済。これでフラッシュスワップが完了する。
この取引(取引①)後、攻撃者の口座は109万USDC減少する。なぜなら、Uniswapに返した1,864万USDCのうち、1,755万USDCはCurveからの交換によるもので、残りの109万USDCは攻撃者の自己資金だからである。
気づいたかもしれないが、この取引では攻撃者は実質109万USDCを失っている。しかし、後続の取引③において、同じくフラッシュスワップの手法を使い、この109万USDCを取り戻すだけでなく、さらに20万以上を利益として得ている。

続いて、取引③のデータをもとにステップバイステップで分析する。
-
K1:攻撃者はフラッシュスワップでUniswapから1,860万USDCを引き出す;
-
K2:攻撃者は、Uniswapから引き出したUSDCのうち1,730万USDCを使って、1,732万USDTを取得;
-
K3:攻撃者は、Curveで交換した1,732万USDTをUniswapに返済。フラッシュスワップ完了。注目すべきは、K2では1,730万USDCの支出で1,732万USDTを得ており、差額2万USDTが利益となる。残りの130万USDC(=1,860-1,730)のうち、109万は自己資金、残り21万USDCが今回の攻撃の純利益となる。
-
K4:攻撃者はAAVEに自己資金を返済し、701 WETHを回収。さらに20万USDCを105ETHに交換し、そのうち100.558 ETHをバリデータへのチップとして送付(約20万ドル)、自身は1万ドル未満の利益を保持した。
驚くかもしれないが、なぜ攻撃者は20万ドルもの利益をバリデータに譲ったのか?
4.3 なぜ20万ドルの「チップ」を支払うのか?
実はこれは寛大さではなく、サンドイッチアタックというMEV攻撃が成功するための必須条件なのである。
攻撃成功の鍵は、取引順序の正確な制御にあり、その制御権を持つのがまさにバリデータ(bobTheBuilder)である。
バリデータは、攻撃者の取引間に被害者の取引を確実に挟み込むだけでなく、他の競合するMEVボットが割り込んで攻撃を妨害しないよう確保する役割も果たす。
そのため、攻撃者は大部分の利益を犠牲にしてでも攻撃の成功を確保し、自分には最小限の利益を残す選択をするのである。
補足として、MEV攻撃にもコストは存在する。UniswapのフラッシュスワップやCurveでの取引には手数料がかかるが、その費用は非常に低く(約0.01~0.05%)、攻撃利益に比べれば無視できる程度である。
最後にひとつアドバイス:MEV攻撃の防御は実は簡単である。スリッページ許容範囲を1%以内に設定し、大口取引は分割して実行すればよい。だからといってDEX(分散型取引所)での取引を過度に恐れる必要はない。
結語:暗黒の森からの警告と示唆
今回の21.5万ドルのMEV攻撃事件は、ブロックチェーン世界の「暗黒の森」の法則が再び残酷に露呈された事例である。非中央集権的かつ許可不要の環境下で、仕組みの隙を突いて利益を得ようとする複雑な駆け引きが潜んでいることを如実に示している。
より広い視点から見ると、MEVの出現はブロックチェーンの透明性とプログラマビリティがもたらす「両刃の剣」の典型例である。
一方では、すべての取引記録が公開されているため、攻撃行為を追跡・分析できる。
他方では、スマートコントラクトの複雑なロジックと取引実行の決定性が、巧みな参加者にとっての好機となる。
これは単なるハッキング行為ではなく、ブロックチェーンの基盤的仕組みを深く理解し、巧みに利用する行為であり、プロトコル設計の堅牢性を試すと同時に、参加者のリスク意識を問うものでもある。
MEVを理解し、そのリスクを認識することで、機会と危険が入り混じるこのデジタル世界をより安全に航行できるようになる。ブロックチェーンの「暗黒の森」において、唯一の生存戦略は、ルールを畏れ、知識を高めること。そうすれば、次の獲物になることは避けられるだろう。
これが、筆者が本稿を通じて伝えたいことである。
TechFlow公式コミュニティへようこそ
Telegram購読グループ:https://t.me/TechFlowDaily
Twitter公式アカウント:https://x.com/TechFlowPost
Twitter英語アカウント:https://x.com/BlockFlow_News














