Pada 21 Jun, salah satu MEV Bot paling aktif di rangkaian Ethereum, Jaredfromsubway.eth, mengalami serangan "honeypot" yang dirancang dengan teliti, kehilangan lebih daripada $7.5 juta aset kripto. Berikut adalah analisis dan penjejakkan aliran dana yang dicuri oleh pasukan keselamatan Beosin terhadap serangan ini.
Analisis proses serangan
Serangan terhadap keluarga kontrak
- Kontrak koordinator (0xb84db016324e8f2bfdd8dd9c260338aee0a8df52): Bertanggungjawab merekod sama ada blok semasa berada dalam keadaan armed, serta memanggil kontrak anak secara berulang pada peringkat akhir untuk menarik dana. - Kontrak pemicu (0x4de8c729a064ff6087cc84a4152969349e4feb98): Bertanggungjawab menetapkan status pasangan perdagangan palsu dalam blok yang sama, supaya laluan arbitrage kelihatan boleh dilaksanakan. - Kontrak anak / kontrak token palsu: Menyamar sebagai token ERC-20 biasa untuk mendapatkan kuasa sah. - Kontrak hub: Bertanggungjawab membayar keuntungan sebenar yang kecil, supaya MEV Bot merasa ia menguntungkan. - Pasangan Ring V2: Pasangan perdagangan Uniswap v2 palsu. - Kontrak token perantara palsu: Digunakan untuk membina laluan arbitrage pelbagai lompatan, seperti fCAP, fUSDC.
Kunci serangan: Penipuan kebenaran
Melalui analisis transaksi di rantai, penyerang membina beberapa set transaksi perangkap:
- USDC besar: Robot mendapat keuntungan sekitar 36.997120 USDC, tetapi meninggalkan 20 USDC sebagai kuasa. - USDT besar: Robot mendapat keuntungan sekitar 37.053440 USDT, tetapi meninggalkan 20 USDT sebagai kuasa. - WETH besar: Robot mendapat keuntungan sekitar 0.0179 WETH, tetapi meninggalkan 16 WETH sebagai kuasa. - Perdagangan kecil berjalan normal, kuasa digunakan dalam transaksi yang sama untuk mengurangkan kecurigaan.
Dalam transaksi kecil, selepas robot memberikan kuasa untuk kuota token sebenar, kontrak anak akan segera memindahkan token sebenar, kuasa tersebut terpakai, dan kelihatan sepenuhnya normal.
Dalam transaksi besar, kontrak anak tidak memanggil transferFrom untuk memindahkan token sebenarnya, tetapi secara langsung mencetak token palsu melalui transaksi palsu. Robot menganggap ia telah menyelesaikan langkah awal swap biasa, tetapi kuasa untuk token sebenarnya masih kekal.
Inilah inti serangan seluruhnya: transaksi kecil menghabiskan kuasa secara normal, sementara transaksi besar mengekalkan kuasa.
Proses serangan
Sebagai contoh serangan perdagangan terhadap USDC:
(1) Penyerang memanggil koordinator untuk menetapkan blok semasa sebagai armed (2) Penyerang memanggil pemicu untuk mengemas kini status beberapa pasangan Ring V2 palsu (3) Bot MEV mendapati peluang arbitrage dan melaksanakan transaksi
Aliran dalaman perdagangan MEV Bot adalah seperti berikut:
(1) Kontrak MEV Bot memberikan kuasa jumlah USDC yang besar kepada sub-kontrak tertentu (2) MEV Bot memanggil fungsi wrapTo/wrap sub-kontrak (3) Kerana status semasa sub-kontrak ialah armed, ia tidak menghabiskan USDC sebenar, tetapi mencetak token palsu ke pasangan, sementara kuasa USDC kekal (4) MEV Bot meneruskan memanggil swap pasangan palsu (5) Pasangan lompatan kedua menghantar token kepada MEV Bot (6) Kontrak hub membayar keuntungan USDC sebenar yang sedikit kepada MEV Bot

contoh persetujuan
hash transaksi: 0x0121e07a916c06eea3e7daf11893f3f0b95b9e1684124545ae14c32aee6029bb
Hasil yang dilihat oleh MEV Bot: satu transaksi arbitrage berjaya, menghasilkan keuntungan USDC yang sebenar. Namun, kuasa untuk USDC dikekalkan oleh sub-syarikat. Proses semacam ini diulang secara berasingan untuk USDC, USDT, dan WETH, akhirnya membentuk banyak kuasa.
Hash transaksi serangan adalah:
0x2be8704f5a59b69e0b71f64aefdb99eb0e8ae9fb3926147c581910d71bcf3e65
Penyerang memanggil dran loop kontrak koordinator, dengan calldata yang mengandungi 66 alamat kontrak anak, serta alamat kontrak MEV Bot. Selagi kontrak MEV Bot sebelum ini telah memberikan kuasa kuota kepada kontrak anak, kontrak anak boleh secara langsung menghantar token sebenar yang berkaitan kepada penyerang.
Hasil akhir:
- 20 USDC authorization besar telah habis digunakan - 16 WETH authorization besar telah habis digunakan - Sebahagian kuasa autorisasi USDT masih ada, tetapi baki USDT tidak mencukupi
Analisis arus dana
Selepas serangan berjaya, alamat penyerang (0x3e37f4A10d771Ba9dE44b6d301410b1BEdeA65d0) menerima $2.87M USDC, $2.04M USDT, dan 1,474 WETH. Selepas itu, penyerang menukar stabelcoin menjadi ETH dan menghantar ke 4 alamat berikut:
- 0xe3Da36E4bd1a5738fa5D6Ef4F0e4dF40bDeB5f17 (kira-kira 1,000 ETH) - 0x74Dc5b93586D248D5Aec64b3586736FF0A0D0e65 (1,001 ETH) - 0xd8C125efCBc99408eC8723E9BBd81d1E8D39D845 (1,001 ETH) - 0x71d4416A7A85e08a5Fe7227Ca3B44Fc639e94e97 (1,423 ETH)
Di antaranya, 0xe3Da3 telah memindahkan 1,000 ETH ke Tornado Cash, manakala ETH pada tiga alamat lain tidak mengalami perpindahan lanjutan. Aliran dana mereka ditunjukkan seperti berikut:

Penutup
Serangan ini memperlihatkan satu kaedah serangan yang sangat canggih: penyerang tidak menyerang kod kontrak secara langsung, tetapi berdasarkan logik perniagaan MEV Bot, mereka membina skenario arbitrase yang sesuai untuk menipu MEV Bot membuat kuasa yang kelihatan tidak bermasalah, kemudian memindahkan asetnya. Bagi bot arbitrase dan MEV Bot, tidak cukup hanya bergantung pada simulasi keuntungan untuk menilai keselamatan laluan, terutamanya apabila laluan arbitrase mengandungi kontrak asing, token palsu, atau wrapper tersuai; sepatutnya berhati-hati dan mempertimbangkan pemeriksaan paksa terhadap perubahan allowance selepas transaksi.

