Pada 21 Juni, salah satu MEV Bot yang paling aktif di jaringan Ethereum, Jaredfromsubway.eth, mengalami serangan 'honeypot' (serangan umpan) yang dirancang dengan cermat, kehilangan aset kripto senilai lebih dari $7.5 juta. Berikut adalah analisis tim keamanan Beosin terhadap serangan ini dan pelacakan aliran dana yang dicuri.
Analisis Alur Serangan
Keluarga Kontrak Serangan
- Kontrak Koordinator (0xb84db016324e8f2bfdd8dd9c260338aee0a8df52): Bertanggung jawab untuk mencatat apakah blok saat ini berada dalam status 'armed', dan pada tahap akhir secara berulang memanggil sub-kontrak untuk menarik dana. - Kontrak Pemicu (0x4de8c729a064ff6087cc84a4152969349e4feb98): Bertanggung jawab untuk mengatur status pasangan perdagangan palsu dalam blok yang sama, membuat jalur arbitrase tampak dapat dieksekusi. - Sub-kontrak / Kontrak Token Palsu: Menyamar sebagai token ERC-20 normal, digunakan untuk mendapatkan otorisasi (approval) yang sah. - Kontrak Hub: Bertanggung jawab membayar sejumlah kecil keuntungan nyata, membuat MEV Bot mengira ada peluang untung. - Pasangan Ring V2: Pasangan perdagangan Uniswap v2 palsu. - Kontrak Token Perantara Palsu: Digunakan untuk membangun jalur arbitrase multi-hop, seperti fCAP, fUSDC.
Kunci Serangan: Memikat Otorisasi (Approval)
Melalui analisis transaksi on-chain, penyerang membangun beberapa set transaksi umpan:
- USDC dalam jumlah besar: Bot mendapat untung sekitar 36.997120 USDC, tetapi meninggalkan otorisasi 20 USDC. - USDT dalam jumlah besar: Bot mendapat untung sekitar 37.053440 USDT, tetapi meninggalkan otorisasi 20 USDT. - WETH dalam jumlah besar: Bot mendapat untung sekitar 0.0179 WETH, tetapi meninggalkan otorisasi 16 WETH. - Transaksi kecil berjalan normal, otorisasi dikonsumsi dalam transaksi yang sama, digunakan untuk mengurangi kecurigaan.
Dalam transaksi kecil, setelah bot mengotorisasi jumlah token nyata, sub-kontrak akan segera mentransfer token nyata tersebut, otorisasi terkonsumsi, dan terlihat sepenuhnya normal.
Namun, dalam transaksi besar, sub-kontrak tidak memanggil transferFrom untuk mentransfer token nyata, melainkan langsung mencetak token palsu melalui pasangan perdagangan yang dipalsukan. Bot mengira telah menyelesaikan langkah awal swap yang normal, tetapi otorisasi token nyata masih dipertahankan.
Inilah inti dari seluruh serangan: transaksi kecil mengonsumsi otorisasi secara normal, transaksi besar mempertahankan otorisasi.
Alur Serangan
Mengambil contoh transaksi serangan terhadap USDC:
(1) Penyerang memanggil koordinator, mengatur blok saat ini menjadi 'armed'. (2) Penyerang memanggil pemicu, memperbarui status beberapa pasangan Ring V2 palsu. (3) MEV Bot mendeteksi peluang arbitrase dan mengeksekusi transaksi.
Alur internal transaksi MEV Bot kira-kira sebagai berikut:
(1) Kontrak MEV Bot memberikan otorisasi jumlah USDC yang besar ke suatu sub-kontrak. (2) MEV Bot memanggil fungsi wrapTo/wrap dari sub-kontrak tersebut. (3) Karena status saat ini adalah 'armed', sub-kontrak tidak mengonsumsi USDC nyata, melainkan mencetak token palsu ke pasangan, otorisasi USDC dipertahankan. (4) MEV Bot melanjutkan dengan memanggil swap pada pasangan palsu. (5) Pasangan kedua (second hop pair) mengirimkan token ke MEV Bot. (6) Kontrak hub membayar sejumlah kecil keuntungan USDC nyata kepada MEV Bot.
Contoh Approval
Tx hash: 0x0121e07a916c06eea3e7daf11893f3f0b95b9e1684124545ae14c32aee6029bb
Hasil yang dilihat MEV Bot: sebuah transaksi arbitrase yang sukses, memperoleh keuntungan USDC nyata. Namun, otorisasi USDC dipertahankan oleh sub-kontrak. Proses semacam ini diulangi untuk USDC, USDT, dan WETH, akhirnya membentuk banyak otorisasi.
Hash transaksi serangan adalah:
0x2be8704f5a59b69e0b71f64aefdb99eb0e8ae9fb3926147c581910d71bcf3e65
Penyerang memanggil fungsi 'drain loop' dari kontrak koordinator, dengan calldata berisi 66 alamat sub-kontrak, serta alamat kontrak MEV Bot. Selama kontrak MEV Bot sebelumnya meninggalkan otorisasi jumlah untuk sub-kontrak, sub-kontrak dapat langsung mentransfer token nyata yang sesuai kepada penyerang.
Hasil Akhir:
- 20 otorisasi USDC dalam jumlah besar dikonsumsi seluruhnya. - 16 otorisasi WETH dalam jumlah besar dikonsumsi seluruhnya. - Sebagian otorisasi USDT masih ada, tetapi saldo USDT tidak cukup.
Analisis Aliran Dana
Setelah serangan berhasil, alamat penyerang (0x3e37f4A10d771Ba9dE44b6d301410b1BEdeA65d0) menerima $2.87 juta USDC, $2.04 juta USDT, dan 1,474 WETH. Kemudian 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)
Dari alamat-alamat tersebut, 0xe3Da3... telah mentransfer 1,000 ETH ke Tornado Cash. ETH di tiga alamat lainnya belum ada transfer lebih lanjut. Diagram aliran dananya ditunjukkan di bawah ini:
Kesimpulan
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, sehingga menyesatkan MEV Bot untuk memberikan otorisasi yang tampaknya tidak bermasalah, dan akhirnya mentransfer asetnya. Bagi robot arbitrase dan MEV Bot, mereka tidak boleh hanya mengandalkan simulasi keuntungan untuk menilai keamanan jalur, terutama ketika jalur arbitrase mengandung kontrak asing, token palsu, atau wrapper khusus. Mereka harus berhati-hati dan mempertimbangkan untuk melakukan pemeriksaan paksa terhadap perubahan allowance setelah transaksi.
Lihat artikel asli









