Pada 21 Juni, salah satu MEV Bot paling aktif di jaringan Ethereum, Jaredfromsubway.eth, menjadi korban serangan "honeypot" yang dirancang dengan cermat, mengalami kerugian lebih dari $7,5 juta dalam aset kripto. Berikut adalah analisis dan pelacakan aliran dana yang dicuri oleh tim keamanan Beosin terhadap serangan ini.
Analisis alur serangan
Serang keluarga kontrak
- Koordinator kontrak (0xb84db016324e8f2bfdd8dd9c260338aee0a8df52): Bertanggung jawab untuk mencatat apakah blok saat ini berada dalam status armed, serta memanggil kontrak anak secara berulang di tahap akhir untuk menarik dana. - Trigger kontrak (0x4de8c729a064ff6087cc84a4152969349e4feb98): Bertanggung jawab untuk mengatur status pasangan perdagangan palsu dalam blok yang sama, sehingga jalur arbitrase tampak dapat dieksekusi. - Kontrak anak / kontrak token palsu: Menyamar sebagai token ERC-20 normal untuk mendapatkan otorisasi nyata. - Hub kontrak: Bertanggung jawab untuk membayarkan keuntungan kecil yang nyata, agar MEV Bot merasa menguntungkan. - Pasangan Ring V2: Pasangan Uniswap v2 palsu. - Kontrak token perantara palsu: Digunakan untuk membangun jalur arbitrase multi-lompatan, seperti fCAP, fUSDC.
Kunci serangan: penipuan otorisasi
Dengan menganalisis transaksi on-chain, penyerang membuat beberapa rangkaian transaksi umpan:
- USDC besar: Robot mendapat keuntungan sekitar 36,997120 USDC, tetapi meninggalkan otorisasi 20 USDC. - USDT besar: Robot mendapat keuntungan sekitar 37,053440 USDT, tetapi meninggalkan otorisasi 20 USDT. - WETH besar: Robot mendapat keuntungan sekitar 0,0179 WETH, tetapi meninggalkan otorisasi 16 WETH. - Transaksi kecil berjalan normal, otorisasi dikonsumsi dalam transaksi yang sama untuk mengurangi kecurigaan.
Dalam perdagangan kecil, setelah robot memberikan otorisasi kuota token asli, kontrak anak akan segera memindahkan token asli tersebut, otorisasi terpakai, dan tampak sepenuhnya normal.
Dalam transaksi besar, kontrak anak tidak memanggil transferFrom untuk mentransfer token asli, tetapi langsung mencetak token palsu melalui transaksi palsu. Robot mengira telah menyelesaikan langkah pra-swap normal, tetapi otorisasi token asli tetap dipertahankan.
Ini adalah inti dari seluruh serangan: transaksi kecil secara normal menghabiskan otorisasi, sementara transaksi besar mempertahankan otorisasi.
Alur serangan
Sebagai contoh serangan perdagangan terhadap USDC:
(1) Penyerang memanggil coordinator untuk mengatur blok saat ini menjadi armed. (2) Penyerang memanggil trigger untuk memperbarui status beberapa pasangan Ring V2 palsu. (3) MEV Bot mendeteksi peluang arbitrase dan menjalankan transaksi.
Proses internal perdagangan MEV Bot sebagai berikut:
(1) Kontrak MEV Bot memberikan otorisasi kuota USDC dalam jumlah besar ke sub-kontrak tertentu. (2) MEV Bot memanggil fungsi wrapTo/wrap dari sub-kontrak. (3) Karena status saat ini adalah armed, sub-kontrak tidak menghabiskan USDC asli, melainkan mencetak token palsu ke pasangan, sementara otorisasi USDC tetap dipertahankan. (4) MEV Bot terus memanggil swap pada pasangan palsu tersebut. (5) Pasangan lompatan kedua mengirimkan token ke MEV Bot. (6) Kontrak hub membayarkan keuntungan USDC asli dalam jumlah kecil kepada MEV Bot.

contoh persetujuan
tx hash: 0x0121e07a916c06eea3e7daf11893f3f0b95b9e1684124545ae14c32aee6029bb
Hasil yang dilihat oleh MEV Bot: sebuah transaksi arbitrase yang sukses, menghasilkan keuntungan USDC yang nyata. Namun, otorisasi USDC tetap disimpan oleh kontrak anak. Proses semacam ini diulang secara terpisah untuk USDC, USDT, dan WETH, sehingga membentuk sejumlah besar otorisasi.
Hash transaksi serangan:
0x2be8704f5a59b69e0b71f64aefdb99eb0e8ae9fb3926147c581910d71bcf3e65
Penyerang memanggil drain loop dari kontrak koordinator, dengan calldata yang berisi 66 alamat kontrak anak, serta alamat kontrak MEV Bot. Selama kontrak MEV Bot sebelumnya telah memberikan otorisasi kuota kepada kontrak anak, kontrak anak dapat langsung mentransfer token asli yang sesuai ke penyerang.
Hasil akhir:
- 20 USDC authorization telah seluruhnya digunakan - 16 WETH authorization telah seluruhnya digunakan - Sebagian otorisasi USDT masih ada, tetapi saldo USDT tidak mencukupi
Analisis Arus Dana
Setelah serangan berhasil, alamat penyerang (0x3e37f4A10d771Ba9dE44b6d301410b1BEdeA65d0) menerima $2,87M USDC, $2,04M USDT, dan 1.474 WETH. Selanjutnya, penyerang menukar stablecoin menjadi ETH dan mentransfernya ke 4 alamat berikut:
- 0xe3Da36E4bd1a5738fa5D6Ef4F0e4dF40bDeB5f17 (sekitar 1.000 ETH) - 0x74Dc5b93586D248D5Aec64b3586736FF0A0D0e65 (1.001 ETH) - 0xd8C125efCBc99408eC8723E9BBd81d1E8D39D845 (1.001 ETH) - 0x71d4416A7A85e08a5Fe7227Ca3B44Fc639e94e97 (1.423 ETH)
Di antaranya, 0xe3Da3 telah mentransfer 1.000 ETH ke Tornado Cash, sementara ETH dari tiga alamat lainnya tidak mengalami transfer lebih lanjut. Alur dana tersebut ditunjukkan seperti berikut:

Penutup
Serangan ini menunjukkan metode serangan yang sangat canggih: penyerang tidak menyerang kode kontrak secara langsung, tetapi berdasarkan logika bisnis MEV Bot, dengan membangun skenario arbitrase yang sesuai untuk menyesatkan MEV Bot agar memberikan otorisasi yang tampaknya tidak bermasalah, kemudian mentransfer asetnya. Bagi robot arbitrase dan MEV Bot, tidak cukup hanya mengandalkan estimasi keuntungan simulasi untuk menilai keamanan rute, terutama ketika jalur arbitrase mengandung kontrak asing, token palsu, atau wrapper khusus; sebaiknya berhati-hati dan mempertimbangkan pemeriksaan wajib terhadap perubahan allowance setelah transaksi.

