
Securify 2.0 est un scanner de sécurité pour les contrats intelligents Ethereum soutenus par la Fondation Ethereum et la sécurité. La recherche principale derrière Securify a été menée au laboratoire de systèmes sécurisé, fiable et intelligent à ETH Zurich.
Il s'agit du successeur du scanner de sécurité Securify populaire (vous pouvez trouver l'ancienne version ici).
Pour construire le conteneur:
sudo docker build -t securify .
Pour exécuter le conteneur:
sudo docker run -it -v <contract-dir-full-path>:/share securify /share/<contract>.sol
Remarque: Pour exécuter le code via Docker avec une version Solidity différente de 0.5.12 , vous devrez modifier la variable ARG SOLC=0.5.12 en haut de Dockerfile pour pointer vers votre version. Après avoir construit avec la bonne version, vous ne devez pas rencontrer d'erreurs.
Les instructions suivantes supposent qu'un python est déjà installé. En plus de cela, Securify nécessite que solc , souffle et graphviz soient installés sur le système:
sudo add-apt-repository ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install solc
Suivez les instructions ici: https://souffle-lang.github.io/download.html
Veuillez ne pas opter pour la version instable car elle pourrait se casser à tout moment.
sudo apt install graphviz
Une fois les conditions préalables à l'installation, nous pouvons configurer l'environnement virtuel Python à partir de laquelle nous exécuterons les scripts de ce projet.
Dans le dossier racine du projet, exécutez les commandes suivantes pour configurer et activer l'environnement virtuel:
virtualenv --python=/usr/bin/python3.7 venv
source venv/bin/activate
Vérifiez que la version python est en fait 3.7 :
python --version
Définissez LD_LIBRARY_PATH :
cd <securify_root>/securify/staticanalysis/libfunctors
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`
Enfin, installez les dépendances du projet en exécutant les commandes suivantes à partir du dossier <securify_root> :
pip install --upgrade pip
pip install -r requirements.txt
pip install -e .
Vous êtes maintenant prêt à commencer à utiliser le framework Securify.
N'oubliez pas: avant d'exécuter les scripts du cadre, vous devrez activer l'environnement virtuel avec la commande suivante:
source venv/bin/activate
Actuellement, Securify2 ne prend en charge uniquement les contrats plats, c'est-à-dire des contrats qui ne contiennent pas de relevés d'importation.
Pour analyser un contrat local, exécutez simplement:
securify <contract_source>.sol [--use-patterns Pattern1 Pattern2 ...]
Ou téléchargez-le depuis la blockchain à l'aide de l'API Etherscan.io:
securify <contract_address> --from-blockchain [--key <key-file>]
Notez que vous avez besoin d'une touche API de Etherscan.io pour utiliser cette fonctionnalité.
Pour analyser un contrat contre les niveaux de gravité spécifiques,
securify <contract_source>.sol [--include-severity Severity1 Severity2]
securify <contract_source>.sol [--exclude-severity Severity1 Severity2]
Pour faire fonctionner tous les modèles disponibles:
securify --list
| IDENTIFIANT | Nom de modèle | Gravité | ID Slither | ID SWC | Commentaires |
|---|---|---|---|---|---|
| 1 | Todamount | Critique | - | SWC-114 | |
| 2 | Drecceiver | Critique | - | SWC-114 | |
| 3 | Todtransfert | Critique | - | SWC-114 | |
| 4 | Écriture sans restriction | Critique | - | SWC-124 | |
| 5 | ToleftOverride | Haut | rtlo | SWC-130 | |
| 6 | StadedStatevariable | Haut | shadowing-state , shadowing-abstract | SWC-119 | |
| 7 | Auto-destructeur sans restriction | Haut | suicidal | SWC-106 | |
| 8 | Statevariable non initialisé | Haut | uninitialized-state | SWC-109 | |
| 9 | Storage non initialisé | Haut | uninitialized-storage | SWC-109 | |
| 10 | Sans restriction | Haut | controlled-delegatecall | SWC-112 | |
| 11 | Dao | Haut | reentrancy-eth | SWC-107 | |
| 12 | ERC20Interface | Moyen | erc20-interface | - | |
| 13 | ERC721Interface | Moyen | erc721-interface | - | |
| 14 | Incorrecte | Moyen | incorrect-equality | SWC-132 | |
| 15 | Verrou | Moyen | locked-ether | - | |
| 16 | Réentrancynoeth | Moyen | reentrancy-no-eth | SWC-107 | |
| 17 | Txorigine | Moyen | tx-origin | SWC-115 | |
| 18 | HumandledException | Moyen | unchecked-lowlevel | - | |
| 19 | Sans restriction | Moyen | unchecked-send | SWC-105 | |
| 20 | Non initialisé | Moyen | uninitialized-local | SWC-109 | |
| 21 | Inutilisé | Moyen | unused-return | SWC-104 | |
| 22 | Ombragé | Faible | shadowing-builtin | - | |
| 23 | ShadowEdLocalvariable | Faible | shadowing-local | - | |
| 24 | CallTodeFaultConstructor? | Faible | void-cst | - | |
| 25 | Callinloop | Faible | calls-loop | SWC-104 | |
| 26 | Réentrance | Faible | reentrancy-benign | SWC-107 | |
| 27 | Horodatage | Faible | timestamp | SWC-116 | |
| 28 | Assemblage | Informations | assembly | - | |
| 29 | ERC20Indexé | Informations | erc20-indexed | - | |
| 30 | LowlevelCalls | Informations | low-level-calls | - | |
| 31 | NamingConvention | Informations | naming-convention | - | |
| 32 | Solcversion | Informations | solc-version | SWC-103 | |
| 33 | Inutilisé | Informations | unused-state | - | |
| 34 | Toomanydicits | Informations | too-many-digits | - | |
| 35 | Constable | Informations | constable-states | - | |
| 36 | Functions externes | Informations | external-function | - | |
| 37 | State VariablesDefaultVisibility | Informations | - | SWC-108 |
Les modèles SLATHIS suivants ne sont pas vérifiés par Securify car ils sont vérifiés par le compilateur Solidity (ver. 0.5.8):
constant-functiondeprecated-standardspragmaLes vulnérabilités SWC suivantes ne s'appliquent pas aux contrats de solidité avec Pragma> = 5.8 et ne sont donc pas vérifiés par Securify: