denial-of-service ( DoS ) serangan dapat menyebabkan smart contract tidak dapat digunakan dengan normal untuk jangka waktu tertentu bahkan selamanya. Penyebab utamanya meliputi:
Logika kontrak memiliki cacat. Misalnya, beberapa implementasi fungsi publik tidak mempertimbangkan kompleksitas perhitungan, yang mungkin melebihi batas Gas dan menyebabkan transaksi gagal.
Dalam skenario panggilan lintas kontrak, eksekusi kontrak bergantung pada status kontrak eksternal. Eksekusi kontrak eksternal yang tidak dapat diandalkan dapat menghalangi operasi kontrak ini, seperti dana yang terkunci dan tidak dapat ditarik atau disetorkan.
Faktor manusia, seperti pemilik kontrak kehilangan kunci pribadi, yang mengakibatkan status sistem kunci tidak dapat diperbarui.
Berikut adalah analisis kerentanan serangan denial-of-service (DoS) dengan contoh spesifik.
1. Iterasi Melalui Struktur Data Besar yang Dapat Dimodifikasi Secara Eksternal
Berikut adalah kontrak sederhana untuk memberikan "dividen" kepada pengguna terdaftar:
Status kontrak mencakup daftar pengguna terdaftar dan pemetaan saldo akun. Pengguna dapat mendaftar dan menginisialisasi melalui register_account().
Pengelola membagikan dividen kepada pengguna melalui distribute_token(), dengan menjelajahi array terdaftar untuk mentransfer jumlah token tertentu ke setiap pengguna.
Masalahnya adalah bahwa ukuran registered tidak terbatas dan dapat dimanipulasi secara jahat, yang menyebabkan konsumsi Gas yang terlalu tinggi melebihi batas saat melakukan traversing.
Rekomendasi solusi:
Batasi ukuran struktur data, pastikan bahwa bahkan jika mencapai nilai maksimum tidak melebihi batas Gas
Menggunakan mode penarikan, terlebih dahulu mencatat, pengguna dapat mengambil kembali hadiah mereka melalui withdraw.
2. Ketergantungan status antar kontrak menyebabkan blokir
Pertimbangkan sebuah skenario kontrak "lelang:"
Mencatat penawar tertinggi saat ini dan jumlahnya
Pengguna dapat mendaftar akun untuk berpartisipasi dalam lelang
Ketika tawaran lebih tinggi dari harga tertinggi saat ini, kembalikan harga tertinggi sebelumnya, perbarui status
Masalahnya adalah pengembalian dana bergantung pada status kontrak eksternal. Jika akun penawar tertinggi sebelumnya telah dinonaktifkan, pengembalian dana akan gagal, menyebabkan tidak dapat memperbarui harga tertinggi, dan seluruh proses lelang terhenti.
Solusi:
Pertimbangkan kemungkinan kegagalan panggilan eksternal, terapkan penanganan kesalahan yang wajar. Misalnya, menyimpan dana yang tidak dapat dikembalikan, kemudian memungkinkan pengguna untuk menariknya secara terpisah.
3. Kunci pribadi administrator hilang
Beberapa fungsi kunci ( seperti menghentikan/melanjutkan transaksi ) hanya dapat dipanggil oleh administrator. Kehilangan kunci privat administrator akan mengakibatkan fungsi-fungsi ini tidak dapat digunakan, dan kontrak mungkin tidak dapat berfungsi dengan baik dalam jangka waktu yang lama.
Solusi:
Menggunakan mekanisme multisignature sebagai pengganti administrator tunggal, untuk mencapai tata kelola terdesentralisasi dan menghindari titik kegagalan tunggal.
Lihat Asli
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.
18 Suka
Hadiah
18
7
Bagikan
Komentar
0/400
NFTFreezer
· 07-16 03:27
Sudah diperkirakan, nomor dicuri kan selesai.
Lihat AsliBalas0
BridgeJumper
· 07-15 12:26
Kunci Pribadi hilang, kenapa kamu tidak bilang hilang celana?
Lihat AsliBalas0
AirdropF5Bro
· 07-13 07:29
Bos, tanda tangani lebih dulu, agar lebih aman.
Lihat AsliBalas0
MetaEggplant
· 07-13 07:28
Biaya sebenarnya untuk pengujian sedikit tinggi.
Lihat AsliBalas0
Ser_This_Is_A_Casino
· 07-13 07:26
Terlalu buruk, mengira dos hanya bisa mengurus web.
Analisis Risiko dan Strategi Pencegahan Serangan DoS pada Smart Contract
serangan penolakan layanan dalam kontrak pintar
denial-of-service ( DoS ) serangan dapat menyebabkan smart contract tidak dapat digunakan dengan normal untuk jangka waktu tertentu bahkan selamanya. Penyebab utamanya meliputi:
Logika kontrak memiliki cacat. Misalnya, beberapa implementasi fungsi publik tidak mempertimbangkan kompleksitas perhitungan, yang mungkin melebihi batas Gas dan menyebabkan transaksi gagal.
Dalam skenario panggilan lintas kontrak, eksekusi kontrak bergantung pada status kontrak eksternal. Eksekusi kontrak eksternal yang tidak dapat diandalkan dapat menghalangi operasi kontrak ini, seperti dana yang terkunci dan tidak dapat ditarik atau disetorkan.
Faktor manusia, seperti pemilik kontrak kehilangan kunci pribadi, yang mengakibatkan status sistem kunci tidak dapat diperbarui.
Berikut adalah analisis kerentanan serangan denial-of-service (DoS) dengan contoh spesifik.
1. Iterasi Melalui Struktur Data Besar yang Dapat Dimodifikasi Secara Eksternal
Berikut adalah kontrak sederhana untuk memberikan "dividen" kepada pengguna terdaftar:
Status kontrak mencakup daftar pengguna terdaftar dan pemetaan saldo akun. Pengguna dapat mendaftar dan menginisialisasi melalui register_account().
Pengelola membagikan dividen kepada pengguna melalui distribute_token(), dengan menjelajahi array terdaftar untuk mentransfer jumlah token tertentu ke setiap pengguna.
Masalahnya adalah bahwa ukuran registered tidak terbatas dan dapat dimanipulasi secara jahat, yang menyebabkan konsumsi Gas yang terlalu tinggi melebihi batas saat melakukan traversing.
Rekomendasi solusi:
2. Ketergantungan status antar kontrak menyebabkan blokir
Pertimbangkan sebuah skenario kontrak "lelang:"
Masalahnya adalah pengembalian dana bergantung pada status kontrak eksternal. Jika akun penawar tertinggi sebelumnya telah dinonaktifkan, pengembalian dana akan gagal, menyebabkan tidak dapat memperbarui harga tertinggi, dan seluruh proses lelang terhenti.
Solusi: Pertimbangkan kemungkinan kegagalan panggilan eksternal, terapkan penanganan kesalahan yang wajar. Misalnya, menyimpan dana yang tidak dapat dikembalikan, kemudian memungkinkan pengguna untuk menariknya secara terpisah.
3. Kunci pribadi administrator hilang
Beberapa fungsi kunci ( seperti menghentikan/melanjutkan transaksi ) hanya dapat dipanggil oleh administrator. Kehilangan kunci privat administrator akan mengakibatkan fungsi-fungsi ini tidak dapat digunakan, dan kontrak mungkin tidak dapat berfungsi dengan baik dalam jangka waktu yang lama.
Solusi: Menggunakan mekanisme multisignature sebagai pengganti administrator tunggal, untuk mencapai tata kelola terdesentralisasi dan menghindari titik kegagalan tunggal.