Runtime Protection mewujudkan perlindungan kontrol risiko pada rantai DeFi

Penulis: Artela Chinese blog, medium# Abstract

Serangan re-entrancy masih menjadi tantangan Metode pertahanan yang ada terutama difokuskan pada level kode sumber protokol, yang hanya berlaku sebelum kontrak memasuki keadaan runtime

"Runtime protection" adalah pelengkap penting untuk keamanan DeFi. Ini bertujuan untuk "melindungi hasil eksekusi" dan memastikan bahwa eksekusi protokol konsisten dengan desain yang diharapkan

Desain EVM tidak mendukung "perlindungan runtime", karena smart contract tidak dapat mengakses informasi konteks penuh dari status runtime

Artela mengeksplorasi paradigma lapisan eksekusi EVM+Extension, menyempurnakan lapisan eksekusi untuk menghilangkan serangan masuk kembali

Artela mengimplementasikan ekstensi on-chain "runtime protection" melalui Aspect Programming

Kami menunjukkan langkah demi langkah cara mencegah serangan reentrancy pada kontrak Curve melalui Aspect

Mengapa serangan reentrancy masih menjadi tantangan meskipun ada kontrol risiko

Meskipun serangan reentrancy adalah masalah yang terkenal dan banyak pengendalian risiko telah dilakukan, insiden keamanan yang melibatkan serangan semacam itu terus terjadi selama dua tahun terakhir:

Curve Finance Attack (Juli 2023) — $60 juta Curve mengalami serangan reentrancy karena cacat kompilasi dalam bahasa pemrograman kontraknya Vyper.

Origin Protocol Attack (November 2022) — Proyek Stablecoin senilai $7 juta Origin Dollar (OUSD) mengalami serangan reentrancy.

Serangan Protokol Sirene (September 2021) — $3,5 juta, AMM pool mengalami serangan reentrancy.

Serangan Cream Finance (Agustus 2021) - $18,8 juta, penyerang mengeksploitasi kerentanan reentrancy untuk pinjaman sekunder.

Saat ini, fokus pencegahan serangan reentrancy adalah pada level kode sumber dari kontrak pintar. Langkah-langkahnya termasuk mengintegrasikan ReentrancyGuard OpenZeppelin dan melakukan audit keamanan pada kode logika kontrak untuk menghindari risiko keamanan yang telah ditentukan.

Pendekatan ini, yang dikenal sebagai solusi "kotak putih", bertujuan untuk menghindari kerentanan pada tingkat kode sumber untuk meminimalkan kesalahan logika. Namun, tantangan utamanya adalah ketidakmampuan untuk bertahan dari bahaya tersembunyi yang tidak diketahui.

"Menerjemahkan" kontrak dari kode sumber ke runtime sebenarnya adalah proses yang menantang. Setiap langkah dapat menimbulkan masalah tak terduga bagi pengembang, dan kode sumber kontrak itu sendiri mungkin tidak sepenuhnya mencakup semua situasi potensial. Dalam kasus Curve, bahkan jika kode sumber protokol sudah benar, mungkin masih ada ketidaksesuaian antara proses akhir dan rancangan protokol yang dimaksudkan karena masalah compiler.

Tidaklah cukup hanya mengandalkan keamanan protokol pada kode sumber dan tingkat kompilasi. Bahkan jika kode sumber tampak tanpa cacat, kerentanan masih dapat muncul secara tidak terduga karena masalah kompiler.

Kami membutuhkan perlindungan runtime

Tidak seperti langkah-langkah pengendalian risiko yang ada yang terkonsentrasi pada tingkat kode sumber protokol dan berlaku sebelum eksekusi, perlindungan waktu proses melibatkan pengembang protokol yang menulis aturan dan operasi perlindungan waktu proses untuk menangani keadaan waktu proses yang tidak terduga. Ini memfasilitasi evaluasi real-time dan respons terhadap hasil eksekusi runtime.

Perlindungan runtime sangat penting dalam meningkatkan keamanan DeFi dan merupakan tambahan penting untuk tindakan keamanan yang ada. Dengan melindungi protokol dengan cara "kotak hitam", ini meningkatkan keamanan dengan memastikan bahwa hasil operasi akhir konsisten dengan rancangan protokol yang dimaksudkan, tanpa secara langsung mengganggu pelaksanaan kode kontrak.

