Overflow bilangan bulat adalah masalah pemrograman yang umum, terutama dalam pengembangan kontrak pintar blockchain yang perlu diperhatikan dengan lebih seksama. Ketika hasil perhitungan melebihi rentang yang dapat diwakili oleh tipe bilangan bulat, maka akan terjadi overflow bilangan bulat.
Overflow bilangan bulat dibagi menjadi dua kasus: overflow atas dan overflow bawah. Overflow atas berarti hasil melebihi nilai maksimum, misalnya nilai maksimum untuk tipe uint32 yaitu 4.294.967.295 ditambah 1 akan menjadi 0. Overflow bawah berarti hasil kurang dari nilai minimum, misalnya 0 untuk tipe uint32 dikurangi 1 akan menjadi 4.294.967.295.
Sebagai contoh token BEC dari BeautyChain, penyerang pernah memanfaatkan kerentanan overflow integer untuk mendapatkan banyak token. Dalam fungsi batchTransfer-nya, amount = cnt * _value dapat mengalami overflow, yang mengakibatkan pernyataan require untuk memeriksa saldo menjadi tidak efektif.
Untuk mencegah overflow integer, saat mengembangkan kontrak pintar dengan Rust, langkah-langkah berikut dapat diambil:
Konfigurasikan pemeriksaan overflow integer dalam mode release di Cargo.toml.
Menggunakan crate uint untuk mendukung tipe integer yang lebih besar, seperti U256, U512, dll.
Gunakan fungsi konversi tipe uint untuk mendeteksi overflow, seperti as_u128().
Gunakan fungsi Safe Math seperti checked_add(), checked_sub(), dan lain-lain untuk melakukan perhitungan yang aman.
Lakukan unwrap atau expect pada hasil Option yang dikembalikan oleh fungsi Safe Math.
Dengan metode ini, kita dapat secara efektif menghindari risiko keamanan yang disebabkan oleh overflow integer. Dalam pengembangan kontrak pintar, kita harus selalu waspada terhadap masalah overflow integer dan mengambil langkah perlindungan yang diperlukan.
Halaman ini mungkin berisi konten pihak ketiga, yang disediakan untuk tujuan informasi saja (bukan pernyataan/jaminan) dan tidak boleh dianggap sebagai dukungan terhadap pandangannya oleh Gate, atau sebagai nasihat keuangan atau profesional. Lihat Penafian untuk detailnya.
14 Suka
Hadiah
14
5
Bagikan
Komentar
0/400
CompoundPersonality
· 07-15 00:43
Masalah overflow sudah menjadi masalah lama.
Lihat AsliBalas0
MEVSandwichMaker
· 07-14 16:58
Bug overflow adalah menu wajib bagi Veteran Kripto.
Lihat AsliBalas0
CommunityWorker
· 07-13 17:55
Bug ini harus diselesaikan, tsk tsk
Lihat AsliBalas0
GasFeeCrybaby
· 07-13 17:50
Rupanya gas begitu mahal masih melimpah
Lihat AsliBalas0
DegenMcsleepless
· 07-13 17:34
Masalah overflow harus ditemukan lebih awal dan diobati lebih awal.
Keamanan smart contract: Analisis strategi perlindungan terhadap kerentanan overflow integer
Kerentanan Overflow Integer dan Perlindungannya
Overflow bilangan bulat adalah masalah pemrograman yang umum, terutama dalam pengembangan kontrak pintar blockchain yang perlu diperhatikan dengan lebih seksama. Ketika hasil perhitungan melebihi rentang yang dapat diwakili oleh tipe bilangan bulat, maka akan terjadi overflow bilangan bulat.
Overflow bilangan bulat dibagi menjadi dua kasus: overflow atas dan overflow bawah. Overflow atas berarti hasil melebihi nilai maksimum, misalnya nilai maksimum untuk tipe uint32 yaitu 4.294.967.295 ditambah 1 akan menjadi 0. Overflow bawah berarti hasil kurang dari nilai minimum, misalnya 0 untuk tipe uint32 dikurangi 1 akan menjadi 4.294.967.295.
Sebagai contoh token BEC dari BeautyChain, penyerang pernah memanfaatkan kerentanan overflow integer untuk mendapatkan banyak token. Dalam fungsi batchTransfer-nya, amount = cnt * _value dapat mengalami overflow, yang mengakibatkan pernyataan require untuk memeriksa saldo menjadi tidak efektif.
Untuk mencegah overflow integer, saat mengembangkan kontrak pintar dengan Rust, langkah-langkah berikut dapat diambil:
Konfigurasikan pemeriksaan overflow integer dalam mode release di Cargo.toml.
Menggunakan crate uint untuk mendukung tipe integer yang lebih besar, seperti U256, U512, dll.
Gunakan fungsi konversi tipe uint untuk mendeteksi overflow, seperti as_u128().
Gunakan fungsi Safe Math seperti checked_add(), checked_sub(), dan lain-lain untuk melakukan perhitungan yang aman.
Lakukan unwrap atau expect pada hasil Option yang dikembalikan oleh fungsi Safe Math.
Dengan metode ini, kita dapat secara efektif menghindari risiko keamanan yang disebabkan oleh overflow integer. Dalam pengembangan kontrak pintar, kita harus selalu waspada terhadap masalah overflow integer dan mengambil langkah perlindungan yang diperlukan.