Keamanan DeFi yang Rentan: Analisis Kerentanan Umum dan Strategi Pencegahan

robot
Pembuatan abstrak sedang berlangsung

Analisis Umum Kerentanan Keamanan dalam Keuangan Desentralisasi dan Langkah Pencegahannya

Baru-baru ini, seorang ahli keamanan membagikan wawasan tentang keamanan DeFi kepada anggota komunitas. Dia meninjau kejadian keamanan besar yang terjadi di industri Web3 selama lebih dari setahun terakhir, membahas penyebab terjadinya peristiwa tersebut dan bagaimana cara menghindarinya, merangkum kerentanan keamanan umum dari kontrak pintar serta langkah-langkah pencegahannya, dan memberikan beberapa saran keamanan kepada proyek dan pengguna.

Jenis-jenis kerentanan yang umum ditemukan di bidang Keuangan Desentralisasi termasuk pinjaman kilat, manipulasi harga, masalah otorisasi fungsi, panggilan eksternal sembarangan, masalah fungsi fallback, kerentanan logika bisnis, kebocoran kunci pribadi, dan serangan reentrancy. Artikel ini akan fokus pada tiga jenis tersebut: pinjaman kilat, manipulasi harga, dan serangan reentrancy.

Pinjaman Kilat

Pinjaman kilat adalah inovasi dalam Keuangan Desentralisasi, tetapi sering dimanfaatkan oleh peretas. Penyerang meminjam sejumlah besar dana melalui pinjaman kilat, untuk memanipulasi harga atau menyerang logika bisnis. Pengembang perlu mempertimbangkan apakah fungsi kontrak akan mengalami anomali akibat dana yang besar, atau dimanfaatkan dalam satu transaksi untuk berinteraksi dengan beberapa fungsi untuk mendapatkan keuntungan yang tidak semestinya.

Selama dua tahun terakhir, pinjaman kilat telah menimbulkan banyak masalah. Beberapa proyek DeFi yang tampak memberikan imbal hasil tinggi, sebenarnya memiliki banyak risiko keamanan. Misalnya, ada proyek yang memberikan imbalan berdasarkan jumlah kepemilikan pada waktu tertentu, yang dimanfaatkan oleh penyerang untuk membeli sejumlah besar token menggunakan pinjaman kilat untuk mendapatkan sebagian besar imbalan. Ada juga beberapa proyek yang menghitung harga berdasarkan token, yang mudah dipengaruhi oleh pinjaman kilat.

Pengendalian Harga

Masalah manipulasi harga berkaitan erat dengan pinjaman kilat, terutama ada dua situasi:

  1. Menggunakan data pihak ketiga saat menghitung harga, tetapi cara penggunaannya tidak benar atau kurang pemeriksaan, menyebabkan harga dimanipulasi secara jahat.
  2. Menggunakan saldo token dari alamat tertentu sebagai variabel perhitungan, di mana saldo tersebut dapat ditambah atau dikurangi sementara.

Serangan Reentrancy

Risiko utama dari memanggil kontrak eksternal adalah bahwa mereka dapat mengambil alih alur kontrol dan membuat perubahan yang tidak terduga pada data. Contoh serangan reentrancy yang umum adalah sebagai berikut:

solidity mapping (address => uint) private userBalances;

fungsi tarikSaldo() publik { uint amountToWithdraw = userBalances[msg.sender]; (bool success, ) = msg.sender.call.value(amountToWithdraw)(""); require(success); userBalances[msg.sender] = 0; }

Dalam contoh ini, karena saldo pengguna hanya diatur menjadi 0 pada akhir fungsi, penyerang dapat memanggil fungsi penarikan beberapa kali di tengah, yang menyebabkan penarikan yang berulang.

Untuk menyelesaikan masalah reentrancy, perlu diperhatikan hal-hal berikut:

  1. Tidak hanya mencegah reentrancy dari fungsi tunggal, tetapi juga mempertimbangkan reentrancy antar fungsi dan antar kontrak.
  2. Ikuti pola Checks-Effects-Interactions dalam pengkodean.
  3. Gunakan modifier anti-reentrancy yang telah terverifikasi.

Penting untuk menghindari pengulangan roda, dan sebaiknya menggunakan praktik keamanan terbaik yang telah teruji dalam industri.

Saran Keamanan untuk Proyek

  1. Mematuhi praktik keamanan terbaik dalam pengembangan kontrak pintar.
  2. Mewujudkan fungsi kontrak yang dapat ditingkatkan dan dijeda.
  3. Menggunakan mekanisme kunci waktu.
  4. Meningkatkan investasi keamanan dan membangun sistem keamanan yang komprehensif.
  5. Meningkatkan kesadaran keamanan semua karyawan.
  6. Mencegah tindakan jahat internal, sambil meningkatkan efisiensi dan memperkuat pengendalian risiko.
  7. Hati-hati dalam melibatkan pihak ketiga, ikuti prinsip "default hulu dan hilir tidak aman".

Bagaimana Pengguna Menilai Keamanan Kontrak Pintar

  1. Pastikan kontrak tersebut open-source.
  2. Periksa apakah Pemilik menggunakan mekanisme multi-tanda tangan yang terdesentralisasi.
  3. Lihat situasi perdagangan yang sudah ada pada kontrak.
  4. Ketahui apakah kontrak tersebut adalah kontrak perwakilan, apakah dapat ditingkatkan, dan apakah ada kunci waktu.
  5. Pastikan kontrak telah diaudit oleh beberapa lembaga, dan evaluasi apakah hak akses Owner terlalu besar.
  6. Perhatikan jenis dan keamanan oracle yang digunakan oleh proyek.

Singkatnya, dalam bidang Keuangan Desentralisasi, keamanan selalu merupakan faktor utama yang perlu dipertimbangkan. Pihak proyek harus secara menyeluruh meningkatkan kesadaran dan langkah-langkah keamanan, sementara pengguna perlu tetap waspada dan dengan cermat mengevaluasi keamanan proyek sebelum membuat keputusan.

Cobo Keuangan Desentralisasi 安全课(下):Keuangan Desentralisasi 常⻅安全漏洞及预防

DEFI1.14%
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.
  • Hadiah
  • 4
  • Posting ulang
  • Bagikan
Komentar
0/400
UnluckyLemurvip
· 08-12 15:44
Sekali lagi, itu hanya jebakan lama. Kapan kita bisa memiliki beberapa cara bermain baru?
Lihat AsliBalas0
DefiPlaybookvip
· 08-10 18:09
Statistik menunjukkan bahwa Pinjaman Flash masih merupakan sumber risiko terbesar, dengan proporsi mencapai 47,8%.
Lihat AsliBalas0
wrekt_but_learningvip
· 08-10 17:58
Kelemahan masih jebakan yang lama, tidak ada yang baru.
Lihat AsliBalas0
BoredApeResistancevip
· 08-10 17:46
Para suckers yang mengalami kerugian besar akhirnya mengerti?
Lihat AsliBalas0
  • Sematkan
Perdagangkan Kripto Di Mana Saja Kapan Saja
qrCode
Pindai untuk mengunduh aplikasi Gate
Komunitas
Bahasa Indonesia
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)