Pengujian dan Verifikasi Formal untuk Keamanan Kontrak Cerdas Web3

Pengujian dan Verifikasi Formal untuk Keamanan Kontrak Cerdas Web3

Pengujian dan Verifikasi Formal untuk Keamanan Kontrak Cerdas Web3 PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Waktu Baca: 9 menit

Bayangkan terjun payung. Sebelum melompat dari pesawat, Anda akan memeriksa parasut Anda ratusan kali, bukan? Pemeriksaan dan pengujian merupakan bagian integral dari keamanan; memikirkan hal yang berhubungan dengan keamanan. Kemungkinan akan ada mekanisme pengujian setelahnya, apakah itu pemasangan CCTV atau pengecekan tinta di pena sebelum ujian tertulis di sekolah, kita semua mengikuti langkah-langkah keamanan. Semakin tinggi risiko yang terlibat, semakin banyak hal yang kita uji. Dan ketika kita berbicara tentang kontrak pintar, risikonya BESAR. Anda tidak bisa gegabah dalam hal keamanan kontrak pintar.

1. Keamanan selalu dibutuhkan.

Anda yakin bisa mengunci pintu dua atau tiga kali tidak masalah. Bisakah Anda yakin rumah Anda tidak dapat dirampok saat Anda pergi? Anda tidak bisa karena Anda tidak tahu apa yang mungkin dilakukan perampok untuk masuk ke dalam rumah—hal yang sama berlaku untuk setiap tindakan pengamanan yang kami lakukan. Tidak ada metode yang benar-benar aman yang akan menjamin keamanan. Tetap saja, tindakan yang kami ambil dengan cepat meningkatkan peluang kami untuk aman, seperti itulah permainannya. Kami ingin meningkatkan kemungkinan aman dengan menggunakan langkah-langkah yang berbeda.

Dunia Web3 tidak berbeda. Tidak ada metode yang aman untuk menyelamatkan diri Anda, tetapi memiliki auditor berpengalaman dari QuillAudits dapat meningkatkan kemungkinan keamanan protokol Anda secara luar biasa dan akan memastikan keamanan Anda yang terkini. Di web3, ada dua mekanisme penting yang membantu Anda memahami seberapa aman Anda dengan melakukan beberapa pengujian pada protokol Anda:-

  1. Pengujian Kontrak Cerdas
  2. Verifikasi Formal Kontrak Cerdas

Mari kita pahami mereka secara mendetail dan pelajari bagaimana mereka membantu kita mengetahui titik lemah atau kerentanan kontrak kita.

2. Pengujian Kontrak Cerdas

Pengembang berpengalaman dapat menjelaskan pekerjaan ke mesin dengan kode. Namun, terkadang mesin tidak menggambarkan mekanisme persis yang ada dalam pikiran pengembang karena cacat atau kesalahan logis dalam kode. Pengujian adalah proses yang membantu mengidentifikasi di mana kode kita gagal dan apa yang dapat dilakukan untuk membuatnya sesuai dengan tindakan yang perlu kita lakukan.

Pengujian kontrak pintar adalah fase dalam siklus pengembangan di mana kami melakukan analisis mendetail terhadap kontrak kami dan mencoba mencari tahu di mana dan mengapa kode kami gagal. Hampir semua smart contract menjalani fase ini. Ada dua cara pengujian kontrak pintar dilakukan. Mari jelajahi mereka.

2.1 Otomatis

Seperti namanya, metode pengujian kontrak pintar ini digunakan untuk melakukan pengujian skrip. Ini melibatkan perangkat lunak otomatis yang melakukan pengujian berulang untuk menemukan kerentanan dan cacat dalam kontrak pintar. Alat pengujian otomatis ini dapat dikonfigurasi dengan data pengujian dan hasil yang diharapkan. Kemudian hasil aktual dibandingkan dengan yang diharapkan untuk memeriksa apakah kontrak berjalan dengan baik. Pengujian otomatis dapat diklasifikasikan lebih lanjut menjadi tiga kategori.

2.1.1. Pengujian Fungsional

Misalkan Anda menulis program untuk mengambil dua angka, a dan b, lalu mengembalikan penjumlahan kedua angka tersebut. Jadi untuk memeriksa program itu, Anda memberikan 2 dan 8 dan memberi hasil yang diharapkan menjadi 10. Sekarang ketika program berjalan, itu juga harus mengembalikan 10. Jika ya, maka itu berfungsi dengan baik, dan kode kami benar, tetapi jika itu tidak, maka ada beberapa kesalahan dengan kode kami. 

