Hidupkan^cc
revive^CC adalah alat analisis statis untuk Hyperledger Fabric Smart Contracts (ChainCode) yang bertujuan mendeteksi kerentanan keamanan terkait blockchain untuk membantu pengembang menulis kontrak pintar yang bersih dan aman. revive^CC adalah salah satu dari dua alat analisis statis yang ada untuk Hyperledger Fabric Chaincode, dengan alat lain adalah Chainsecurity's Chaincode Scanner yang dapat menganalisis file kode rantai yang memenuhi persyaratan tertentu. Apa yang membuat revive^CC khusus adalah bahwa alat ini telah membawa aksesibilitas analisis keamanan ke file kode rantai apa pun . Ini adalah sesuatu yang belum tersedia sampai sekarang.
Alat ini merupakan perpanjangan dari alat analisis statis Source Open Source Revive dan dibangun menggunakan kerangka kerja Revive. Oleh karena itu berisi semua manfaat dan pemeriksaan Revive untuk membantu pengembang menulis kode GO bersih. revive^CC dibangun sebagai bagian dari proyek disertasi saya tentang 'menganalisis kontrak pintar' di University of Sheffield.
Instalasi
1. Place folder in the your $GOPATH/src/github.com/youraccount
2. Go into directory sivachokkapu/revive-cc
3. $ make install
4. $ make build
5. Move the revive file into $GOPATH/bin
6. You should now be able to use revive commands
Penggunaan
$ revive {chaincodefilename.go} - will analyse the file
$ revive -formatter stylish {chaincodefilename.go} - better output format
$ revive - on a directory will analyse all files if from the same package

Menggunakan $ Revive pada direktori
Pertunjukan

Untuk mengevaluasi kinerja Revive^cc, berbagai file kode rantai kasus nyata ditemukan yang masing -masing mengandung kerentanan. Sebanyak 20 file kode rantai publik diperoleh untuk evaluasi dari repositori GitHub. Semua file ini diverifikasi dan kerentanan berikut dilaporkan. Kinerja itu kemudian dibandingkan dengan pemindai kode chainsecurity yang hanya dapat memverifikasi 13 dari 20 file. Secara keseluruhan, Revive^cc mampu mendeteksi lebih banyak kerentanan (harap dicatat sebagai Revive^cc dapat mendeteksi lebih banyak positif yang benar, itu juga mendeteksi sedikit lebih palsu).
Kerentanan yang terdeteksi
Impor kode rantai daftar hitam

Contoh Kerentanan Impor Kode Rantai Blacklisted di Chaincode
Mengimpor perpustakaan tertentu dapat mengakibatkan kurangnya konsensus antar teman sebaya. Ini karena perpustakaan tertentu akan memungkinkan komunikasi dengan dunia luar, memberikan akses file dan bahkan dapat memperkenalkan perilaku non-deterministik ke dalam kode rantai. Ini semua dapat menyebabkan perhitungan yang tidak konsisten antara rekan -rekan yang mengarah pada kurangnya konsensus. Satu perpustakaan daftar hitam adalah perpustakaan 'waktu'. Perpustakaan ini memungkinkan rekan untuk mendapatkan cap waktu saat ini pada waktu tertentu, namun, tidak mungkin bahwa setiap rekan akan membuat cap waktu yang sama selama transaksi yang mengarah ke perbedaan antara rekan. Hal ini dapat mengakibatkan perilaku non-deterministik antara teman sebaya, yang mengarah pada perhitungan yang tidak konsisten.
Variabel Negara Global

Contoh Kerentanan Variabel Negara Global di ChainCode
Variabel global hanya global untuk satu peer karena variabel global tidak dilacak pada buku besar. Peer tidak pernah selalu mengeksekusi setiap transaksi dan karena ruang lingkup variabel global terbatas pada rekan tunggal, negara -negara mereka dapat menyimpang. Tidak ada data yang sedang dibaca atau ditulis harus bergantung pada variabel keadaan global ini karena ini dapat menyebabkan perhitungan dengan set baca dan tulis yang berbeda. Perhitungan yang tidak konsisten ini akan menghasilkan kurangnya konsensus antara rekan dan oleh karena itu semua transaksi akan ditandai sebagai tidak valid.
Goroutine

Contoh kerentanan goroutine dalam rantai kode
Goroutine memperkenalkan konkurensi ke dalam rantai. Yang kemudian dapat menghasilkan perilaku non-deterministik. Hal ini dapat menyebabkan perhitungan yang tidak konsisten antara rekan -rekan karena teman sebaya yang tidak menghitung set baca dan tulis yang sama. Ini akan menghasilkan kurangnya konsensus antara rekan -rekan di jaringan yang mengarah ke semua transaksi yang ditandai sebagai tidak valid. Oleh karena itu sangat berkecil hati untuk menggunakan goroutine.
Phantom membaca buku besar

Contoh hantu membaca kerentanan buku besar di rantai
Mendapatkan data dari buku besar menggunakan gethistoryofkey atau getQueryResult Jangan lulus kontrol versi sistem. Ini berarti bahwa data yang diambil menggunakan metode ini tidak boleh digunakan untuk menulis data baru atau memperbarui data pada buku besar. Hal ini dapat menyebabkan perilaku yang tidak terduga yang dapat mempengaruhi pelaksanaan transaksi dan menyebabkan hasil yang tidak diinginkan.
Rentang di atas peta

Contoh Kisaran atas Kerentanan Peta di ChainCode
Kata kunci rentang memungkinkan kemampuan untuk mengulangi setiap elemen dalam berbagai struktur data di GO. Namun, ketika rentang diterapkan pada peta, urutan iterasi akan diacak di GO. Ini berarti bahwa menggunakan rentang untuk mengulangi melalui elemen peta tidak deterministik karena urutan iterasi dapat berubah antara setiap eksekusi. Oleh karena itu perhitungan antara teman sebaya tidak akan konsisten dan tidak mungkin bagi rekan jaringan untuk mencapai konsensus.
Baca setelah tulis

Contoh Kerentanan Baca demi Write di ChainCode
Agar pernyataan menulis ke buku besar mulai berlaku, transaksi pertama harus dilakukan dan ditulis ke buku besar. Sampai saat itu nilai yang telah ditulis untuk akan mempertahankan nilai lamanya. Yang berarti bahwa membaca nilai ini dari buku besar hanya akan mengembalikan nilai lama yang kemungkinan bukan apa yang dimaksudkan oleh kode rantai. Ini akan menyebabkan perilaku tak terduga yang dapat mempengaruhi pelaksanaan transaksi dan menyebabkan hasil yang tidak diinginkan.
Lisensi
Mit