Keamanan DeFi: Analisis lengkap kerentanan umum dan strategi perlindungan

robot
Pembuatan abstrak sedang berlangsung

Keamanan Umum pada Keuangan Desentralisasi dan Tindakan Pencegahan

Baru-baru ini, seorang ahli industri membagikan wawasan tentang keamanan Keuangan Desentralisasi. Dia meninjau insiden keamanan besar yang dialami industri Web3 selama lebih dari satu tahun terakhir, membahas penyebab insiden tersebut serta cara menghindarinya, merangkum celah keamanan umum pada kontrak pintar dan langkah pencegahan, serta memberikan beberapa saran keamanan kepada pengembang proyek dan pengguna biasa.

Jenis-jenis kerentanan DeFi yang umum meliputi pinjaman kilat, manipulasi harga, masalah izin fungsi, panggilan eksternal sembarangan, masalah fungsi fallback, kerentanan logika bisnis, kebocoran kunci privat, dan serangan re-entry. Berikut ini akan dijelaskan secara khusus tentang pinjaman kilat, manipulasi harga, serta serangan re-entry.

Pinjaman Kilat

Meskipun pinjaman kilat adalah inovasi dalam Keuangan Desentralisasi, namun sering dimanfaatkan oleh hacker. Penyerang meminjam sejumlah besar dana melalui pinjaman kilat untuk memanipulasi harga atau menyerang logika bisnis. Pengembang perlu mempertimbangkan apakah fungsi kontrak akan berperilaku tidak normal karena dana yang besar, atau apakah mungkin untuk berinteraksi dengan beberapa fungsi dalam satu transaksi untuk mendapatkan imbalan yang tidak semestinya.

Banyak proyek DeFi tampak memberikan imbal hasil yang tinggi, tetapi sebenarnya tingkat keahlian pengembang proyek bervariasi. Beberapa proyek mungkin menggunakan kode yang dibeli, meskipun kode itu sendiri tidak memiliki celah, secara logika tetap mungkin ada masalah. Misalnya, beberapa proyek memberikan imbalan berdasarkan jumlah kepemilikan pada waktu tertentu, tetapi dieksploitasi oleh penyerang yang menggunakan pinjaman kilat untuk membeli sejumlah besar token, dan pada saat imbalan diberikan, mereka mendapatkan sebagian besar keuntungan.

Manipulasi Harga

Masalah manipulasi harga berkaitan erat dengan pinjaman kilat, terutama karena beberapa parameter dalam perhitungan harga dapat dikontrol oleh pengguna. Ada dua jenis masalah yang umum:

  1. Menggunakan data pihak ketiga saat menghitung harga, tetapi cara penggunaannya tidak benar atau kurang pemeriksaan, menyebabkan harga dimanipulasi secara jahat.

  2. Menggunakan jumlah token dari alamat tertentu sebagai variabel perhitungan, di mana saldo token dari alamat tersebut dapat ditambah atau dikurangi sementara.

Serangan Reentrancy

Salah satu risiko utama dalam memanggil kontrak eksternal adalah bahwa mereka dapat mengambil alih aliran kontrol dan melakukan perubahan yang tidak terduga pada data. Misalnya:

soliditas 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; }

Karena saldo pengguna hanya diset menjadi 0 pada akhir fungsi, panggilan kedua dan seterusnya masih akan berhasil, sehingga saldo dapat ditarik berulang kali.

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

  1. Tidak hanya mencegah masalah reentrancy dari fungsi tunggal
  2. Mengkode mengikuti pola Checks-Effects-Interactions
  3. Gunakan modifier pencegah reentrancy yang telah diverifikasi

Sebaiknya menggunakan praktik keamanan yang sudah matang, daripada mengulang roda. Solusi baru yang dikembangkan sendiri sering kali kurang teruji dan memiliki probabilitas masalah yang lebih tinggi.

Saran Keamanan

Saran Keamanan Proyek

  1. Pengembangan kontrak mengikuti praktik keamanan terbaik
  2. Kontrak dapat ditingkatkan, dapat dijeda
  3. Menggunakan kunci waktu
  4. Meningkatkan investasi keamanan, membangun sistem keamanan yang komprehensif
  5. Meningkatkan kesadaran keamanan semua karyawan
  6. Mencegah kejahatan internal, sambil meningkatkan efisiensi dan memperkuat pengendalian risiko.
  7. Hati-hati dalam melibatkan pihak ketiga, lakukan verifikasi keamanan terhadap hulu dan hilir

Bagaimana pengguna dapat menentukan apakah kontrak pintar aman

  1. Apakah kontrak bersifat open source?
  2. Apakah Pemilik menggunakan multi-tanda tangan terdesentralisasi
  3. Periksa keadaan transaksi yang sudah ada pada kontrak
  4. Apakah kontrak tersebut merupakan kontrak perwakilan, apakah dapat diperbarui, apakah ada kunci waktu
  5. Apakah kontrak telah diaudit oleh beberapa lembaga, dan apakah hak akses Owner terlalu besar?
  6. Perhatikan keamanan oracle

总之,在Keuangan Desentralisasi领域,安全问题不容忽视。项目方和用户都应该提高警惕,采取必要的安全措施,共同维护Keuangan Desentralisasi生态的健康发展。

Cobo Keuangan Desentralisasi keamanan kelas (bawah): Kerentanan keamanan umum DeFi dan pencegahannya

DEFI6.81%
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
  • 6
  • Bagikan
Komentar
0/400
BearMarketBuildervip
· 2jam yang lalu
Bug ini diperbaiki satu demi satu, kapan ini akan berakhir?
Lihat AsliBalas0
BackrowObservervip
· 2jam yang lalu
Apa gunanya jika tidak bisa mengembangkan? Sudah kena hack.
Lihat AsliBalas0
NFT_Therapyvip
· 2jam yang lalu
Kontrak yang ditulis tidak kuat, Hacker tidak bisa kabur.
Lihat AsliBalas0
PhantomMinervip
· 2jam yang lalu
Bug ini terlalu banyak, bagaimana para suckers bisa mengatasi Hacker?
Lihat AsliBalas0
consensus_whisperervip
· 3jam yang lalu
Kita akan membahas keamanan Keuangan Desentralisasi lagi.
Lihat AsliBalas0
WalletManagervip
· 3jam yang lalu
Setelah melihat audit kode, bahkan cadangan dompet dingin terasa tidak cukup aman, kerentanan reentrancy ini terlalu dalam!
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)