Pengujian fungsional membutuhkan pemahaman tentang bagaimana seharusnya perilaku kontrak Anda dalam kondisi tertentu. Kita dapat mengujinya dengan menjalankan komputasi dengan nilai yang dipilih dan membandingkan output yang dikembalikan. Pengujian Fungsional memiliki tiga kelas: -

  1. Pengujian unit:- Ini berkaitan dengan pengujian komponen individual dari smart contract untuk kebenaran. Itu asertif atau membutuhkan pernyataan pada variabel.
  1. integrasi ujing: – Ini berkaitan dengan pengujian beberapa komponen individual secara bersamaan. Pengujian integrasi adalah level yang lebih tinggi dalam hierarki daripada pengujian unit. Ini membantu kami menentukan kesalahan yang timbul dari interaksi berbagai fungsi, yang mungkin merupakan bagian dari kontrak pintar lainnya.
  1. System ujing: – Ini adalah yang tertinggi dalam hierarki. Dalam hal ini, kami menguji seluruh kontrak sebagai satu sistem yang terintegrasi penuh untuk melihat apakah kinerjanya sesuai dengan kebutuhan kami. Ini dilakukan dari sudut pandang pengguna, dan cara terbaik untuk melakukannya adalah dengan menerapkannya di testnet.

2.1.2. Analisis Statis

Analisis Statis dapat dilakukan bahkan tanpa menjalankan program. Ini melibatkan analisis kode sumber atau bytecode dari smart contract sebelum dieksekusi. Dengan demikian memberikan namanya, analisis statis dapat menghasilkan deteksi beberapa kerentanan umum.

2.1.3. Analisis Dinamis

Tidak seperti analisis statis, analisis dinamis dilakukan selama kontrak pintar dijalankan untuk mengidentifikasi masalah dalam kode. Penganalisis kode dinamis mengamati status berjalan kontrak dan menghasilkan laporan terperinci tentang kerentanan dan pelanggaran properti. Fuzzing berada di bawah analisis DINAMIS. Fuzzing memberi input yang salah atau berbahaya untuk menyebabkan eksekusi kode yang tidak diinginkan.

2.2 Panduan

Seperti namanya, metode pengujian kontrak pintar ini melibatkan interaksi rutin dengan pengembang manusia. Audit kode, di mana pengembang melewati baris kode, berada di bawah mode Manual pengujian kontrak pintar.

Mode manual membutuhkan banyak waktu, keterampilan, uang, dan tenaga. Namun, hasilnya seringkali sepadan karena, dengan ini, kami mengidentifikasi kerentanan yang mungkin luput dari perhatian dalam pengujian otomatis. Ada dua jenis pengujian manual yang penting:-

2.2.1 Audit Kode:- 

Cara terbaik untuk menguji apakah tindakan keamanan Anda berfungsi dengan baik adalah dengan mencoba memecahkannya. Misalnya, jika Anda ingin memeriksa apakah kunci mobil Anda berfungsi dengan baik, cobalah untuk memecahkannya. Sekarang Anda mungkin bertanya bahwa pencuri mobil yang terampil dapat dengan mudah membobol mobil saya. Saya mungkin tidak, jadi solusinya adalah mempekerjakan seseorang yang ahli dalam menerobos sehingga dia dapat membimbing Anda!

 Ya, saya berbicara tentang QuillAudits. Kami adalah tim auditor terampil yang dapat membimbing Anda. Audit kode memerlukan pola pikir penyerang untuk menemukan semua kemungkinan kerentanan dalam kode sumber. Audit kode adalah evaluasi terperinci dari kode kontrak pintar untuk mengungkap potensi kerentanan dan kelemahan.

2.2.2 Bounty Bug:-

Jika Anda berpikir mungkin ada beberapa kelemahan keamanan dalam kode sumber Anda (yang sebagian besar) dan Anda tidak dapat menemukannya, Anda dapat mengalihdayakan pekerjaan ini ke pekerja lepas dengan membuat sistem penghargaan. Ini lebih seperti mengumumkan hadiah bagi siapa saja yang dapat meretas smart contract Anda. Dengan melakukan ini, Anda mempelajari tentang kerentanan yang ada dalam kontrak cerdas Anda sehingga Anda dapat melindunginya dengan lebih baik dan menyelamatkan pengguna Anda dari kerugian.