Tantangan menerapkan perlindungan runtime

Sayangnya, desain EVM tidak mendukung perlindungan on-chain runtime karena smart contract tidak memiliki akses ke konteks runtime penuh.

Bagaimana mengatasi tantangan ini? Kami yakin prasyarat berikut diperlukan:

Modul khusus yang menyediakan akses ke semua informasi di seluruh kontrak pintar, termasuk seluruh konteks transaksi.

Otorisasi yang diperlukan diperoleh dari smart contract, memberikan modul hak untuk mengembalikan transaksi sesuai kebutuhan.

Pastikan fungsionalitas modul berlaku setelah kontrak cerdas dijalankan dan sebelum status dikomit.

EVM saat ini menghadapi keterbatasan dalam mengatasi tantangan di atas dan tidak dapat mengakomodasi inovasi lebih lanjut. Di bawah paradigma blockchain modular, lapisan eksekusi perlu mengeksplorasi terobosan melampaui EVM.

Ide Artela adalah ekstensi asli EVM +, dengan membangun lapisan ekstensi asli WASM dari EVM untuk mewujudkan melampaui EVM.

Pengantar Pemrograman Aspek

Kami meluncurkan Pemrograman Aspect, kerangka pemrograman untuk blockchain Artela yang mendukung penskalaan asli pada blockchain.

Aspect adalah modul ekstensi asli yang dapat diprogram, yang digunakan untuk mengintegrasikan fungsi kustom secara dinamis ke dalam blockchain saat runtime, sebagai pelengkap modular untuk kontrak pintar, dan meningkatkan fungsionalitas pada rantai.

Fitur Aspect adalah dapat mengakses API tingkat sistem dari lapisan dasar blockchain dan menambahkan logika ekstensi di setiap titik gabungan dari siklus hidup transaksi. Kontrak pintar dapat mengikat aspek tertentu untuk memicu fungsi yang diperluas. Ketika sebuah transaksi meminta smart contract, transaksi tersebut juga diproses oleh aspek yang terkait dengan kontrak tersebut.

Bagaimana Pemrograman Aspek mengimplementasikan perlindungan runtime

Aspect dapat merekam status eksekusi dari setiap pemanggilan fungsi dan mencegah reentrancy selama eksekusi fungsi callback. Saat panggilan reentrant terjadi selama eksekusi fungsi callback, Aspect mendeteksi dan mengembalikan transaksi dengan segera, mencegah penyerang mengeksploitasi kerentanan reentrancy. Dengan pendekatan ini, Aspect secara efektif mengeliminasi serangan reentrancy, memastikan keamanan dan stabilitas smart contract.

Aspect mengimplementasikan properti utama untuk perlindungan runtime:

Dapat dipicu setelah eksekusi smart contract dan sebelum penyerahan status: Modul aspek dapat diatur untuk diaktifkan setelah eksekusi smart contract tetapi sebelum penyerahan status.

Akses konteks transaksi lengkap: Aspect dapat mengakses konteks transaksi lengkap, termasuk seluruh informasi transaksi (metode, parameter, dll.), tumpukan panggilan (semua panggilan kontrak internal selama eksekusi), perubahan konteks status, dan semua kejadian yang dipicu transaksi.

Kemampuan panggilan sistem: Aspect dapat melakukan panggilan sistem dan memulai retracement transaksi bila diperlukan.

Pengikatan dan otorisasi dengan kontrak pintar: Kontrak pintar dapat diikat ke Aspect dan memberikan izin kepada Aspect untuk berpartisipasi dalam pemrosesan transaksi.

Terapkan Aspek untuk perlindungan masuk kembali

Dalam bab ini, kita membahas cara mengimplementasikan perlindungan runtime Aspect pada rantai.

Aspek "Niat Perlindungan Kontrak" yang sebenarnya dapat diterapkan di titik gabungan "preContractCall" dan "postContractCall" untuk mencegah serangan masuk kembali.

preContractCall: Dipicu sebelum pelaksanaan panggilan lintas kontrak

postContractCall: dipicu setelah eksekusi panggilan lintas kontrak

Untuk perlindungan masuk kembali, tujuan kami adalah mencegah masuk kembali kontrak hingga panggilan selesai. Dengan Aspect, kita dapat mencapainya dengan menambahkan logika spesifik pada titik potong dalam siklus hidup transaksi.

