
Securify 2.0 adalah pemindai keamanan untuk kontrak pintar Ethereum yang didukung oleh Ethereum Foundation dan Chainsecurity. Penelitian inti di belakang Securify dilakukan di laboratorium sistem yang aman, andal, dan cerdas di ETH Zurich.
Ini adalah penerus pemindai keamanan Securify yang populer (Anda dapat menemukan versi lama di sini).
Untuk membangun wadah:
sudo docker build -t securify .
Untuk menjalankan wadah:
sudo docker run -it -v <contract-dir-full-path>:/share securify /share/<contract>.sol
Catatan: Untuk menjalankan kode melalui Docker dengan versi soliditas yang berbeda dari 0.5.12 , Anda perlu memodifikasi variabel ARG SOLC=0.5.12 di bagian atas Dockerfile untuk menunjuk ke versi Anda. Setelah membangun dengan versi yang benar, Anda tidak boleh mengalami kesalahan.
Instruksi berikut mengasumsikan bahwa python sudah terpasang. Selain itu, Securify membutuhkan solc , souffle dan graphviz untuk diinstal pada sistem:
sudo add-apt-repository ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install solc
Ikuti instruksi di sini: https://souffle-lang.github.io/download.html
Tolong jangan memilih versi yang tidak stabil karena mungkin rusak pada titik mana pun.
sudo apt install graphviz
Setelah prasyarat telah diinstal, kami dapat mengatur lingkungan virtual Python dari mana kami akan menjalankan skrip dalam proyek ini.
Di folder root proyek, jalankan perintah berikut untuk mengatur dan mengaktifkan lingkungan virtual:
virtualenv --python=/usr/bin/python3.7 venv
source venv/bin/activate
Verifikasi bahwa versi python sebenarnya 3.7 :
python --version
Atur LD_LIBRARY_PATH :
cd <securify_root>/securify/staticanalysis/libfunctors
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`
Akhirnya, instal dependensi proyek dengan menjalankan perintah berikut dari folder <securify_root> :
pip install --upgrade pip
pip install -r requirements.txt
pip install -e .
Sekarang Anda siap untuk mulai menggunakan kerangka kerja Securify.
Ingat: Sebelum menjalankan skrip kerangka kerja, Anda harus mengaktifkan lingkungan virtual dengan perintah berikut:
source venv/bin/activate
Saat ini Securify2 hanya mendukung kontrak datar, yaitu, kontrak yang tidak berisi pernyataan impor.
Untuk menganalisis kontrak lokal, cukup jalankan:
securify <contract_source>.sol [--use-patterns Pattern1 Pattern2 ...]
Atau unduh dari blockchain menggunakan eterscan.io API:
securify <contract_address> --from-blockchain [--key <key-file>]
Perhatikan bahwa Anda memerlukan API-key dari Etherscan.io untuk menggunakan fungsi ini.
Untuk menganalisis kontrak terhadap tingkat keparahan tertentu yang dijalankan:
securify <contract_source>.sol [--include-severity Severity1 Severity2]
securify <contract_source>.sol [--exclude-severity Severity1 Severity2]
Untuk menjalankan semua pola yang tersedia:
securify --list
| PENGENAL | Nama pola | Kerasnya | ID Slither | ID SWC | Komentar |
|---|---|---|---|---|---|
| 1 | Todamount | Kritis | - | SWC-114 | |
| 2 | Todreceiver | Kritis | - | SWC-114 | |
| 3 | Todtransfer | Kritis | - | SWC-114 | |
| 4 | Tidak terbatas | Kritis | - | SWC-124 | |
| 5 | RightToleftoverride | Tinggi | rtlo | SWC-130 | |
| 6 | ShadowedStateVariable | Tinggi | shadowing-state , shadowing-abstract | SWC-119 | |
| 7 | Penghancuran diri yang tidak dibatasi | Tinggi | suicidal | SWC-106 | |
| 8 | Tidak diinisialisasi .statevariable | Tinggi | uninitialized-state | SWC-109 | |
| 9 | Storasi yang tidak diinisialisasi | Tinggi | uninitialized-storage | SWC-109 | |
| 10 | Tanpa dibatasi Delegatecall | Tinggi | controlled-delegatecall | SWC-112 | |
| 11 | Dao | Tinggi | reentrancy-eth | SWC-107 | |
| 12 | ERC20Interface | Sedang | erc20-interface | - | |
| 13 | ERC721Interface | Sedang | erc721-interface | - | |
| 14 | Kesetaraan yang salah | Sedang | incorrect-equality | SWC-132 | |
| 15 | Terkunci | Sedang | locked-ether | - | |
| 16 | Reentrancynoeth | Sedang | reentrancy-no-eth | SWC-107 | |
| 17 | Txorigin | Sedang | tx-origin | SWC-115 | |
| 18 | UNDENDEDEXCEPTION | Sedang | unchecked-lowlevel | - | |
| 19 | FLETETHETHETHLOW | Sedang | unchecked-send | SWC-105 | |
| 20 | Tidak sinisialisasilokal | Sedang | uninitialized-local | SWC-109 | |
| 21 | Tidak digunakan kembali | Sedang | unused-return | SWC-104 | |
| 22 | ShadowedBuiltin | Rendah | shadowing-builtin | - | |
| 23 | Shadowedlocalvariable | Rendah | shadowing-local | - | |
| 24 | CallToDefaultConstructor? | Rendah | void-cst | - | |
| 25 | Callinloop | Rendah | calls-loop | SWC-104 | |
| 26 | ReentrancyBenign | Rendah | reentrancy-benign | SWC-107 | |
| 27 | Cap waktu | Rendah | timestamp | SWC-116 | |
| 28 | Penggunaan Perakitan | Info | assembly | - | |
| 29 | ERC20indexed | Info | erc20-indexed | - | |
| 30 | Lowlevelcalls | Info | low-level-calls | - | |
| 31 | NamingConvention | Info | naming-convention | - | |
| 32 | Solcversion | Info | solc-version | SWC-103 | |
| 33 | Tidak terpakai | Info | unused-state | - | |
| 34 | TOOMANYDIGITS | Info | too-many-digits | - | |
| 35 | Konstablestates | Info | constable-states | - | |
| 36 | ExternalFunctions | Info | external-function | - | |
| 37 | StatevariablesDefaultVisibility | Info | - | SWC-108 |
Pola slither berikut tidak diperiksa oleh Securify karena diperiksa oleh kompiler soliditas (ver. 0.5.8):
constant-functiondeprecated-standardspragmaKerentanan SWC berikut tidak berlaku untuk kontrak soliditas dengan pragma> = 5.8 dan karenanya tidak diperiksa dengan aman: