
slither v0.11.6
Analyseur statique pour Solidity et Vyper
Slither, l'analyseur statique de contrats intelligents
Rejoignez le Slack Empire Hacking
- Discussions et Support
Slither est un framework d'analyse statique pour Solidity et Vyper écrit en Python3. Il exécute une suite de détecteurs de vulnérabilités, affiche des informations visuelles sur les détails des contrats, et fournit une API pour écrire facilement des analyses personnalisées. Slither permet aux développeurs de trouver des vulnérabilités, d'améliorer leur compréhension du code, et de prototyper rapidement des analyses personnalisées.
- Fonctionnalités
- Utilisation
- Installation
- Détecteurs
- Affichages
- Outils
- Documentation de l'API
- Obtenir de l'aide
- FAQ
- Licence
- Publications
Fonctionnalités
- Détecte le code Solidity vulnérable avec un faible taux de faux positifs (voir la liste des trophées)
- Identifie où l'erreur se produit dans le code source
- S'intègre facilement dans l'intégration continue et les builds Hardhat/Foundry
- Les 'printers' intégrés rapportent rapidement les informations cruciales du contrat
- API de détecteur pour écrire des analyses personnalisées en Python
- Capacité à analyser des contrats écrits avec Solidity >= 0.4
- La représentation intermédiaire (SlithIR) permet des analyses simples et de haute précision
- Analyse correctement 99,9 % de tout le code Solidity public
- Temps d'exécution moyen inférieur à 1 seconde par contrat
- S'intègre avec le scan de code de GitHub dans l'IC
- Prise en charge des contrats intelligents Vyper
Utilisation
Exécutez Slither sur une application Hardhat/Foundry/Dapp/Brownie :```console slither .
C'est l'option préférée si votre projet a des dépendances, car Slither s'appuie sur le framework de compilation sous-jacent pour compiler le code source.
Cependant, vous pouvez exécuter Slither sur un seul fichier qui n'importe pas de dépendances :```console
slither tests/uninitialized.sol
Comment installer
Remarque Slither nécessite Python 3.10+. Si vous n'utilisez pas l'un des frameworks de compilation pris en charge, vous avez besoin de solc, le compilateur Solidity ; nous recommandons d'utiliser solc-select pour basculer facilement entre les versions de solc.
Utiliser uv (Recommandé)
uv est un gestionnaire de paquets Python rapide qui est 10 à 100 fois plus rapide que pip.```console
Install uv if you haven't already
curl -LsSf https://astral.sh/uv/install.sh | sh
Install slither as a tool
uv tool install slither-analyzer
Or run slither without installation
uvx --from slither-analyzer slither
Pour mettre à niveau:```console
uv tool upgrade slither-analyzer
Utilisation de Pip```console
python3 -m pip install slither-analyzer
Pour mettre à niveau :```console
python3 -m pip install --upgrade slither-analyzer
Utilisation de Brew```console
brew install slither-analyzer
### Utilisation de Git (Développement)```bash
git clone https://github.com/crytic/slither.git && cd slither
# Install as editable for development
uv tool install -e .
# Or use uv run for testing without installation
uv run slither <target>
Le drapeau -e installe en mode éditable, ce qui signifie que les modifications du code source sont immédiatement appliquées sans réinstallation.
Utilisation de Docker
Utilisez l'image docker eth-security-toolbox. Elle inclut tous nos outils de sécurité et chaque version majeure de Solidity dans une seule image. /home/share sera monté sur /share dans le conteneur.```bash
docker pull trailofbits/eth-security-toolbox
Pour partager un répertoire dans le conteneur :```bash
docker run -it -v /home/share:/share trailofbits/eth-security-toolbox
Intégration
- Pour l'intégration avec GitHub Action, utilisez slither-action.
- Pour l'intégration pre-commit, utilisez (remplacez
$GIT_TAGpar le vrai tag) ```YAML- repo: https://github.com/crytic/slither
rev: $GIT_TAG
hooks:
- id: slither
- repo: https://github.com/crytic/slither
rev: $GIT_TAG
hooks:
- Pour générer un rapport Markdown, utilisez
slither [target] --checklist. - Pour générer un Markdown avec mise en évidence du code source GitHub, utilisez
slither [target] --checklist --markdown-root https://github.com/ORG/REPO/blob/COMMIT/(remplacezORG,REPO,COMMIT)
Détecteurs
Pour plus d'informations, voir
- La Documentation des détecteurs pour les détails de chaque détecteur
- La Sélection des détecteurs pour exécuter uniquement les détecteurs sélectionnés. Par défaut, tous les détecteurs sont exécutés.
- Le Mode de triage pour filtrer les résultats individuels
Imprimantes
Imprimantes de révision rapide
human-summary: Imprime un résumé lisible des contratsinheritance-graph: Exporte le graphe d'héritage de chaque contrat vers un fichier dotcontract-summary: Imprime un résumé des contratsloc: Compte le nombre total de lignes de code (LOC), de lignes de code source (SLOC) et de lignes de commentaire (CLOC) trouvées dans les fichiers sources (SRC), les dépendances (DEP) et les fichiers de test (TEST).entry-points: Imprime toutes les fonctions de point d'entrée modifiant l'état et leurs variables des contrats
Imprimantes de révision approfondie* call-graph: Exporter le graphe d'appel des contrats vers un fichier dot
cfg: Exporter le CFG de chaque fonctionfunction-summary: Afficher un résumé des fonctionsvars-and-auth: Afficher les variables d'état écrites et l'autorisation des fonctionsnot-pausable: Afficher les fonctions qui n'utilisent pas le modificateurwhenNotPaused.
Pour exécuter une imprimante, utilisez --print et une liste d'imprimantes séparées par des virgules.
Consultez la documentation des imprimantes pour la liste complète.
Outils
slither-check-upgradeability: Vérifier la mise à niveau basée surdelegatecallslither-prop: Génération automatique de tests unitaires et de propriétésslither-flat: Aplatir une base de codeslither-check-erc: Vérifier la conformité ERCslither-read-storage: Lire les valeurs de stockage des contratsslither-interface: Générer une interface pour un contrat
Consultez la documentation des outils pour des outils supplémentaires.
Contactez-nous pour obtenir de l'aide sur la construction d'outils personnalisés.
Documentation de l'API
La documentation sur les internes de Slither est disponible ici.
Obtenir de l'aide
N'hésitez pas à passer sur notre canal Slack (#ethereum) pour obtenir de l'aide sur l'utilisation ou l'extension de Slither.
-
La documentation des imprimantes décrit les informations que Slither est capable de visualiser pour chaque contrat.
-
La documentation des détecteurs décrit comment écrire une nouvelle analyse de vulnérabilité.
-
La documentation de l'API décrit les méthodes et objets disponibles pour les analyses personnalisées.
-
La documentation SlithIR décrit la représentation intermédiaire SlithIR.
FAQ
Comment exclure les mocks ou les tests ?
- Consultez notre documentation sur le filtrage de chemin.
Comment corriger les problèmes de fichier inconnu ou de compilation ?
- Comme Slither nécessite l'AST de solc, toutes les dépendances doivent être disponibles.
Si un contrat a des dépendances,
slither contract.soléchouera. Utilisez plutôtslither .dans le répertoire parent decontracts/(vous devriez voircontracts/lorsque vous exécutezls). Si vous avez un dossiernode_modules/, il doit se trouver dans le même répertoire quecontracts/. Pour vérifier que ce problème est lié à Slither, exécutez la commande de compilation pour le framework que vous utilisez, par exemplenpx hardhat compile. Cela doit fonctionner avec succès ; sinon, le moteur de compilation de Slither, crytic-compile, ne peut pas générer l'AST.
Licence
Slither est sous licence et distribué sous la licence AGPLv3. Contactez-nous si vous recherchez une exception aux conditions.
Publications
Publication de Trail of Bits
- Slither: A Static Analysis Framework For Smart Contracts, Josselin Feist, Gustavo Grieco, Alex Groce - WETSEB '19
Publications externes
| Titre | Utilisation | Auteurs | Conférence/Publication | Code |
|---|---|---|---|---|
| ReJection: A AST-Based Reentrancy Vulnerability Detection Method | Analyse basée sur l'AST construite au-dessus de Slither | Rui Ma, Zefeng Jian, Guangyuan Chen, Ke Ma, Yujia Chen | CTCIS 19 | - |
| MPro: Combining Static and Symbolic Analysis for Scalable Testing of Smart Contract | Exploiter la dépendance de données via Slither | William Zhang, Sebastian Banescu, Leodardo Pasos, Steven Stewart, Vijay Ganesh | ISSRE 2019 | MPro |
| ETHPLOIT: From Fuzzing to Efficient Exploit Generation against Smart Contracts | Exploiter la dépendance de données via Slither | Qingzhao Zhang, Yizhuo Wang, Juanru Li, Siqi Ma | SANER 20 | - |
| Verification of Ethereum Smart Contracts: A Model Checking Approach | Exécution symbolique construite au-dessus du CFG de Slither | Tam Bang, Hoang H Nguyen, Dung Nguyen, Toan Trieu, Tho Quan | IJMLC 20 | - |
| Smart Contract Repair | S'appuyer sur les détecteurs de vulnérabilités de Slither | Xiao Liang Yu, Omar Al-Bataineh, David Lo, Abhik Roychoudhury | TOSEM 20 | SCRepair |
| Demystifying Loops in Smart Contracts | Exploiter la dépendance de données via Slither | Ben Mariano, Yanju Chen, Yu Feng, Shuvendu Lahiri, Isil Dillig | ASE 20 | - |
| Trace-Based Dynamic Gas Estimation of Loops in Smart Contracts | Utiliser le CFG de Slither pour détecter les boucles | Chunmiao Li, Shijie Nie, Yang Cao, Yijun Yu, Zhenjiang Hu | IEEE Open J. Comput. Soc. 1 (2020) | - |
| SAILFISH: Vetting Smart Contract State-Inconsistency Bugs in Seconds | S'appuyer sur SlithIR pour construire un graphe de dépendance de stockage | Priyanka Bose, Dipanjan Das, Yanju Chen, Yu Feng, Christopher Kruegel, and Giovanni Vigna | S&P 22 | Sailfish |
| SolType: Refinement Types for Arithmetic Overflow in Solidity | Utiliser Slither comme frontal pour construire un système de types raffinés | Bryan Tan, Benjamin Mariano, Shuvendu K. Lahiri, Isil Dillig, Yu Feng | POPL 22 | - |
| Do Not Rug on Me: Leveraging Machine Learning Techniques for Automated Scam Detection | Utiliser Slither pour extraire les caractéristiques des tokens (mintable, pausable, ..) | Mazorra, Bruno, Victor Adan, and Vanesa Daza | Mathematics 10.6 (2022) | - |
| MANDO: Multi-Level Heterogeneous Graph Embeddings for Fine-Grained Detection of Smart Contract Vulnerabilities | Utiliser Slither pour extraire le CFG et le graphe d'appel | Hoang Nguyen, Nhat-Minh Nguyen, Chunyao Xie, Zahra Ahmadi, Daniel Kudendo, Thanh-Nam Doan and Lingxiao Jiang | IEEE 9th International Conference on Data Science and Advanced Analytics (DSAA, 2022) | ge-sc |
| Automated Auditing of Price Gouging TOD Vulnerabilities in Smart Contracts | Utiliser Slither pour extraire le CFG et les dépendances de données | Sidi Mohamed Beillahi, Eric Keilty, Keerthi Nelaturu, Andreas Veneris, and Fan Long | 2022 IEEE International Conference on Blockchain and Cryptocurrency (ICBC) | Smart-Contract-Repair |
| Modeling and Enforcing Access Control Policies for Smart Contracts | Étendre les dépendances de données de Slither | Jan-Philipp Toberg, Jonas Schiffl, Frederik Reiche, Bernhard Beckert, Robert Heinrich, Ralf Reussner | IEEE International Conference on Decentralized Applications and Infrastructures (DAPPS), 2022 | SolidityAccessControlEnforcement |
| Smart Contract Vulnerability Detection Based on Deep Learning and Multimodal Decision Fusion | Utiliser Slither pour extraire le CFG | Weichu Deng, Huanchun Wei, Teng Huang, Cong Cao, Yun Peng, and Xuan Hu | Sensors 2023, 23, 7246 | - |
| Semantic-enriched Code Knowledge Graph to Reveal Unknowns in Smart Contract Code Reuse | Utiliser Slither pour extraire les caractéristiques du code (CFG, fonction, types de paramètres, ..) | Qing Huang, Dianshu Liao, Zhenchang Xing, Zhengkang Zuo, Changjing Wang, Xin Xia | ACM Transactions on Software Engineering and Methodology, 2023 | - |
| Smart Contract Parallel Execution with Fine-Grained State Accesses | Utiliser Slither pour construire des graphes d'accès aux états | Xiaodong Qi, Jiao Jiao, Yi Li | International Conference on Distributed Computing Systems (ICDCS), 2023 | - |
| Bad Apples: Understanding the Centralized Security Risks in Decentralized Ecosystems | Implémenter une analyse interne au-dessus de Slither | Kailun Yan , Jilian Zhang , Xiangyu Liu , Wenrui Diao , Shanqing Guo | ACM Web Conference April 2023 | - |
| Identifying Vulnerabilities in Smart Contracts using Interval Analysis | Créer 4 détecteurs au-dessus de Slither | Ştefan-Claudiu Susan, Andrei Arusoaie | FROM 2023 | - |
| Storage State Analysis and Extraction of Ethereum Blockchain Smart Contracts (no PDF in open access) | S'appuyer sur le CFG et l'AST de Slither | Maha Ayub , Tania Saleem , Muhammad Janjua , Talha Ahmad | TOSEM 2023 | SmartMuv |
Si vous utilisez Slither dans un travail académique, envisagez de postuler au Crytic $10k Research Prize.