Cette version de Securify est obsolète et ne sera plus prise en charge. Veuillez utiliser Securify v2.0.

Securify est un scanner de sécurité pour les contrats intelligents Ethereum soutenus par la Fondation Ethereum et Chainsecurity. La recherche principale derrière Securify a été menée au Ice Center de Eth Zurich.

Il dispose d'une liste approfondie de modèles de sécurité couramment trouvés dans les contrats intelligents:
Le projet est censé être une plate-forme ouverte accueillant les contributions de toute la communauté de la sécurité Ethereum. Pour suggérer de nouveaux modèles, pour faire du bénévolat pour les tests ou pour contribuer à développer de nouveaux modèles, veuillez nous contacter grâce à notre groupe Discord.
souffle Binary. Au cours de la rédaction, Soufflé n'est pas disponible sur Windows, il ne faut donc pas non plus s'exécuter sur Windows.solc doit pouvoir utiliser le fichier Solidity comme entrée. Securify suppose que la bonne version est installée pour le fichier donné. solc est disponible ici.Pour construire:
./gradlew jarPour exécuter la sécurisation sur un fichier de solidité:
java -jar build/libs/securify.jar -fs src/test/resources/solidity/transaction-reordering.solPour exécuter la sécurisation sur la sortie de décompilation fournie par le script pysolc.py (qui nécessite Py-Solc):
java -jar build/libs/securify.jar -co out.json Pour exécuter la sécurité sur un binaire EVM (produit par exemple par solc ):
java -jar build/libs/securify.jar -fh src/test/resources/solidity/transaction-reordering.bin.hexPour voir la liste complète des options:
java -jar build/libs/securify.jar -hPour exécuter les tests (qui utilisent JUnit4):
./gradlew test Un emballage Python aide à gérer solc et truffle . Les exigences sont dans le fichier exigence.txt. Le dockerfile peut être utilisé comme référence pour configurer votre environnement local pour utiliser ce wrapper.
L'installation doit être assez simple sur les dérivés Debian, ou toute autre plate-forme prise en charge par Soufflé.
Pour une démonstration rapide qui ne nécessite pas de soufflé, vous pouvez utiliser Docker.
Construisez l'image Docker:
docker build . -t securifyExécutez la sécurisation sur un petit exemple:
docker run securify Vous pouvez modifier les fichiers analysés en spécifiant un volume à monter, et chaque fichier *.sol contenu sera ensuite traité par Securify:
docker run -v $( pwd ) /folder_with_solidity_files:/project securify L'ajout d'un indicateur --truffle devrait permettre à Securify d'exécuter le projet de truffes dans lequel les dépendances ont déjà été installées (alors exécutez npm install avant le besoin). Sans ce drapeau, le projet est compilé à l'aide de solc . Ajoutez un -h pour obtenir la liste complète des options. En particulier, si l'utilisateur souhaite recevoir des informations de compilation de truffe, il doit ajouter l'indicateur -v .
Si l'on veut recevoir la sortie JSON, le Docker prend en charge un drapeau --json qui supprimera la sortie jolie et renverra JSON à la place. Assurez-vous d'ajouter l'indicateur -q si aucune information de progression ne doit être affichée, ce qui entraîne une sortie JSON pure. Les indices des lignes correspondants sont basés sur 0, ce qui signifie qu'une correspondance à la ligne i signifie que la ligne i+1 Th est appariée. En particulier, la première ligne a un indice de 0.
Les tests de base de bout en bout peuvent être exécutés via le fichier test.py:
python3 test . pyLes exigences peuvent être installées à l'aide de PIPENV:
pipenv install ou en utilisant pip :
pip install -r requirements.txtCes tests comparent la sortie JSON actuelle donnée par Securify avec une certaine sortie passée et signalent les différences entre les deux.
Vous pouvez ajouter les .travis.yml suivants à votre projet pour exécuter la sécurisation sur les nouveaux engins:
services:
- docker
before_install:
- docker pull chainsecurity/securify
script:
- docker run -v $(pwd):/project chainsecurity/securify
Cela devrait permettre à Securify d'exécuter le projet de truffes dans lequel les dépendances ont déjà été installées (alors exécutez npm install avant le besoin).
La sortie suit de manière lâche le style Clang. Seuls les avertissements et les vulnérabilités sont signalés. Si l'on souhaite également obtenir les informations de conformité, veuillez utiliser l'indicateur --json dans le drapeau Docker, ou -co sur l'exécutable Java pour obtenir toutes les informations d'analyse au format JSON.
Voir contribution.md.
Rejoignez notre discorde pour discuter avec d'autres utilisateurs.
Bien que Securify soit régulièrement utilisé pour aider les audits à Chainsecurity, il y a encore des bogues, notamment:
computeBranches . Dans la plupart des cas, il suffit d'augmenter la taille de la pile à l'aide de l'option -Xss de java , par exemple java -Xss1G -jar ...solc ) ne sont pas pris en charge Securify analyse statiquement le code EVM du contrat intelligent pour déduire des informations sémantiques importantes (y compris les faits de contrôle et de flux de données) sur le contrat. Cette étape est entièrement automatisée à l'aide de Soufflé, un solveur deograves évolutif. Ensuite, Securify vérifie les faits inférés pour découvrir les violations de la sécurité ou prouver la conformité des instructions pertinentes à la sécurité.
Les détails techniques complets derrière le scanner Securify sont disponibles dans le document de recherche.