Move adalah bahasa kontrak pintar yang dapat dikompilasi dan dijalankan di lingkungan blockchain yang mengimplementasikan MoveVM. Sejak awal desainnya, bahasa ini telah mempertimbangkan banyak masalah keamanan terkait blockchain dan kontrak pintar, serta mengadopsi beberapa prinsip desain keamanan dari bahasa RUST. Sebagai generasi baru bahasa kontrak pintar yang mengutamakan keamanan, seberapa aman sebenarnya Move? Apakah ia dapat menghindari ancaman keamanan umum yang ada pada mesin virtual kontrak seperti EVM, WASM, dan sebagainya, baik di tingkat bahasa maupun mekanisme terkait? Apakah Move sendiri memiliki masalah keamanan yang unik?
Artikel ini akan membahas masalah keamanan bahasa Move dari tiga aspek: karakteristik bahasa, mekanisme operasi, dan alat verifikasi.
1. Fitur Keamanan Bahasa Move
Menulis kode yang bebas dari bug adalah sulit, bahkan setelah melalui banyak pengujian, tidak ada jaminan sepenuhnya. Menulis kode yang mempertahankan atribut keamanan kunci saat berinteraksi dengan kode yang tidak tepercaya adalah lebih menantang. Ada berbagai teknik yang dapat diterapkan untuk menegakkan keamanan pada saat runtime, seperti sandbox, isolasi proses, penguncian objek, dan pola pemrograman lainnya; juga dapat ditentukan pada saat kompilasi untuk keamanan statis, seperti tipe statis yang ketat atau pemeriksaan asersi.
Kadang-kadang, analisis semantik dan alat analisis statis dapat digunakan untuk memastikan bahwa kode memenuhi aturan keamanan, bahkan ketika berinteraksi dengan kode yang tidak tepercaya, tetap dapat mempertahankan beberapa kontrak logika yang dapat dibuktikan. Metode ini tampaknya baik, dapat menghindari biaya waktu berjalan dan mendeteksi masalah keamanan lebih awal. Namun, keamanan yang diperoleh bahasa pemrograman melalui metode ini sangat terbatas, dengan dua alasan utama: pertama, mereka biasanya memiliki karakteristik bahasa yang sulit dianalisis dengan alat analisis statis, seperti pengiriman dinamis, berbagi variabilitas, dan refleksi, yang merupakan logika non-linear, karakteristik ini melanggar aturan invarians keamanan, memberikan penyerang permukaan serangan yang luas. Kedua, sebagian besar bahasa pemrograman sulit untuk diperluas menjadi mendukung alat statis terkait keamanan atau bahasa yang sangat ekspresif, meskipun kedua jenis perluasan ini sangat penting.
Desain bahasa Move mendukung interaksi yang aman dengan kode yang tidak tepercaya dan juga mendukung verifikasi statis. Ini memiliki fitur keamanan ini karena mengabaikan semua logika non-linear yang didasarkan pada pertimbangan fleksibilitas, tidak mendukung pengiriman dinamis, dan juga tidak mendukung panggilan eksternal rekursif, melainkan menggunakan konsep generik, penyimpanan global, sumber daya, dan sebagainya untuk mewujudkan beberapa pola pemrograman alternatif. Misalnya, Move menghilangkan fitur penjadwalan dinamis dan pemanggilan rekursif, yang di bahasa kontrak pintar lainnya dapat menyebabkan kerentanan reentrancy yang mahal.
Fitur keamanan utama dari bahasa Move meliputi:
Modular: Setiap modul Move terdiri dari serangkaian definisi tipe struktur dan prosedur. Modul dapat mengimpor definisi tipe yang dideklarasikan dalam modul lain dan memanggil prosedur.
Struktur: dapat mendefinisikan struktur tipe sumber daya, digunakan untuk merepresentasikan data yang dapat disimpan dalam penyimpanan kunci/nilai global.
Proses: mendefinisikan proses inisialisasi, aman, dan tidak aman. Proses dapat memiliki pembatasan kontrol akses.
Penyimpanan global: memungkinkan penyimpanan data yang persisten, hanya bisa dibaca dan ditulis secara programatik oleh modul yang memilikinya.
Pemeriksaan Invarian: dapat mendefinisikan invarian pemeriksaan statis untuk memastikan integritas sumber daya dalam sistem.
Verifikator bytecode: Menegakkan sistem tipe pada tingkat bytecode, mencegah sumber daya dibuat, dibongkar, atau dirujuk secara tidak semestinya.
Fitur-fitur ini memungkinkan Move untuk memberikan jaminan keamanan yang kuat baik pada saat kompilasi maupun saat runtime.
2. Mekanisme Operasi Move
Program Move dijalankan di dalam mesin virtual, tidak dapat mengakses memori sistem secara langsung, ini memastikan bahwa ia dapat berjalan dengan aman di lingkungan yang tidak tepercaya.
Move menggunakan model eksekusi berbasis tumpukan. Penyimpanan global dibagi menjadi dua bagian: memori ( heap ) dan global variable ( stack ). Memori adalah penyimpanan tingkat satu, dan tidak dapat menyimpan pointer yang menunjuk ke unit memori. Variabel global digunakan untuk menyimpan pointer yang menunjuk ke unit memori, diakses melalui alamat dan tipe.
Move menggunakan interpreter berbasis tumpukan untuk menjalankan instruksi bytecode, metode ini mudah diimplementasikan dan dikendalikan, serta memiliki persyaratan perangkat keras yang rendah, cocok untuk skenario blockchain. Dibandingkan dengan interpreter berbasis register, interpreter berbasis tumpukan lebih mudah untuk mengontrol dan mendeteksi salinan dan pemindahan antar variabel.
Status saat menjalankan program Move adalah sebuah quadruple ⟨C, M, G, S⟩, yang mencakup stack panggilan (C), memori (M), variabel global (G), dan stack operand (S). Stack panggilan berisi informasi konteks eksekusi prosedur dan nomor instruksi. Saat menjalankan instruksi Call, objek stack panggilan baru akan dibuat, menyimpan parameter dan mengeksekusi instruksi kontrak baru. Ketika menemui instruksi percabangan, dilakukan lompatan statis di dalam prosedur.
MoveVM memisahkan penyimpanan data dan tumpukan panggilan, yang merupakan perbedaan utama dibandingkan EVM. Dalam Move, sumber daya di bawah alamat akun status pengguna ( disimpan secara independen, dan pemanggilan program harus mematuhi aturan izin dan sumber daya. Desain ini牺牲了一定灵活性, tetapi meningkatkan keamanan dan efisiensi eksekusi.
![Analisis Keamanan Move: Game Changer Bahasa Kontrak Pintar])https://img-cdn.gateio.im/webp-social/moments-69101617731b12c40620802eecf76caf.webp(
3. Pindahkan Prover
Move Prover adalah alat verifikasi formal berbasis inferensi yang dapat membantu pengembang memastikan keakuratan kontrak pintar, mengurangi risiko transaksi. Ini menggunakan bahasa formal untuk menggambarkan perilaku program, dan memverifikasi apakah program memenuhi harapan melalui algoritma inferensi.
Move Prover menggunakan algoritma verifikasi deduktif untuk menyimpulkan perilaku program berdasarkan informasi yang diketahui, memastikan bahwa perilaku tersebut sesuai dengan yang diharapkan. Ini membantu memastikan keakuratan program dan mengurangi beban kerja pengujian manual.
Proses kerja Move Prover adalah sebagai berikut:
Menerima file sumber Move sebagai input, yang berisi spesifikasi program
Parser mengekstrak spesifikasi, compiler mengkompilasi kode sumber menjadi bytecode
Membuat model objek validator
Menerjemahkan model ke dalam bahasa perantara Boogie
Sistem verifikasi Boogie menghasilkan syarat verifikasi
Mengirimkan kondisi verifikasi ke solver Z3 untuk diperiksa
Menghasilkan laporan diagnosis dan mengonversi ke kesalahan tingkat sumber kode
Move menyediakan Move Specification Language untuk mendeskripsikan spesifikasi, yang merupakan subset dari bahasa Move, mendukung deskripsi statis perilaku kebenaran program. Spesifikasi dapat ditulis secara terpisah dari kode bisnis.
Move Prover adalah alat yang kuat, dapat membantu pengembang memastikan keakuratan kontrak pintar, mengurangi risiko transaksi. Ini menggunakan metode formal untuk memverifikasi apakah program sesuai dengan yang diharapkan, meningkatkan kepercayaan pengembang dalam menerapkan kontrak pintar.
![Analisis Keamanan Move: Game Changer dalam Bahasa Kontrak Pintar])https://img-cdn.gateio.im/webp-social/moments-372ff914a241634ca57784dc9685a03d.webp(
Ringkasan
Bahasa Move telah mempertimbangkan keamanan secara menyeluruh, dari fitur bahasa, eksekusi mesin virtual hingga alat keamanan yang memberikan perlindungan yang kuat. Ini牺牲了一定的灵活性, pemeriksaan tipe yang ketat dan logika linier, yang menguntungkan otomatisasi pemeriksaan kompilasi dan verifikasi formal. Desain MoveVM memisahkan status dari logika, lebih sesuai dengan kebutuhan manajemen keamanan aset blockchain.
Bahasa Move dapat secara efektif menghindari kerentanan umum dalam EVM seperti reentrancy, overflow, dan injeksi Call/DelegateCall. Namun, masalah seperti otentikasi, logika kode, dan overflow pada struktur bilangan besar masih perlu diperhatikan oleh pengembang. Meskipun Move Prover kuat, ia tidak dapat sepenuhnya menghindari kelalaian dalam desain keseluruhan.
Meskipun Move telah mempertimbangkan banyak aspek keamanan, tidak ada bahasa dan program yang sepenuhnya aman. Disarankan agar pengembang kontrak pintar Move tetap menggunakan layanan audit dari perusahaan keamanan pihak ketiga, dan menyerahkan penulisan dan verifikasi bagian standar kepada tim keamanan profesional.
![Analisis Keamanan Move: Game Changer Bahasa Kontrak Pintar])https://img-cdn.gateio.im/webp-social/moments-f7cd11fef1c66709b219e1a1e8d2e4da.webp(
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.
23 Suka
Hadiah
23
7
Bagikan
Komentar
0/400
GasFeeWhisperer
· 20jam yang lalu
move menyegarkan pemahaman, inilah yang disebut keamanan
Lihat AsliBalas0
GasGasGasBro
· 08-03 23:15
Terlalu sulit, setiap kali melihat keamanan saya merasa botak.
Lihat AsliBalas0
ForkTongue
· 08-03 07:07
move adalah sesuatu yang sangat luar biasa, kami benar-benar tidak memahaminya.
Lihat AsliBalas0
AirdropBuffet
· 08-02 20:38
move memang bull jauh lebih sederhana dibandingkan rust
Analisis mendalam tentang fitur keamanan bahasa Move: dari desain bahasa hingga Verifikasi Formal
Analisis Keamanan Bahasa Move
Pendahuluan
Move adalah bahasa kontrak pintar yang dapat dikompilasi dan dijalankan di lingkungan blockchain yang mengimplementasikan MoveVM. Sejak awal desainnya, bahasa ini telah mempertimbangkan banyak masalah keamanan terkait blockchain dan kontrak pintar, serta mengadopsi beberapa prinsip desain keamanan dari bahasa RUST. Sebagai generasi baru bahasa kontrak pintar yang mengutamakan keamanan, seberapa aman sebenarnya Move? Apakah ia dapat menghindari ancaman keamanan umum yang ada pada mesin virtual kontrak seperti EVM, WASM, dan sebagainya, baik di tingkat bahasa maupun mekanisme terkait? Apakah Move sendiri memiliki masalah keamanan yang unik?
Artikel ini akan membahas masalah keamanan bahasa Move dari tiga aspek: karakteristik bahasa, mekanisme operasi, dan alat verifikasi.
1. Fitur Keamanan Bahasa Move
Menulis kode yang bebas dari bug adalah sulit, bahkan setelah melalui banyak pengujian, tidak ada jaminan sepenuhnya. Menulis kode yang mempertahankan atribut keamanan kunci saat berinteraksi dengan kode yang tidak tepercaya adalah lebih menantang. Ada berbagai teknik yang dapat diterapkan untuk menegakkan keamanan pada saat runtime, seperti sandbox, isolasi proses, penguncian objek, dan pola pemrograman lainnya; juga dapat ditentukan pada saat kompilasi untuk keamanan statis, seperti tipe statis yang ketat atau pemeriksaan asersi.
Kadang-kadang, analisis semantik dan alat analisis statis dapat digunakan untuk memastikan bahwa kode memenuhi aturan keamanan, bahkan ketika berinteraksi dengan kode yang tidak tepercaya, tetap dapat mempertahankan beberapa kontrak logika yang dapat dibuktikan. Metode ini tampaknya baik, dapat menghindari biaya waktu berjalan dan mendeteksi masalah keamanan lebih awal. Namun, keamanan yang diperoleh bahasa pemrograman melalui metode ini sangat terbatas, dengan dua alasan utama: pertama, mereka biasanya memiliki karakteristik bahasa yang sulit dianalisis dengan alat analisis statis, seperti pengiriman dinamis, berbagi variabilitas, dan refleksi, yang merupakan logika non-linear, karakteristik ini melanggar aturan invarians keamanan, memberikan penyerang permukaan serangan yang luas. Kedua, sebagian besar bahasa pemrograman sulit untuk diperluas menjadi mendukung alat statis terkait keamanan atau bahasa yang sangat ekspresif, meskipun kedua jenis perluasan ini sangat penting.
Desain bahasa Move mendukung interaksi yang aman dengan kode yang tidak tepercaya dan juga mendukung verifikasi statis. Ini memiliki fitur keamanan ini karena mengabaikan semua logika non-linear yang didasarkan pada pertimbangan fleksibilitas, tidak mendukung pengiriman dinamis, dan juga tidak mendukung panggilan eksternal rekursif, melainkan menggunakan konsep generik, penyimpanan global, sumber daya, dan sebagainya untuk mewujudkan beberapa pola pemrograman alternatif. Misalnya, Move menghilangkan fitur penjadwalan dinamis dan pemanggilan rekursif, yang di bahasa kontrak pintar lainnya dapat menyebabkan kerentanan reentrancy yang mahal.
Fitur keamanan utama dari bahasa Move meliputi:
Modular: Setiap modul Move terdiri dari serangkaian definisi tipe struktur dan prosedur. Modul dapat mengimpor definisi tipe yang dideklarasikan dalam modul lain dan memanggil prosedur.
Struktur: dapat mendefinisikan struktur tipe sumber daya, digunakan untuk merepresentasikan data yang dapat disimpan dalam penyimpanan kunci/nilai global.
Proses: mendefinisikan proses inisialisasi, aman, dan tidak aman. Proses dapat memiliki pembatasan kontrol akses.
Penyimpanan global: memungkinkan penyimpanan data yang persisten, hanya bisa dibaca dan ditulis secara programatik oleh modul yang memilikinya.
Pemeriksaan Invarian: dapat mendefinisikan invarian pemeriksaan statis untuk memastikan integritas sumber daya dalam sistem.
Verifikator bytecode: Menegakkan sistem tipe pada tingkat bytecode, mencegah sumber daya dibuat, dibongkar, atau dirujuk secara tidak semestinya.
Fitur-fitur ini memungkinkan Move untuk memberikan jaminan keamanan yang kuat baik pada saat kompilasi maupun saat runtime.
2. Mekanisme Operasi Move
Program Move dijalankan di dalam mesin virtual, tidak dapat mengakses memori sistem secara langsung, ini memastikan bahwa ia dapat berjalan dengan aman di lingkungan yang tidak tepercaya.
Move menggunakan model eksekusi berbasis tumpukan. Penyimpanan global dibagi menjadi dua bagian: memori ( heap ) dan global variable ( stack ). Memori adalah penyimpanan tingkat satu, dan tidak dapat menyimpan pointer yang menunjuk ke unit memori. Variabel global digunakan untuk menyimpan pointer yang menunjuk ke unit memori, diakses melalui alamat dan tipe.
Move menggunakan interpreter berbasis tumpukan untuk menjalankan instruksi bytecode, metode ini mudah diimplementasikan dan dikendalikan, serta memiliki persyaratan perangkat keras yang rendah, cocok untuk skenario blockchain. Dibandingkan dengan interpreter berbasis register, interpreter berbasis tumpukan lebih mudah untuk mengontrol dan mendeteksi salinan dan pemindahan antar variabel.
Status saat menjalankan program Move adalah sebuah quadruple ⟨C, M, G, S⟩, yang mencakup stack panggilan (C), memori (M), variabel global (G), dan stack operand (S). Stack panggilan berisi informasi konteks eksekusi prosedur dan nomor instruksi. Saat menjalankan instruksi Call, objek stack panggilan baru akan dibuat, menyimpan parameter dan mengeksekusi instruksi kontrak baru. Ketika menemui instruksi percabangan, dilakukan lompatan statis di dalam prosedur.
MoveVM memisahkan penyimpanan data dan tumpukan panggilan, yang merupakan perbedaan utama dibandingkan EVM. Dalam Move, sumber daya di bawah alamat akun status pengguna ( disimpan secara independen, dan pemanggilan program harus mematuhi aturan izin dan sumber daya. Desain ini牺牲了一定灵活性, tetapi meningkatkan keamanan dan efisiensi eksekusi.
![Analisis Keamanan Move: Game Changer Bahasa Kontrak Pintar])https://img-cdn.gateio.im/webp-social/moments-69101617731b12c40620802eecf76caf.webp(
3. Pindahkan Prover
Move Prover adalah alat verifikasi formal berbasis inferensi yang dapat membantu pengembang memastikan keakuratan kontrak pintar, mengurangi risiko transaksi. Ini menggunakan bahasa formal untuk menggambarkan perilaku program, dan memverifikasi apakah program memenuhi harapan melalui algoritma inferensi.
Move Prover menggunakan algoritma verifikasi deduktif untuk menyimpulkan perilaku program berdasarkan informasi yang diketahui, memastikan bahwa perilaku tersebut sesuai dengan yang diharapkan. Ini membantu memastikan keakuratan program dan mengurangi beban kerja pengujian manual.
Proses kerja Move Prover adalah sebagai berikut:
Move menyediakan Move Specification Language untuk mendeskripsikan spesifikasi, yang merupakan subset dari bahasa Move, mendukung deskripsi statis perilaku kebenaran program. Spesifikasi dapat ditulis secara terpisah dari kode bisnis.
Move Prover adalah alat yang kuat, dapat membantu pengembang memastikan keakuratan kontrak pintar, mengurangi risiko transaksi. Ini menggunakan metode formal untuk memverifikasi apakah program sesuai dengan yang diharapkan, meningkatkan kepercayaan pengembang dalam menerapkan kontrak pintar.
![Analisis Keamanan Move: Game Changer dalam Bahasa Kontrak Pintar])https://img-cdn.gateio.im/webp-social/moments-372ff914a241634ca57784dc9685a03d.webp(
Ringkasan
Bahasa Move telah mempertimbangkan keamanan secara menyeluruh, dari fitur bahasa, eksekusi mesin virtual hingga alat keamanan yang memberikan perlindungan yang kuat. Ini牺牲了一定的灵活性, pemeriksaan tipe yang ketat dan logika linier, yang menguntungkan otomatisasi pemeriksaan kompilasi dan verifikasi formal. Desain MoveVM memisahkan status dari logika, lebih sesuai dengan kebutuhan manajemen keamanan aset blockchain.
Bahasa Move dapat secara efektif menghindari kerentanan umum dalam EVM seperti reentrancy, overflow, dan injeksi Call/DelegateCall. Namun, masalah seperti otentikasi, logika kode, dan overflow pada struktur bilangan besar masih perlu diperhatikan oleh pengembang. Meskipun Move Prover kuat, ia tidak dapat sepenuhnya menghindari kelalaian dalam desain keseluruhan.
Meskipun Move telah mempertimbangkan banyak aspek keamanan, tidak ada bahasa dan program yang sepenuhnya aman. Disarankan agar pengembang kontrak pintar Move tetap menggunakan layanan audit dari perusahaan keamanan pihak ketiga, dan menyerahkan penulisan dan verifikasi bagian standar kepada tim keamanan profesional.
![Analisis Keamanan Move: Game Changer Bahasa Kontrak Pintar])https://img-cdn.gateio.im/webp-social/moments-f7cd11fef1c66709b219e1a1e8d2e4da.webp(