Modul SSO 2 - Kerentanan Kontrak Pintar: Penyelaman Mendalam ke Serangan Reentrancy
Kontrak pintar menawarkan transparansi tetapi mengandung risiko. Artikel ini mengungkap kerentanan seperti Reentrancy, dengan kerugian $150M DAO sebagai kasus. Integer Overflow menyebabkan kemunduran $900M BeautyChain. DAOMaker kehilangan $4M akibat cacat Access Control. Serangan FlashLoan membuat Harves Finance kehilangan $38M.
Oleh Markos Mebellis

Di halaman ini
Kontrak pintar merevolusi industri global dengan efisiensi, transparansi, dan fitur yang tidak dapat diubah. Namun, desainnya yang terbuka dan otomatis juga membuatnya rentan terhadap risiko. Untuk memaksimalkan potensinya sekaligus meminimalkan ancaman, penting untuk memahami kerentanannya dan kemungkinan jalur serangan. Membuat dan memelihara kontrak ini membutuhkan perhatian cermat dan kepatuhan terhadap praktik terbaik. Artikel ini membahas kerentanan umum, mengilustrasikannya dengan kasus dunia nyata untuk meningkatkan pemahaman. Mari kita lihat artikel berikut, atas izin Salus Security.
Kerentanan Utama:
**Reentrancy:** Di sini, penyerang memanfaatkan celah, masuk kembali ke fungsi sebelum operasi kunci selesai atau nilai diperbarui.
Reentrancy Fungsi Tunggal: Ini terjadi ketika kontrak berinteraksi dengan kontrak jahat, memungkinkan kontrak tersebut masuk kembali ke suatu fungsi. Misalnya, kontrak berbahaya dapat terus masuk kembali ke fungsi 'withdrawBalance', menyedot lebih banyak ether sebelum saldo diperbarui.
Serangan Terkenal:
- The DAO (2016): Setelah mengumpulkan $150 juta, kontrak ini diretas akibat kerentanan pengkodean. Hal ini menyebabkan perpecahan dalam jaringan Ethereum.
- PolyDex (2021): Kehilangan $500k akibat serangan reentrancy pada Kontrak Pintar PLX Locker.
- Bacon Protocol (2022): Mengalami kerugian $1M akibat bug reentrancy pada fungsi lend().
- Lendf.Me (2020): Kehilangan sekitar $24,7 juta di berbagai mata uang kripto.
**Reentrancy Lintas Fungsi:** Muncul dari status bersama antara fungsi yang berbeda dan perlindungan masuk kembali yang buruk. Contoh 'balances' di atas menunjukkan bahwa meskipun 'withdrawAll' memiliki perlindungan, penyerang tetap dapat memanfaatkan fungsi 'transfer'.
Insiden Terkenal:
- DFX Finance (2022): Kehilangan lebih dari $7 juta akibat serangan yang memanfaatkan fungsi tanpa perlindungan reentrancy.
- Hundred Finance (2022): Kehilangan sekitar $6,5 juta setelah serangan reentrancy memanfaatkan fungsi borrowFresh.
- Fei Protocol (2022): Kehilangan sekitar $80 juta dari serangan yang memanfaatkan celah Reentrancy.
**Reentrancy Lintas Kontrak:** Dihasilkan dari status bersama di berbagai kontrak dan urutan modifikasi variabel yang salah. Bahkan jika fungsi memiliki perlindungan, fungsi lain, seperti 'burnAccount', tetap dapat dimanfaatkan.
Serangan Menonjol:
- Rari Capital (2021): Kehilangan sekitar $10 juta (~2600 ETH) dalam waktu kurang dari satu jam.
- ValueDefi (2021): Kehilangan 5345.314 WBNB akibat perhitungan share yang tidak valid, yang bergantung pada data eksternal.
Reentrancy Baca-Saja:
Reentrancy baca-saja memanfaatkan fungsi yang, meskipun tidak mengubah status kontrak, tetap dapat menghasilkan output yang salah ketika status tidak konsisten.
Serangan Penting:
- QuickSwap (2022): Penyerang menyalahgunakan flash loan untuk mengubah harga spot aset, menipu 138 ETH dan 700 token MATIC. Hal ini mungkin terjadi karena cacat pada oracle Curve LP.
- dForce (2023): Bug reentrancy baca-saja terdapat dalam kode yang mengakses oracle harga di rantai Arbitrum dan Optimism dengan Curve Finance.
- Sentimente (2023): Serangan yang memanfaatkan cacat reentrancy baca-saja menyebabkan pencurian $1 juta. Untungnya, 90% dikembalikan oleh pelaku.
- Sturdy (2023): Kehilangan sekitar 442 ETH akibat masalah reentrancy baca-saja Balancer di mana harga B-stETH-STABLE dirusak.
Pencegahan Kerentanan Reentrancy:
- Selalu patuhi pola check-effect-interaction.
- Gunakan perlindungan masuk kembali untuk semua operasi sensitif.
- Tangani setiap panggilan eksternal dengan cermat.
Integer Overflow:
Ketika perhitungan melampaui batas, terjadi overflow, sering kali menghasilkan nilai yang sangat kecil atau sangat besar.
Serangan Ilustratif:
- BeautyChain (2018): Penyerang mengambil 10^58 BEC melalui integer overflow, melepaskan $900 juta yang mengejutkan.
- Poolz (2023): Mengakibatkan kerugian sekitar $665.000 di rantai Ethereum, Binance, dan Polygon.
Penanggulangan Integer Overflow:
- Gunakan metode perhitungan aman seperti pustaka safeMath.
- Prioritaskan pemeriksaan batas untuk memastikan hasil tetap dalam rentang.
- Adopsi versi kompiler solidity 0.8.0 atau lebih baru untuk deteksi overflow bawaan.
Access Control:
Kerentanan access control muncul dari tidak adanya batasan akses yang ketat pada fungsi yang menangani operasi krusial.
- Serangan Menonjol:
- DAOMaker (2021): Sekitar ~$4M disedot setelah fungsi
initdibiarkan rentan. - GymNetwork (2022): Penyerang memanfaatkan kelalaian autentikasi pada depositFromOtherContract(), memfasilitasi penambahan saldo ilegal tanpa pembayaran aktual. Kerugiannya? Sekitar 2.475,91 WBNB.
- Tempdao (2023): Pendekatan longgar terhadap access control untuk fungsi migrateStake menyebabkan kerugian melebihi $2,34 juta.
Kerentanan Access Control
- Deskripsi: Kerentanan yang muncul akibat mekanisme pembatasan yang tidak memadai yang mengatur akses dan hak istimewa ke operasi tertentu dalam suatu sistem.
Langkah Pencegahan:
- Pemeriksaan Izin Ketat: Selalu terapkan protokol izin ketat untuk fungsi, terutama yang menangani operasi sensitif.
- Mekanisme Multi-Signature: Untuk tugas yang memerlukan pengambilan keputusan bersama, gunakan protokol multi-signature yang memerlukan beberapa persetujuan sebelum menjalankan operasi sensitif.
Vektor Serangan Umum
- Deskripsi: Berbagai metode atau saluran yang digunakan penyerang untuk mengeksploitasi kerentanan dalam suatu sistem, terutama pada smart contract.
Contoh Penting:
- Serangan FlashLoan: Mengeksploitasi fitur peminjaman instan pada sistem keuangan terdesentralisasi untuk menjalankan aktivitas berbahaya.
- Front-Running: Penyerang mengetahui transaksi tertunda milik pengguna lain dan menindaklanjutinya dengan menawarkan biaya gas yang lebih tinggi.
Serangan FlashLoan
- Deskripsi: Meskipun secara inheren bukan serangan, FlashLoan adalah fitur DeFi yang memungkinkan pengguna meminjam sejumlah besar dana secara instan tanpa jaminan. Fitur ini telah dieksploitasi karena cacat logika dalam interaksi dan hubungan kontrak.
Serangan Terkenal:
- Harves Finance (2020.10.26): Mengakibatkan kerugian $38 juta.
- InverseFinance (2022.6.16): Menyebabkan kerugian 53.2445 WBTC dan 99,976.29 USDT.
- NewFreeDAO (2022.9.8): Menguras 4,481 WBNB, setara dengan sekitar $1,25 juta.
- Lodestar (2022.12.11): Dieksploitasi melalui manipulasi harga oracle.
- 0vix (2023.4.28): Mengakibatkan kerugian $2 juta di chain Polygon.
Rekomendasi Pencegahan:
- Kenali karakteristik Flashloan selama pengembangan proyek.
- Untuk penentuan harga yang akurat, gunakan rata-rata berbobot waktu atau beberapa oracle.
Front-running
- Deskripsi: Penyerang mengetahui transaksi pengguna lain dari memPool dan memanfaatkannya dengan menawarkan biaya gas yang lebih tinggi.
Serangan Terkenal:
- Sushi Badger Digg (2021.1.25): Mengakibatkan kerugian sebesar 81.68 ETH.
- Sushiswap Ape-ETH pool (2022.5.17): Penyerang memperoleh keuntungan sekitar 0.3 ETH.
- Uniswap (2023.4.2): Menyebabkan kerugian sekitar $25 juta melalui serangan sandwich.
Rekomendasi Pencegahan:
- Gunakan perlindungan slippage saat bertransaksi.
- Lakukan perdagangan pada jam non-sibuk, terutama di pasar yang volatil.
- Gunakan FlashBot rpc dari 1inch untuk mengirim transaksi langsung ke miner, sehingga melewati memPool.
Ringkasan
Selamat! Anda telah menyelesaikan Modul 2 - Kerentanan Smart Contract: Pendalaman Serangan Reentrancy dan Eksploitasi Umum
Mari tinjau pembelajaran Anda:
Kerentanan Reentrancy - Penyerang memanfaatkan celah, masuk kembali ke fungsi sebelum fungsi tersebut selesai sepenuhnya.
- Reentrancy Fungsi Tunggal: Kontrak jahat masuk kembali ke fungsi di kontrak lain.
- Reentrancy Antar-Fungsi: State bersama antar fungsi berbeda dieksploitasi akibat perlindungan reentry yang lemah.
- Reentrancy Antar-Kontrak: Mengeksploitasi state bersama di berbagai kontrak.
- Reentrancy Read-Only: Mengeksploitasi fungsi yang menghasilkan output keliru saat state tidak konsisten.
Integer Overflow - Perhitungan yang melampaui batas yang ditetapkan, menghasilkan nilai ekstrem.
Kerentanan Kontrol Akses - Timbul dari tidak adanya batasan akses yang ketat pada fungsi-fungsi penting.
Vektor Serangan Umum - Metode yang digunakan penyerang untuk mengeksploitasi kerentanan sistem.
**FlashLoan Attack **- Fitur DeFi yang memungkinkan peminjaman besar secara instan tanpa jaminan tetapi dieksploitasi karena cacat logika.
Serangan Front-running- Penyerang mengetahui transaksi yang tertunda dan memanfaatkannya dengan menawarkan biaya gas lebih tinggi.
Artikel ini dipersembahkan oleh:
