Ini adalah versi Securify sudah usang dan tidak akan lagi didukung. Harap gunakan Securify v2.0.

Securify adalah pemindai keamanan untuk kontrak pintar Ethereum yang didukung oleh Ethereum Foundation dan Chainsecurity. Penelitian inti di belakang Securify dilakukan di ICE Center di ETH Zurich.

Ini fitur daftar pola keamanan yang luas yang biasa ditemukan dalam kontrak pintar:
Proyek ini dimaksudkan untuk menjadi platform terbuka menyambut kontribusi dari semua komunitas keamanan Ethereum. Untuk menyarankan pola baru, untuk menjadi sukarelawan untuk pengujian atau berkontribusi pengembangan pola baru, silakan menghubungi grup perselisihan kami.
souffle . Pada saat penulisan, Souffle tidak tersedia di Windows, jadi Securify juga tidak diharapkan berjalan di Windows.solc diperlukan untuk dapat menggunakan file soliditas sebagai input. Securify mengasumsikan bahwa versi yang tepat diinstal untuk file yang diberikan. solc tersedia di sini.Untuk membangun:
./gradlew jarUntuk menjalankan Securify pada file soliditas:
java -jar build/libs/securify.jar -fs src/test/resources/solidity/transaction-reordering.solUntuk menjalankan Securify pada output dekompilasi yang disediakan oleh skrip pysolc.py (yang membutuhkan py-solc):
java -jar build/libs/securify.jar -co out.json Untuk menjalankan Securify pada beberapa biner EVM (diproduksi misalnya oleh solc ):
java -jar build/libs/securify.jar -fh src/test/resources/solidity/transaction-reordering.bin.hexUntuk melihat daftar lengkap opsi:
java -jar build/libs/securify.jar -hUntuk menjalankan tes (yang menggunakan JUnit4):
./gradlew test Pembungkus Python membantu menangani solc dan truffle . Persyaratan ada di file persyaratan.txt. DockerFile dapat digunakan sebagai referensi untuk mengatur lingkungan lokal Anda untuk menggunakan pembungkus ini.
Instalasi harus cukup sederhana pada turunan Debian, atau platform lain yang didukung oleh Souffle.
Untuk demonstrasi cepat yang tidak memerlukan souffle, Anda dapat menggunakan Docker.
Bangun gambar Docker:
docker build . -t securifyJalankan aman pada contoh kecil:
docker run securify Anda dapat mengubah file yang dianalisis dengan menentukan volume untuk dipasang, dan setiap file *.sol yang terkandung kemudian akan diproses dengan aman:
docker run -v $( pwd ) /folder_with_solidity_files:/project securify Menambahkan bendera --truffle harus memungkinkan Securify untuk menjalankan proyek truffle di mana dependensi telah diinstal (jadi jalankan npm install sebelum jika perlu). Tanpa bendera ini, proyek ini dikompilasi menggunakan solc . Tambahkan -h untuk mendapatkan daftar lengkap opsi. Secara khusus, jika pengguna ingin menerima informasi kompilasi dari Truffle, ia harus menambahkan bendera -v .
Jika seseorang ingin menerima output JSON, Docker mendukung bendera --json yang akan menekan output cantik dan mengembalikan JSON sebagai gantinya. Pastikan untuk menambahkan bendera -q jika tidak ada informasi kemajuan yang harus ditampilkan, sehingga menghasilkan output JSON murni. Indeks dari garis yang cocok berbasis 0, yang berarti bahwa kecocokan dengan garis i berarti bahwa garis i+1 dicocokkan. Secara khusus, baris pertama memiliki indeks 0.
Tes dasar ujung ke ujung dapat dijalankan melalui file test.py:
python3 test . pyPersyaratan dapat diinstal menggunakan PIPENV:
pipenv install atau menggunakan pip :
pip install -r requirements.txtTes -tes ini membandingkan output JSON saat ini yang diberikan oleh Securify dengan beberapa output di masa lalu, dan melaporkan perbedaan antara keduanya.
Anda dapat menambahkan .travis.yml berikut ke proyek Anda untuk menjalankan Securify pada komit baru:
services:
- docker
before_install:
- docker pull chainsecurity/securify
script:
- docker run -v $(pwd):/project chainsecurity/securify
Ini harus memungkinkan Securify untuk menjalankan proyek truffle di mana dependensi telah diinstal (jadi jalankan npm install sebelum jika perlu).
Output secara longgar mengikuti gaya dentang. Hanya peringatan dan kerentanan yang dilaporkan. Jika seseorang juga ingin mendapatkan informasi kepatuhan, silakan gunakan bendera --json di Docker, atau -co Flag di Java yang dapat dieksekusi untuk mendapatkan semua informasi analisis dalam format JSON.
Lihat Contributing.md.
Bergabunglah dengan perselisihan kami untuk berdiskusi dengan pengguna lain.
Meskipun Securify secara teratur digunakan untuk membantu audit di Chainsecurity, masih ada bug, termasuk:
computeBranches menjadi rekursif. Dalam kebanyakan kasus, itu cukup untuk meningkatkan ukuran tumpukan menggunakan opsi -Xss java , misalnya java -Xss1G -jar ...solc ) tidak didukung Mengurangi secara statis menganalisis kode EVM dari kontrak pintar untuk menyimpulkan informasi semantik yang penting (termasuk fakta kontrol dan aliran data) tentang kontrak. Langkah ini sepenuhnya otomatis menggunakan Souffle, pemecah datalog yang dapat diskalakan. Kemudian, aman memeriksa fakta yang disimpulkan untuk menemukan pelanggaran keamanan atau membuktikan kepatuhan instruksi yang relevan dengan keamanan.
Rincian teknis lengkap di balik pemindai Securify tersedia dalam makalah penelitian.