3. Verifikasi Formal Kontrak Cerdas

Verifikasi formal adalah proses mengevaluasi kebenaran kontrak berdasarkan spesifikasi formal. Ini berarti verifikasi formal menilai apakah kode melakukan apa yang dimaksudkan. Verifikasi formal menggunakan metode formal untuk menentukan, merancang, dan memverifikasi program.

3.1 Apa spesifikasi formalnya?

Dalam konteks smart contract, spesifikasi formal mengacu pada properti yang harus tetap sama dalam setiap keadaan yang memungkinkan. Ini adalah properti "invarian" karena tidak dapat mengubah dan mewakili pernyataan logis tentang pelaksanaan kontrak.

Spesifikasi formal adalah kumpulan pernyataan yang ditulis dalam bahasa formal. Spesifikasi mencakup properti yang berbeda dan menjelaskan bagaimana properti kontrak harus berperilaku dalam keadaan lain. Spesifikasi formal sangat penting karena jika kontrak gagal memiliki variabel invarian atau perubahan properti selama pelaksanaan, hal itu dapat menyebabkan kemungkinan eksploitasi properti, yang dapat menyebabkan kerugian besar.

Ini dapat membantu kami menentukan apakah smart contract memenuhi spesifikasi atau memiliki perilaku yang tidak diharapkan. Verifikasi formal memiliki tiga komponen: spesifikasi, model, dan mesin verifikasi.

3.1.1 Spesifikasi

Spesifikasi adalah deskripsi yang jelas, tidak ambigu, dan lengkap tentang persyaratan untuk kontrak cerdas. Itu harus menjelaskan apa yang seharusnya dilakukan kontrak dan apa yang tidak seharusnya dilakukan. Berikut adalah contoh spesifikasi untuk smart contract sederhana yang menambahkan dua angka:

// Specification: Adds two numbers
// Inputs: a, b (uint)
// Outputs: the sum of a and b (uint) function add(uint a, uint b) public view returns (uint) {
// Implementation details are not relevant to the specification
// …
}

Model 3.1.2

Sebuah model secara formal mewakili smart contract yang dapat digunakan untuk alasan tentang perilakunya. Salah satu model populer untuk smart contract adalah bahasa pemrograman Solidity. Berikut adalah contoh model untuk fungsi add yang dijelaskan di atas:

// Model: Adds two numbers
// Inputs: a, b (uint)
// Outputs: the sum of a and b (uint) function add(uint a, uint b) public view returns (uint) {
return a + b;
}

3.1.3 Mesin Verifikasi

Mesin verifikasi adalah alat yang dapat menganalisis model dan memverifikasi kebenarannya mengenai spesifikasi yang diberikan. Ada beberapa mesin verifikasi yang tersedia untuk kontrak pintar, termasuk:

mitos: alat eksekusi simbolis sumber terbuka yang dapat mendeteksi berbagai kerentanan keamanan dalam kontrak pintar Solidity.

IDE remix: lingkungan pengembangan terintegrasi yang menyertakan alat verifikasi formal yang dapat memverifikasi kebenaran kontrak pintar.

Pembukti Certora: alat komersial yang dapat memverifikasi kebenaran kontrak cerdas menggunakan penalaran matematis otomatis. Berikut adalah contoh bagaimana verifikasi formal dapat digunakan untuk memverifikasi kebenaran kontrak cerdas menggunakan Certora Prover:

pragma solidity 0.7.6; // Model: Adds two numbers
// Inputs: a, b (uint)
// Outputs: the sum of a and b (uint)
function add(uint a, uint b) public pure returns (uint) {
return a + b;
} // Model: Adds two numbers
// Inputs: a, b (uint)
// Outputs: the sum of a and b (uint) function add(uint a, uint b) public pure returns (uint) {
return a + b;
} // Specification: Adds two numbers
// Inputs: a, b (uint)
// Outputs: the sum of a and b (uint) function test_add(uint a, uint b) public pure returns (bool) {
uint expected = a + b;
uint actual = add(a, b);
return expected == actual;
} // Verification: Verify the correctness of the add function contract TestAdd {
function test_add(uint a, uint b) public view returns (bool) {
return CertoraProver.verify(test_add, a, b);
}
}

