6月21日、イーサリアムネットワーク上で最も活発なMEVボットの1つであるJaredfromsubway.ethが、精心された「ハニーポット攻撃」に遭い、750万ドル以上の暗号資産を損失しました。以下はBeosinセキュリティチームによるこの攻撃の分析と盗まれた資金の流れの追跡です。
攻撃フローの分析
攻撃契約ファミリー
- コディネーターコントラクト(0xb84db016324e8f2bfdd8dd9c260338aee0a8df52):現在のブロックがarmed状態であるかを記録し、最終段階でサブコントラクトをループして資金を引き出す役割を担う。 - トリガーコントラクト(0x4de8c729a064ff6087cc84a4152969349e4feb98):同じブロック内で偽の取引対の状態を設定し、アービトラージパスが実行可能に見えるようにする役割を担う。 - サブコントラクト/偽トークンコントラクト:実際の認証を得るために、通常のERC-20トークンに偽装する。 - ハブコントラクト:MEVボットが利益があると感じるように、わずかな実際の収益を支払う役割を担う。 - Ring V2ペア:偽のUniswap v2取引対。 - 偽中間トークンコントラクト:fCAP、fUSDCなどのマルチホップアービトラージパスを構築するために使用される。
攻撃の鍵:誘導による承認
チェーン上の取引を分析して、攻撃者は複数の釣り取引を構成しました:
- 大額USDC:ロボットは約36.997120 USDCを利益を得ましたが、20 USDCを認証残高として残しました。 - 大額USDT:ロボットは約37.053440 USDTを利益を得ましたが、20 USDTを認証残高として残しました。 - 大額WETH:ロボットは約0.0179 WETHを利益を得ましたが、16 WETHを認証残高として残しました。 - 小額取引は通常通りで、認証は同一取引内で消費され、疑念を軽減するために使用されています。
小額取引では、ロボットが実際のトークンの権限を付与した後、サブコントラクトが直ちに実際のトークンを移動させ、権限が消費されるため、完全に正常に見えます。
大口取引では、サブコントラクトは実際のトークンを転送するためにtransferFromを呼び出さず、偽の取引を通じて偽のトークンを鋳造します。ボットは通常のswapの前処理を完了したと誤認しますが、実際のトークンの承認はそのまま維持されます。
これが攻撃の核心です:小額取引は通常通り認証を消費し、大額取引は認証を保持します。
攻撃フロー
USDCに対する攻撃取引を例に挙げると:
(1)攻撃者がコーディネーターを呼び出し、現在のブロックをarmedに設定する(2)攻撃者がトリガーを呼び出し、複数の偽造されたRing V2ペアの状態を更新する(3)MEVボットがアービトラージ機会を検出し、取引を実行する
MEVボットの取引内部フローは以下の通りです:
(1)MEV Botコントラクトが特定のサブコントラクトに大額のUSDCの権限を付与 (2)MEV BotがサブコントラクトのwrapTo/wrap関数を呼び出す (3)サブコントラクトは現在の状態がarmedであるため、実際のUSDCを消費せず、代わりにペアに偽のトークンをミントし、USDCの権限は保持される (4)MEV Botが偽のペアのswapを継続して呼び出す (5)2番目のスワップペアがトークンをMEV Botに送信 (6)ハブコントラクトがMEV Botに少量の実際のUSDC利益を支払う

承認の例
txハッシュ: 0x0121e07a916c06eea3e7daf11893f3f0b95b9e1684124545ae14c32aee6029bb
MEV Botが確認した結果:成功したアービトラージ取引により、実際のUSDC利益が得られました。しかし、USDCの承認はサブコントラクトに保持されました。このプロセスは、USDC、USDT、WETHそれぞれに対して繰り返され、最終的に多数の承認が生成されます。
攻撃された取引ハッシュは:
0x2be8704f5a59b69e0b71f64aefdb99eb0e8ae9fb3926147c581910d71bcf3e65
攻撃者は、コーディネーターコントラクトのdrain loopを呼び出し、calldataに66個のサブコントラクトアドレスとMEV Botコントラクトアドレスを含めました。MEV Botコントラクトが以前にサブコントラクトに枠限額の承認を残していれば、サブコントラクトは対応する実際のトークンを直接攻撃者に転送できます。
最終結果:
- 20個のUSDC大口承認がすべて消費されました - 16個のWETH大口承認がすべて消費されました - USDTの一部承認額は残っていますが、USDT残高が不足しています
資金流れ分析
攻撃が成功した後、攻撃者アドレス(0x3e37f4A10d771Ba9dE44b6d301410b1BEdeA65d0)は、$2.87MのUSDC、$2.04MのUSDT、および1,474 WETHを受け取りました。その後、攻撃者は安定通貨をETHに交換し、以下の4つのアドレスに転送しました:
- 0xe3Da36E4bd1a5738fa5D6Ef4F0e4dF40bDeB5f17(約1,000 ETH) - 0x74Dc5b93586D248D5Aec64b3586736FF0A0D0e65(1,001 ETH) - 0xd8C125efCBc99408eC8723E9BBd81d1E8D39D845(1,001 ETH) - 0x71d4416A7A85e08a5Fe7227Ca3B44Fc639e94e97(1,423 ETH)
0xe3Da3は1,000個のETHをTornado Cashに転送しました。他の3つのアドレスのETHは、さらに転送されていません。その資金の流れは以下の通りです:

まとめ
今回の攻撃は、高度に洗練された攻撃手法を示しています。攻撃者は契約コード自体を直接攻撃するのではなく、MEV Botのビジネスロジックに基づいて、対応するアービトラージシナリオを構築し、MEV Botに問題がないように見える承認をさせ、最終的にその資産を移転します。アービトラージボットおよびMEV Botは、シミュレーションされた収益のみに頼ってルートの安全性を判断してはなりません。特に、アービトラージパスに未知の契約、偽造トークン、またはカスタムラッパーが含まれる場合、慎重であるべきであり、取引後のallowanceの変化について強制的なチェックを検討すべきです。

