daftar lengkap kerentanan yang dapat menemui pada smart contract - Rian010/Journal GitHub Wiki

Berikut ini adalah daftar lengkap kerentanan yang dapat menemui pada smart contract:

  1. Reentrancy Attack: Serangan reentrancy terjadi ketika sebuah fungsi memanggil fungsi lainnya secara terurai dan mendapatkan akses ke variabel global atau state variable, yang dapat digunakan untuk merubah data sebelum proses selesai. Hal ini dapat dipraktikkan oleh attacker dengan cara mencallback fungsi yang telah disebarkan, sehingga melakukan transaksi berulang-ulang hingga mencapai tujuan. Untuk mencegah serangan ini, gunakan konsep "checks-effects-interactions" dimana semua pengecekan dilakukan terlebih dahulu sebelum melakukan efek apa pun, termasuk interaksi dengan kontrak luar.
  2. Integer Overflow dan Underflow: Kerentanan ini terjadi saat suatu operasi matematis melewati batas angka terbesar maupun terkecil yang ditentukan oleh tipe data integer yang digunakan. Misalkan, jika sebuah bilangan bulat positif melebihi batas maksimum, dia akan kembali ke nilai minimum dan sebaliknya. Untuk mencegah hal ini, gunakan library SafeMath yang dapat melakukan pengecekan otomatis setiap kali melakukan operasi matematis.
  3. Race Condition: Kerentanan ini terjadi karena urutan eksekusi perintah tidak terkontrol secara absolut. Dalam situasi ini, dua atau lebih transaksi yang sedang berjalan bersamaan dapat saling memengaruhi hasil masing-masing. Solusinya adalah dengan menggunakan lock mechanism agar hanya satu transaksi yang bisa dieksekusi sekaligus.
  4. Time Dependency: Smart Contract yang sensitif waktu dapat menimbulkan kerentanan time dependency. Contohnya, misalnya smart contract itu memberikan bonus kepada orang yang mendaftar paling awal. Namun, jika attacker mengetahui waktu deadline registasi, attacker dapat menunda transaksi registrasinya hingga waktu terakhir sehingga mendapat bonus. Sebagai solusi, hindari mengandalkan waktu yang terlalu spesifik dan pastikan selalu mengimplementasikan logic fallback (alternatif).
  5. Front Running: Kerentanan front running terjadi ketika transaksi attacker dicatat dalam blockchain sebelum transaksi korban. Ini biasanya terjadi ketika transaksi attacker memiliki gas price lebih tinggi daripada transaksi korban. Untuk mencegah hal ini, gunakan private transaction atau implementasikan auction system yang aman.
  6. Denial of Service (DoS): Serangan DoS terjadi ketika seorang attacker mengirimi transaksi yang banyak tanpa henti ke smart contract, sehingga memicu overload server. Solusinya adalah dengan mengatur limit transaksi maksimal yang diterima dan melakukan validasi terhadap akun penyerang.
  7. Short Address Attack: Kerentanan short address attack terjadi ketika sebuah transaksi tidak memeriksa panjang alamat ETH target. Jika panjangnya kurang dari standarnya, maka alamat target akan diganti oleh attacker dengan alamat yang mereka inginkan. Untuk mencegah hal ini, cukup melakukan pengecekan panjang alamat target sebelum melakukan transaksi.
  8. Call to the Unknown: Kerentanan call to the unknown terjadi ketika sebuah smart contract memanggil fungsi dari kontrak luar yang belum diverifikasi. Hal ini dapat menyebabkan error atau worse, serangan. Untuk mencegah hal ini, gunakan library OpenZeppelin yang sudah diverifikasi dan aman atau verifikasi sendiri kontrak luar terlebih dahulu sebelum memanggilnya.
  9. Failed Send: Kerentanan failed send terjadi ketika sebuah transaksi gagal, tapi smart contract masih melanjutkan proses. Hal ini dapat menyebabkan loss fund. Untuk mencegah hal ini, pastikan selalu menggunakan require statement untuk melakukan pengecekan status transaksi.
  10. Visibility and Access Control: Kerentanan visibility dan access control terjadi ketika sebuah smart contract memiliki visibilitas atau kontrol akses yang buruk. Misalnya, sebuah fungsi internal atau private dapat diakses oleh siapa saja atau variabel state dapat diedit oleh siapa saja. Untuk mencegah hal ini, gunakan visibility level yang benar dan implementasikan access control stringent.

Dari daftar kerentanan yang telah sayajelaskan sebelumnya, kerentanan Reentrancy dan Integer Overflow/Underflow dikenali sebagai kerentanan paling berbahaya yang dapat menimbulkan dampak signifikan pada smart contract.

Kerentanan Reentrancy dapat memungkinkan seorang attacker untuk melakukan transaksi berulang-ulang hingga mencapai tujuan, sehingga dapat menyebabkan loss fund atau manipulasi data. Oleh karena itu, penting untuk memastikan bahwa setiap fungsi yang memanggil fungsi lainnya mengikuti prinsip "checks-effects-interactions", yaitu semua pengecekan dilakukan terlebih dahulu sebelum melakukan efek apa pun, termasuk interaksi dengan kontrak luar.

Sedangkan kerentanan Integer Overflow/Underflow dapat memungkinkan seorang attacker untuk melakukan manipulasi data numerik, sehingga dapat menghasilkan output yang tidak diharapkan. Untuk mencegah hal ini, gunakan library SafeMath yang dapat melakukan pengecekan otomatis setiap kali melakukan operasi matematis.

Dampak dari keduanya dapat sangat signifikan, terutama jika smart contract tersebut memiliki value besar atau memiliki posisi strategis dalam sistem. Karena itu, penting untuk melakukan auditing dan testing terhadap smart contract sebelum digunakan dalam lingkungan produksi.