Dalam contoh di atas, kami mendefinisikan kontrak pintar Solidity yang mencakup model fungsi tambah, spesifikasi fungsi, dan mesin verifikasi (Certora Prover) yang dapat memverifikasi kebenaran fungsi. Kami juga mendefinisikan fungsi pengujian (test_add) yang dapat digunakan untuk memverifikasi kebenaran fungsi.

3.2 Pengujian VS Verifikasi Formal

Seperti yang telah kita diskusikan, pengujian mengembalikan hasil yang diharapkan untuk beberapa bot data masukan yang kurang karena kami tidak dapat mengatakan tentang data yang belum diuji. Secara praktis tidak mungkin untuk memeriksanya pada setiap input yang memungkinkan. Jadi kami tidak yakin tentang "kebenaran fungsional" nya. Di situlah verifikasi formal masuk. Metode verifikasi formal menggunakan teknik matematika yang ketat untuk menentukan dan memverifikasi perangkat lunak atau kontrak pintar.

3.3 Teknik verifikasi formal

Verifikasi formal memiliki cakupan teknik yang luas untuk peningkatan keamanan kontrak pintar. Di bagian blog ini, kita akan menjelajahi beberapa secara individual.

3.3.1 Pengecekan Model

Saat kami membahas apa itu spesifikasi formal, kami memeriksa kontrak cerdas terhadap spesifikasinya dalam teknik verifikasi formal ini. Kontrak pintar ini direpresentasikan sebagai sistem transisi keadaan, dan properti ditentukan menggunakan logika temporal. 

Teknik ini terutama digunakan untuk mengevaluasi properti temporal yang menggambarkan perilaku smart contract dari waktu ke waktu. Properti kontrol akses (panggilan admin Penghancuran diri) dapat ditulis sebagai logika formal. Kemudian algoritme pengecekan model dapat memverifikasi apakah kontrak memenuhi verifikasi formal ini.

Pengecekan model menggunakan teknik yang disebut Eksplorasi Ruang Negara, yang pada dasarnya mencoba semua kemungkinan keadaan kontrak pintar kita dan kemudian memeriksa apakah ada yang mengakibatkan pelanggaran properti. Namun, ini dapat menyebabkan banyak negara; karenanya pemeriksa model mengandalkan teknik abstraksi untuk memungkinkan analisis kontrak pintar yang efisien.

3.3.2 Pembuktian Teorema

Pembuktian teorema adalah tentang penalaran matematis tentang kebenaran program. Ini berkaitan dengan menciptakan kesan logis dari sistem dan spesifikasi kontrak dan memverifikasi "kesetaraan logis" antara pernyataan. Kesetaraan logis adalah hubungan matematis yang mengatakan bahwa pernyataan A benar jika dan hanya jika pernyataan B benar.

Seperti yang kita pelajari dalam teknik pemeriksaan model, kita memodelkan kontrak sebagai sistem transisi dengan keadaan terbatas. Pembuktian teorema dapat menangani analisis sistem keadaan tak terbatas. Namun, pembukti teorema otomatis tidak selalu dapat mengetahui apakah masalah logis dapat diputuskan; dengan demikian, bantuan manusia sering diperlukan untuk memandu pembukti teorema dalam menurunkan bukti kebenaran.

4. Kesimpulan

Pengujian dan verifikasi formal keduanya merupakan bagian integral dari pengembangan kontrak pintar. Ini adalah metode yang digunakan untuk membuat kontrak pintar aman dan membantu menyiapkan kontrak untuk penerapan. Tapi seperti yang Anda tahu, keamanan tidak pernah cukup. Banyak smart contract diretas hanya karena tidak ada pengujian yang tepat. Sekarang, lebih dari sebelumnya, komunitas web3 membutuhkan protokol yang lebih aman. 

Kami di QuillAudits memiliki misi untuk membantu melindungi protokol Anda. Dengan tim kami yang terampil dan berpengalaman, kami memastikan tidak ada satu pun kerentanan yang luput dari perhatian. Kunjungi situs web kami dan dapatkan proyek Web3 Anda diamankan!

28 views

Stempel Waktu:

Lebih dari Quillhash