Dalam pointcut "preContractCall", Aspect memantau tumpukan panggilan kontrak. Jika ada panggilan duplikat di tumpukan panggilan (artinya reentrancy tak terduga dalam panggilan terkunci kami), aspek akan membatalkan panggilan.

Terapkan kontrak Curve dan cegah serangan masuk kembali

Kami menulis kontrak tiruan Curve dan memalsukan serangan reentrancy untuk mereproduksi proses ini dengan cara yang lebih mudah dipahami. Kode kontrak adalah sebagai berikut:

Dapat dilihat bahwa add_liquidity dan remove_liquidity dari kontrak di atas dilindungi oleh kunci re-entry lock yang sama, yang berarti bahwa jika perlindungan re-entry berfungsi normal, fungsi yang dilindungi tidak dapat dimasukkan kembali dengan mengubah kunci (misalnya, di hapus _likuiditas panggilan tambahkan_likuiditas).

Kompilasi kontrak di atas dengan vyper compiler 0.2.15, 0.2.16 atau 0.3.0 (versi ini telah mengetahui masalah perlindungan masuk kembali).

Kami kemudian menerapkan kontrak korban di atas dan menyerangnya dengan kontrak berikut:

Untuk mensimulasikan serangan yang sebenarnya, metode serangan dari kontrak ini mencoba memasukkan kembali add_liquidity dari metode remove_liquidity melalui fungsi fallback-nya. Jika reentrancy benar-benar terjadi, dapat diamati dalam tanda terima bahwa peristiwa AddLiquidity dicatat sebelum peristiwa RemoveLiquidity.

Sekarang mari gunakan Aspect untuk melindungi kontrak yang diserang. Sebelum melakukan hal berikut, harap selesaikan langkah-langkah berikut:

  1. Terapkan Aspek

  2. Mengikat kontrak korban dengan Aspect

Jika Anda tidak terbiasa dengan operasi Aspect, Anda dapat melihat panduan developer kami terlebih dahulu.

Setelah melakukan hal di atas, mari kita coba memanggil metode penyerangan lagi untuk memeriksa apakah operasi akan berhasil.

Dari gambar bergerak (Anda dapat melihat tautan asli di akhir artikel), kami dapat melihat bahwa transaksi reentrant telah dikembalikan, yang berarti bahwa Aspect kami berhasil melindungi kontrak korban dari serangan masuk kembali.

Kesimpulannya

Serangan baru-baru ini terhadap Curve sekali lagi menunjukkan bahwa tidak ada protokol yang 100% sepenuhnya aman. Tidaklah cukup hanya berfokus pada keamanan pada tingkat sumber dan kompilasi protokol. Bahkan jika kode sumber tampak tanpa cacat, kerentanan masih dapat muncul secara tidak terduga karena masalah kompiler.

Untuk meningkatkan keamanan DeFi, perlindungan runtime menjadi sangat penting. Dengan melindungi protokol dengan cara "kotak hitam", memastikan bahwa pelaksanaan protokol konsisten dengan desain yang dimaksudkan, protokol ini dapat secara efektif mencegah serangan masuk kembali saat runtime.

Kami memotong kontrak Curve dan mensimulasikan sepenuhnya serangan reentrancy baru-baru ini, dan mereproduksi seluruh proses dengan cara yang lebih mudah dipahami. Menggunakan pemrograman aspek sebagai pendekatan baru untuk perlindungan runtime on-chain, kami menunjukkan langkah demi langkah cara melindungi kontrak korban dengan aspek. Tujuan kami adalah membantu membasmi serangan re-entrancy yang mungkin dialami oleh protokol DeFi seperti Curve, sehingga meningkatkan keamanan di seluruh ruang DeFi.

Dengan Pemrograman Aspect, pengembang tidak hanya dapat mencapai perlindungan runtime on-chain di ruang keamanan, tetapi juga mengaktifkan kasus penggunaan inovatif yang belum pernah terjadi sebelumnya seperti maksud, JIT, dan otomatisasi on-chain. Selain itu, kerangka umum berdasarkan Cosmos SDK ini tidak hanya akan mendukung blockchain Artela, tetapi juga mendukung blockchain lain untuk membuat ekstensi asli berdasarkan lapisan eksekusi mereka sendiri.

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
  • Komentar
  • Bagikan
Komentar
0/400
Tidak ada komentar
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)