Proyek Web3 harus mempertimbangkan penambahan proses untuk keamanan di semua tahap siklus hidup pengembangan.
Banyak peretasan yang terjadi pada proyek Web3 dapat dicegah dengan memperkuat keamanan kontrak cerdas.
Seringkali, penyerang menemukan dan mengeksploitasi kekurangan di seluruh rantai pengembangan perangkat lunak—mulai dari desain hingga penerapan dan pemeliharaan serta rilis kode baru. Jika ada pengembangan kontrak pintar standar dan proses respons risiko, kami percaya bahwa insiden keamanan akan berkurang.
Tujuan dari posting ini adalah untuk menguraikan faktor keamanan inti yang harus dipertimbangkan oleh pembuat, pengembang, dan tim keamanan Web3 saat merancang, mengembangkan, dan memelihara sistem kontrak cerdas. Kerangka kerja berikut membahas delapan faktor keamanan inti yang harus diterapkan di seluruh siklus hidup pengembangan perangkat lunak—mulai dari pemodelan ancaman hingga kesiapsiagaan tanggap darurat.
Sebelum memahami perlindungan keamanan kontrak pintar, perlu dipahami tahap pengembangan perangkat lunak. Pengembangan perangkat lunak dapat dibagi menjadi lima fase berikut:
Desain : Pengembang menjelaskan fungsionalitas dan pengoperasian sistem yang diperlukan, termasuk tolok ukur penting dan properti tetap.
Pengembangan : Pengembang menulis kode untuk sistem.
Pengujian dan peninjauan : Pengembang menjalankan semua modul dalam lingkungan pengujian untuk menilai keakuratan dan stabilitas kode.
Deployment : Pengembang menempatkan sistem ke dalam lingkungan hidup.
Pemeliharaan : Pengembang mengevaluasi dan memodifikasi sistem untuk memastikan kinerjanya seperti yang diharapkan.
Dengan landasan siklus pengembangan dasar ini, kita sekarang dapat menelusuri pertimbangan yang memengaruhi keamanan kontrak cerdas di setiap langkah. Diagram di bawah memetakan faktor-faktor yang harus dipertimbangkan untuk fase pengembangan yang relevan. Perlu dicatat bahwa beberapa langkah dalam tautan memiliki beberapa pertimbangan keamanan:
Seperti yang ditunjukkan di atas, siklus hidup pengembangan perangkat lunak tidak selalu mengikuti jalur linier. Dalam praktiknya, mungkin ada tumpang tindih atau perluasan ke fase lain. Beberapa langkah mungkin perlu diulang untuk setiap rilis. Beberapa tugas—seperti pengujian dan tinjauan keamanan—mungkin perlu dilakukan dari awal hingga akhir.
Siklus hidup perangkat lunak dan pertimbangan keamanan terkait yang dijelaskan di atas memberikan informasi dasar yang berguna untuk mempromosikan keamanan kontrak pintar, tetapi kami akan memeriksanya secara lebih rinci di bawah ini untuk memungkinkan pemahaman, penerapan, dan berbagi praktik ini Sederhana, dan secara konkret menganalisis kuncinya pertanyaan: Apa, Mengapa dan Bagaimana.
Pertimbangan Keamanan Kontrak Cerdas dalam Fase Desain Pertimbangkan Pemodelan Ancaman dan Desain Keamanan
Apa: Penting untuk mengimplementasikan rencana konkret untuk mengidentifikasi dan memprioritaskan potensi ancaman terhadap sistem sejak awal siklus hidup pengembangan - pengembang kontrak cerdas harus mengidentifikasi semua kontrol keamanan menjadi Semua pengujian ancaman, audit, dan pemantauan inspeksi. Semua asumsi keamanan, termasuk kecanggihan yang diharapkan dan sarana serangan, harus didefinisikan dan diartikulasikan dengan jelas selama fase desain.
Mengapa: Meskipun pengembang cenderung berfokus hanya pada tujuan penggunaan kontrak atau protokol cerdas, fokus tunggal ini dapat membuat mereka tidak memiliki titik buta yang dapat dimanfaatkan oleh penyerang.
Bagaimana caranya: Ikuti praktik pemodelan ancaman yang diketahui. Jika tim pengembangan tidak memiliki keahlian keamanan internal, tim tersebut harus bekerja dengan konsultan keamanan di awal fase desain. Mengadopsi mentalitas "penyerang" saat merancang sistem dan berasumsi bahwa setiap individu, perangkat keras, atau layanan dapat diserang.
Pertimbangan keamanan selama fase pengembangan Pertimbangkan manajemen dan kontrol akses
Apa: Terapkan kontrol akses, batasi izin akun istimewa dan kontrak pintar memanggil fungsi khusus yang melakukan tugas administratif (seperti memperbarui kontrak dan mengatur parameter khusus). Ikuti "prinsip hak istimewa paling rendah": setiap peserta hanya boleh memiliki hak akses minimum yang diperlukan.
Mengapa: Mempertahankan protokol melalui proses pemutakhiran dan tata kelola memungkinkan pengembang meningkatkan protokol dengan menambahkan fitur baru, menambal masalah keamanan, dan mengoptimalkan untuk perubahan kondisi. Ini bisa menjadi pelanggaran keamanan yang serius jika kemampuan untuk memutakhirkan tidak dikontrol dengan benar.
Caranya: Buat dompet multi-tanda tangan atau kontrak DAO yang akan membuat perubahan pada protokol menjadi transparan dan harus melalui proses peninjauan menyeluruh serta timelock (sengaja menunda pemberlakuan dengan pembatalan) untuk memastikan mereka dapat diverifikasi dengan benar dan terjadi Kembalikan tata kelola menyerang. Pastikan kunci istimewa disimpan dengan aman dan dapat diakses di dompet yang dihosting sendiri atau layanan eskro yang aman.
Pertimbangkan untuk mengintegrasikan template yang dapat digunakan kembali, dicoba, dan benar
Apa: Manfaatkan standar kontrak pintar yang ada sebanyak mungkin (seperti Kontrak OpenZeppelin) dan nilai kemungkinan masalah keamanan dalam integrasi yang mungkin Anda perlukan dengan protokol yang ada.
Mengapa: Menggunakan standar yang sudah teruji pertempuran dan diperiksa oleh komunitas dapat sangat membantu dalam mengurangi risiko keamanan. Menilai risiko integrasi protokol membantu Anda melakukan pemeriksaan keamanan untuk mencegah serangan terhadap komponen eksternal, seperti manipulasi oracle.
Caranya: Impor pustaka kontrak tepercaya dan antarmuka yang telah menjalani audit keamanan.Lagipula, fokus Crypto dan Web3 adalah sumber terbuka, penggunaan kembali, dan kemampuan menyusun. Pastikan untuk mendokumentasikan dependensi kontrak Anda dan versinya di basis kode Anda, dan minimalkan jejak sumber daya kode Anda; misalnya, impor submodul tertentu dari proyek besar alih-alih semuanya; ketahui keterpaparan Anda sehingga Anda dapat memantau serangan; gunakan antarmuka resmi untuk memanggil eksternal protokol, dan pastikan untuk mempertimbangkan potensi risiko integrasi; pantau pembaruan dan pengungkapan informasi keamanan dari kontrak Anda yang digunakan kembali.
Pertimbangan keamanan untuk fase pengujian dan peninjauan Pertimbangkan pengujian dan dokumentasi proyek
Apa: Buat dokumentasi kode yang jelas dan komprehensif dan siapkan rangkaian pengujian yang cepat, komprehensif, dan mudah dijalankan. Jika memungkinkan, lakukan eksperimen yang lebih mendalam di testnet atau di lingkungan pengujian yang diatur dengan simulasi mainnet.
Mengapa: Menulis asumsi untuk perilaku yang diharapkan tidak hanya membantu memastikan risiko dalam model ancaman ditangani, tetapi juga membantu pengguna dan auditor eksternal memahami maksud dari tim pengembangan. Membuat rangkaian pengujian untuk kode dapat membantu membuktikan atau menyangkal asumsi dan mendorong pemikiran yang lebih mendalam tentang model ancaman. Paket pengujian ini harus mencakup pengujian desain mekanis yang memeriksa ekonomi token proyek di bawah skenario pasar yang ekstrem, serta pengujian unit dan integrasi.
Caranya: Uji dengan kerangka pengujian yang dikenal dan aplikasi pemeriksaan keamanan - seperti Hardhat, Mythril, Slither, Truffle, dll.; berikan teknik pengujian yang berbeda, seperti fuzzing, pemeriksaan properti, dan bahkan verifikasi formal (verifikasi formal); dokumentasikan secara menyeluruh kode, menggunakan anotasi NatSpec untuk menentukan efek samping yang diharapkan, parameter, dan nilai kembalian. Hasilkan dokumentasi langsung menggunakan alat pembuatan dokumentasi dan catatan desain tingkat tinggi.
Pertimbangkan tinjauan internal dan audit keamanan
Apa: Luangkan waktu untuk menemukan bug melalui audit kode internal dan eksternal.
Mengapa: Beralih dari pengembangan fitur ke masalah keamanan memberi developer waktu untuk menemukan potensi masalah keamanan. Audit eksternal dapat sangat berguna dalam hal ini, karena dapat membawa perspektif dan keahlian luar yang tidak dimiliki oleh tim pengembangan.
Bagaimana caranya: Pada titik yang tepat dalam pengembangan proyek, jadwalkan pembekuan fitur untuk memberikan waktu untuk peninjauan internal yang diikuti dengan audit eksternal. Tindakan ini harus diambil sebelum penerapan dan pemutakhiran langsung, lihat panduan dari ConsenSys, Nascent, OpenZeppelin, dan Trail of Bits yang memberi pengembang daftar hal-hal yang perlu dipertimbangkan -- termasuk waktu -- bagi siapa pun yang bersiap untuk mengaudit . Pastikan juga untuk meninjau transaksi penyebaran untuk memastikan mereka menggunakan versi kode yang diaudit dan memiliki parameter yang sesuai, terutama saat memutakhirkan perangkat lunak.
Pertimbangan keamanan selama fase penerapan dan pemeliharaan Pertimbangkan untuk memotivasi partisipasi komunitas topi putih
Apa: Membuat program yang mendorong partisipasi komunitas dalam peningkatan keamanan basis kode sumber terbuka. Salah satu pendekatannya adalah menetapkan hadiah bug. Pendekatan lain adalah mendorong komunitas untuk mengembangkan protokol untuk memantau dan mendeteksi bot.
Mengapa: Tim pengembangan bisa mendapatkan keuntungan dari pengetahuan dan pengalaman yang lebih luas (sekali lagi, open source juga membantu Crypto). Khususnya, program semacam itu dapat membantu memicu antusiasme pengembang untuk sebuah proyek, yang pada dasarnya mengubah komunitas dan peretas topi putih menjadi penginjil. Mereka juga dapat membantu mengubah calon penyerang menjadi pembela dengan memberi peretas cara untuk menjadi pembela.
Caranya: Gunakan platform bounty bug (seperti Code4rena, HackenProof, Immunefi, atau Secureum) untuk memberikan reward berbasis tingkat keparahan ke sistem bounty untuk memberi insentif kepada peretas terampil untuk mengungkapkan kerentanan. (Pengungkapan: Beberapa rekan penulis makalah ini bekerja untuk Forta, sebuah jaringan yang menyediakan struktur insentif token untuk membuat bot pemantauan keamanan berkualitas tinggi yang terdesentralisasi.) Tim pengembangan dapat mendorong komunitas protokol mereka untuk memanfaatkan pendekatan tradisional dan asli Web3 Untuk memberi insentif pada pencarian bug dan memungkinkan peserta memperoleh hadiah potensial untuk keamanan yang ditingkatkan, menciptakan win-win untuk semua.
Pertimbangkan pemantauan waktu nyata
Apa: Terapkan sistem yang memantau kontrak pintar dan komponen operasional utama seperti oracle dan jembatan lintas rantai, dan laporkan aktivitas mencurigakan kepada tim pengembangan dan komunitas berdasarkan model ancaman yang diketahui.
Mengapa: Deteksi dini masalah memungkinkan tim merespons kerentanan dan bug dengan cepat, berpotensi mencegah atau mengurangi kerusakan. Ini sepertinya ide yang mudah untuk dipikirkan, tetapi mungkin diabaikan dalam perencanaan.
Caranya: Gunakan platform pemantauan atau node terdistribusi untuk menjalankan robot yang memantau peristiwa kontrak pintar secara waktu nyata. Bangun dasbor dan pemberitahuan peringatan untuk tim pengembangan dan komunitas yang lebih luas sesuai kebutuhan.
Pertimbangkan Proses Tanggapan Insiden
Apa: Memanfaatkan alat dan proses yang dapat segera menanggapi setiap masalah keamanan yang muncul.
Mengapa: Bahkan dengan perlindungan pra-penerapan terbaik, masih ada masalah sementara dengan kontrak cerdas dan komponen utama seperti oracle dan jembatan lintas rantai. Memiliki orang-orang yang berdedikasi, proses yang jelas, dan otomatisasi memastikan bahwa insiden dapat diselidiki dengan cepat dan diselesaikan secepat mungkin.
Bagaimana: Bersiaplah untuk yang terburuk dengan merencanakan cara merespons insiden atau keadaan darurat dan mengotomatiskan respons tersebut semaksimal mungkin. Ini termasuk menugaskan tanggung jawab investigasi dan tanggapan kepada individu yang kompeten yang dapat secara publik menghubungi mereka yang terkait dengan masalah keamanan melalui milis keamanan yang didistribusikan, instruksi dalam repositori kode, atau pendaftar kontrak cerdas. Berdasarkan model ancaman perjanjian, kembangkan proses yang dapat mencakup latihan skenario dan waktu respons yang diharapkan untuk tindakan mendesak. Pertimbangkan untuk mengintegrasikan otomatisasi ke dalam respons insiden: Misalnya, alat dapat menerima peristiwa dari robot Forta dan menindaklanjutinya.
Pertimbangan keamanan harus menjadi bagian integral dari keberhasilan pembangunan, bukan hanya renungan.
Meskipun kerangka kerja di atas memberikan beberapa panduan cepat untuk tim yang membangun protokol dan aplikasi Web3 untuk meningkatkan keamanan selama proses pengembangan, tinjauan singkat tidak cukup untuk memberikan diskusi lengkap tentang semua aspek keamanan kontrak cerdas. Tim yang tidak memiliki keahlian keamanan internal harus menghubungi pakar keamanan Web3 berkualifikasi yang dapat membantu tim menerapkan panduan umum di atas untuk situasi khusus mereka. Namun yang paling penting, ingatlah bahwa keamanan lebih dari sekadar mencentang daftar periksa untuk mengelola masalah yang rumit, ini selalu merupakan rangkaian praktik berkelanjutan yang tidak pernah berakhir. Kami masih dalam tahap awal membangun praktik ini, jadi sekaranglah waktunya untuk membuat dan berbagi praktik keamanan secara kolaboratif untuk semua developer.