
Statischer Analyzer für Solidity und Vyper
Tritt dem Empire Hacking Slack bei
- Diskussionen und Support
Slither ist ein in Python3 geschriebenes statisches Analyse-Framework für Solidity und Vyper. Es führt eine Reihe von Schwachstellendetektoren aus, gibt visuelle Informationen über Vertragsdetails aus und bietet eine API, um benutzerdefinierte Analysen einfach zu schreiben. Slither ermöglicht Entwicklern, Schwachstellen zu finden, ihr Codeverständnis zu verbessern und schnell individuelle Analysen zu prototypisieren.
Führe Slither auf einer Hardhat/Foundry/Dapp/Brownie-Anwendung aus:```console slither .
Dies ist die bevorzugte Option, wenn Ihr Projekt Abhängigkeiten hat, da Slither auf dem zugrunde liegenden Kompilierungs-Framework basiert, um Quellcode zu kompilieren.
Sie können Slither jedoch auch auf einer einzelnen Datei ausführen, die keine Abhängigkeiten importiert:```console
slither tests/uninitialized.sol
Hinweis Slither benötigt Python 3.10+. Falls Sie keines der unterstützten Compilierungs-Frameworks verwenden, benötigen Sie solc, den Solidity-Compiler. Wir empfehlen solc-select für den bequemen Wechsel zwischen solc-Versionen.
uv ist ein schneller Python-Paketmanager, der 10-100x schneller ist als pip.```console
curl -LsSf https://astral.sh/uv/install.sh | sh
uv tool install slither-analyzer
uvx --from slither-analyzer slither
Zum Aktualisieren:```console
uv tool upgrade slither-analyzer
python3 -m pip install slither-analyzer
Aktualisieren:```console
python3 -m pip install --upgrade slither-analyzer
brew install slither-analyzer
### Mit Git (Entwicklung)```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>
The -e flag installiert im bearbeitbaren Modus, was bedeutet, dass Änderungen am Quellcode sofort übernommen werden, ohne dass eine Neuinstallation erforderlich ist.
Verwenden Sie das Docker-Image eth-security-toolbox. Es enthält alle unsere Sicherheitstools und jede Hauptversion von Solidity in einem einzigen Image. /home/share wird im Container auf /share gemountet.```bash
docker pull trailofbits/eth-security-toolbox
Um ein Verzeichnis im Container freizugeben:```bash
docker run -it -v /home/share:/share trailofbits/eth-security-toolbox
$GIT_TAG durch das tatsächliche Tag) ```YAML
slither [target] --checklist.slither [target] --checklist --markdown-root https://github.com/ORG/REPO/blob/COMMIT/ (ersetzen Sie ORG, REPO, COMMIT)| Nr. | Detektor | Was er erkennt | Auswirkung | Vertrauen |
|---|---|---|---|---|
| 1 | abiencoderv2-array | Storage-abiencoderv2-Array | Hoch | Hoch |
| 2 | arbitrary-send-erc20 | transferFrom verwendet beliebiges from | Hoch | Hoch |
| 3 | array-by-reference | Ändern eines Storage-Arrays durch Wert | Hoch | Hoch |
| 4 | encode-packed-collision | ABI encodePacked-Kollision | Hoch | Hoch |
| 5 | incorrect-shift | Die Reihenfolge der Parameter in einer Shift-Anweisung ist falsch. | Hoch | Hoch |
| 6 | multiple-constructors | Mehrere Konstruktorschemata | Hoch | Hoch |
| 7 | name-reused | Wiederverwendung des Vertragsnamens | Hoch | Hoch |
| 8 | protected-vars | Erkannte ungeschützte Variablen | Hoch | Hoch |
| 9 | public-mappings-nested | Öffentliche Mappings mit verschachtelten Variablen |
Weitere Informationen finden Sie unter
human-summary: Gibt eine menschenlesbare Zusammenfassung der Verträge ausinheritance-graph: Exportiert den Vererbungsgraphen jedes Vertrags in eine DOT-Dateicontract-summary: Gibt eine Zusammenfassung der Verträge ausloc: Zählt die Gesamtzahl der Codezeilen (LOC), Quellcodezeilen (SLOC) und Kommentarzeilen (CLOC) in Quelldateien (SRC), Abhängigkeiten (DEP) und Testdateien (TEST).entry-points: Gibt alle zustandsändernden Einstiegspunktfunktionen und deren Variablen der Verträge auscall-graph: Exportiere den Call-Graphen der Verträge in eine dot-Dateicfg: Exportiere das CFG jeder Funktionfunction-summary: Drucke eine Zusammenfassung der Funktionenvars-and-auth: Drucke die geschriebenen Zustandsvariablen und die Autorisierung der Funktionennot-pausable: Drucke Funktionen, die den Modifikator whenNotPaused nicht verwenden.Um einen Drucker auszuführen, verwende --print und eine kommagetrennte Liste von Druckern.
Siehe die Printer-Dokumentation für die vollständigen Listen.
slither-check-upgradeability: Überprüfe die auf delegatecall basierende Upgradeabilityslither-prop: Automatische Unit-Tests und Eigenschaftsgenerierungslither-flat: Glätten einer Codebasisslither-check-erc: Überprüfe die ERC-Konformitätslither-read-storage: Lese Speicherwerte aus Verträgenslither-interface: Generiere ein Interface für einen VertragSiehe die Tool-Dokumentation für weitere Tools.
Kontaktiere uns, um Hilfe beim Erstellen benutzerdefinierter Tools zu erhalten.
Die Dokumentation zu Slithers Interna ist hier verfügbar.
Besuche gerne unseren Slack-Kanal (#ethereum) für Hilfe bei der Nutzung oder Erweiterung von Slither.
Die Printer-Dokumentation beschreibt die Informationen, die Slither für jeden Vertrag visualisieren kann.
Die Detector-Dokumentation beschreibt, wie man eine neue Schwachstellenanalyse schreibt.
Die API-Dokumentation beschreibt die Methoden und Objekte, die für benutzerdefinierte Analysen verfügbar sind.
Die SlithIR-Dokumentation beschreibt die Zwischendarstellung SlithIR.
Wie schließe ich Mocks oder Tests aus?
Wie behebe ich "unknown file" oder Kompilierungsprobleme?
slither contract.sol fehlschlagen.
Verwende stattdessen slither . im übergeordneten Verzeichnis von contracts/ (du solltest contracts/ sehen, wenn du ls ausführst).
Wenn du einen node_modules/-Ordner hast, muss er sich im selben Verzeichnis wie contracts/ befinden. Um zu überprüfen, ob dieses Problem mit Slither zusammenhängt, führe den Kompilierungsbefehl für das von dir verwendete Framework aus, z.B. npx hardhat compile. Das muss erfolgreich funktionieren; andernfalls kann Slithers Kompilierungs-Engine, crytic-compile, den AST nicht generieren.Slither ist unter der AGPLv3-Lizenz lizenziert und wird unter dieser vertrieben. Kontaktiere uns, wenn du eine Ausnahme von den Bedingungen suchst.
| Titel | Nutzung | Autoren | Konferenz/Zeitschrift | Code |
|---|---|---|---|---|
| ReJection: A AST-Based Reentrancy Vulnerability Detection Method | AST-basierte Analyse auf Basis von 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 | Nutzung von Datenabhängigkeiten durch Slither | William Zhang, Sebastian Banescu, Leodardo Pasos, Steven Stewart, Vijay Ganesh | ISSRE 2019 | MPro |
| ETHPLOIT: From Fuzzing to Efficient Exploit Generation against Smart Contracts | Nutzung von Datenabhängigkeiten durch Slither | Qingzhao Zhang, Yizhuo Wang, Juanru Li, Siqi Ma | SANER 20 | - |
| Verification of Ethereum Smart Contracts: A Model Checking Approach | Symbolische Ausführung auf Basis von Slithers CFG | Tam Bang, Hoang H Nguyen, Dung Nguyen, Toan Trieu, Tho Quan | IJMLC 20 | - |
| Smart Contract Repair | Verlass auf Slithers Schwachstellendetektoren | Xiao Liang Yu, Omar Al-Bataineh, David Lo, Abhik Roychoudhury | TOSEM 20 | SCRepair |
| Demystifying Loops in Smart Contracts | Nutzung von Datenabhängigkeiten durch Slither | Ben Mariano, Yanju Chen, Yu Feng, Shuvendu Lahiri, Isil Dillig | ASE 20 | - |
| Trace-Based Dynamic Gas Estimation of Loops in Smart Contracts | Verwendung von Slithers CFG zur Erkennung von Schleifen | 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 |
Wenn du Slither in einer akademischen Arbeit verwendest, erwäge eine Bewerbung für den Crytic $10k Research Prize.
| Hoch |
| Hoch |
| 10 | rtlo | Steuerzeichen zur Rechts-nach-Links-Überschreibung wird verwendet | Hoch | Hoch |
| 11 | shadowing-state | State-Variablen-Überschattung | Hoch | Hoch |
| 12 | suicidal | Funktionen, die es jedem erlauben, den Vertrag zu zerstören | Hoch | Hoch |
| 13 | uninitialized-state | Nicht initialisierte State-Variablen | Hoch | Hoch |
| 14 | uninitialized-storage | Nicht initialisierte Storage-Variablen | Hoch | Hoch |
| 15 | unprotected-upgrade | Ungeschützter upgradebarer Vertrag | Hoch | Hoch |
| 16 | arbitrary-send-erc20-permit | transferFrom verwendet beliebiges from mit Permit | Hoch | Mittel |
| 17 | arbitrary-send-eth | Funktionen, die Ether an beliebige Ziele senden | Hoch | Mittel |
| 18 | controlled-array-length | Zuweisung einer verfälschten Array-Länge | Hoch | Mittel |
| 19 | controlled-delegatecall | Kontrolliertes delegatecall-Ziel | Hoch | Mittel |
| 20 | delegatecall-loop | Payable-Funktionen, die delegatecall innerhalb einer Schleife verwenden | Hoch | Mittel |
| 21 | incorrect-exp | Falsche Potenzierung | Hoch | Mittel |
| 22 | incorrect-return | Wenn ein return fälschlicherweise im Assembly-Modus verwendet wird. | Hoch | Mittel |
| 23 | msg-value-loop | msg.value innerhalb einer Schleife | Hoch | Mittel |
| 24 | reentrancy-eth | Reentrancy-Schwachstellen (Diebstahl von Ether) | Hoch | Mittel |
| 25 | reentrancy-balance | Reentrancy-Schwachstellen, die zu veralteten Saldenprüfungen führen | Hoch | Mittel |
| 26 | return-leave | Wenn ein return anstelle eines leave verwendet wird. | Hoch | Mittel |
| 27 | storage-array | Compiler-Fehler bei signierten Storage-Integer-Arrays | Hoch | Mittel |
| 28 | unchecked-transfer | Ungeprüfter Token-Transfer | Hoch | Mittel |
| 29 | weak-prng | Schwacher PRNG | Hoch | Mittel |
| 30 | domain-separator-collision | Erkennt ERC20-Token, die eine Funktion haben, deren Signatur mit EIP-2612s DOMAIN_SEPARATOR() kollidiert | Mittel | Hoch |
| 31 | enum-conversion | Erkennt gefährliche Enum-Konvertierung | Mittel | Hoch |
| 32 | erc20-interface | Falsche ERC20-Schnittstellen | Mittel | Hoch |
| 33 | erc721-interface | Falsche ERC721-Schnittstellen | Mittel | Hoch |
| 34 | incorrect-equality | Gefährliche strikte Gleichheiten | Mittel | Hoch |
| 35 | locked-ether | Verträge, die Ether sperren | Mittel | Hoch |
| 36 | mapping-deletion | Löschen eines Mappings, das eine Struktur enthält | Mittel | Hoch |
| 37 | pyth-deprecated-functions | Erkennt veraltete Pyth-Funktionen | Mittel | Hoch |
| 38 | pyth-unchecked-confidence | Erkennt, wenn das Konfidenzniveau eines Pyth-Preises nicht überprüft wird | Mittel | Hoch |
| 39 | pyth-unchecked-publishtime | Erkennt, wenn die publishTime eines Pyth-Preises nicht überprüft wird | Mittel | Hoch |
| 40 | shadowing-abstract | State-Variablen-Überschattung durch abstrakte Verträge | Mittel | Hoch |
| 41 | tautological-compare | Vergleicht eine Variable mit sich selbst, was je nach Vergleich immer true oder false zurückgibt | Mittel | Hoch |
| 42 | tautology | Tautologie oder Widerspruch | Mittel | Hoch |
| 43 | write-after-write | Unbenutzter Schreibzugriff | Mittel | Hoch |
| 44 | boolean-cst | Missbrauch einer Boolean-Konstante | Mittel | Mittel |
| 45 | chronicle-unchecked-price | Erkennt, wenn Chronicle-Preis nicht überprüft wird. | Mittel | Mittel |
| 46 | constant-function-asm | Konstante Funktionen mit Assembly-Code | Mittel | Mittel |
| 47 | constant-function-state | Konstante Funktionen, die den State ändern | Mittel | Mittel |
| 48 | divide-before-multiply | Ungenauigkeit der Reihenfolge arithmetischer Operationen | Mittel | Mittel |
| 49 | gelato-unprotected-randomness | Aufruf von _requestRandomness innerhalb einer ungeschützten Funktion | Mittel | Mittel |
| 50 | out-of-order-retryable | Nicht sequenzielle wiederholbare Transaktionen | Mittel | Mittel |
| 51 | reentrancy-no-eth | Reentrancy-Schwachstellen (kein Diebstahl von Ether) | Mittel | Mittel |
| 52 | reused-constructor | Wiederverwendeter Basis-Konstruktor | Mittel | Mittel |
| 53 | tx-origin | Gefährliche Verwendung von tx.origin | Mittel | Mittel |
| 54 | unchecked-lowlevel | Ungeprüfte Low-Level-Aufrufe | Mittel | Mittel |
| 55 | unchecked-send | Ungeprüfter send | Mittel | Mittel |
| 56 | uninitialized-local | Nicht initialisierte lokale Variablen | Mittel | Mittel |
| 57 | unused-return | Unbenutzte Rückgabewerte | Mittel | Mittel |
| 58 | chainlink-feed-registry | Erkennt, wenn Chainlink-Feed-Registry verwendet wird | Niedrig | Hoch |
| 59 | incorrect-modifier | Modifier, die den Standardwert zurückgeben können | Niedrig | Hoch |
| 60 | optimism-deprecation | Erkennt, wenn veralteter Optimism-Predeploy oder -Funktion verwendet wird. | Niedrig | Hoch |
| 61 | shadowing-builtin | Überschattung eingebauter Symbole | Niedrig | Hoch |
| 62 | shadowing-local | Überschattung lokaler Variablen | Niedrig | Hoch |
| 63 | uninitialized-fptr-cst | Aufrufe nicht initialisierter Funktionszeiger in Konstruktoren | Niedrig | Hoch |
| 64 | variable-scope | Lokale Variablen vor ihrer Deklaration verwendet | Niedrig | Hoch |
| 65 | void-cst | Konstruktor aufgerufen, aber nicht implementiert | Niedrig | Hoch |
| 66 | calls-loop | Mehrere Aufrufe in einer Schleife | Niedrig | Mittel |
| 67 | events-access | Fehlende Ereignisse bei Zugriffskontrolle | Niedrig | Mittel |
| 68 | events-maths | Fehlende Ereignisse bei Arithmetik | Niedrig | Mittel |
| 69 | incorrect-unary | Gefährliche unäre Ausdrücke | Niedrig | Mittel |
| 70 | missing-zero-check | Fehlende Validierung der Nulladresse | Niedrig | Mittel |
| 71 | reentrancy-benign | Gutartige Reentrancy-Schwachstellen | Niedrig | Mittel |
| 72 | reentrancy-events | Reentrancy-Schwachstellen, die zu nicht sequenziellen Ereignissen führen | Niedrig | Mittel |
| 73 | return-bomb | Ein Low-Level-Callee könnte unerwartet das gesamte Gas des Aufrufers verbrauchen. | Niedrig | Mittel |
| 74 | timestamp | Gefährliche Verwendung von block.timestamp | Niedrig | Mittel |
| 75 | assembly | Assembly-Verwendung | Informativ | Hoch |
| 76 | assert-state-change | Assert-Statusänderung | Informativ | Hoch |
| 77 | boolean-equal | Vergleich mit einer Boolean-Konstante | Informativ | Hoch |
| 78 | cyclomatic-complexity | Erkennt Funktionen mit hoher (> 11) zyklomatischer Komplexität | Informativ | Hoch |
| 79 | deprecated-standards | Veraltete Solidity-Standards | Informativ | Hoch |
| 80 | erc20-indexed | Nicht indizierte ERC20-Ereignisparameter | Informativ | Hoch |
| 81 | function-init-state | Funktion, die State-Variablen initialisiert | Informativ | Hoch |
| 82 | incorrect-using-for | Erkennt die Verwendung von using-for-Anweisungen, wenn keine Funktion aus einer bestimmten Bibliothek zu einem bestimmten Typ passt | Informativ | Hoch |
| 83 | low-level-calls | Low-Level-Aufrufe | Informativ | Hoch |
| 84 | missing-inheritance | Fehlende Vererbung | Informativ | Hoch |
| 85 | naming-convention | Einhaltung der Solidity-Namenskonventionen | Informativ | Hoch |
| 86 | pragma | Wenn verschiedene Pragma-Direktiven verwendet werden | Informativ | Hoch |
| 87 | redundant-statements | Redundante Anweisungen | Informativ | Hoch |
| 88 | solc-version | Falsche Solidity-Version | Informativ | Hoch |
| 89 | unimplemented-functions | Nicht implementierte Funktionen | Informativ | Hoch |
| 90 | unindexed-event-address | Ereignisse mit Adressparametern, aber ohne indizierte Parameter | Informativ | Hoch |
| 91 | unused-state | Unbenutzte State-Variablen | Informativ | Hoch |
| 92 | costly-loop | Kostspielige Operationen in einer Schleife | Informativ | Mittel |
| 93 | dead-code | Funktionen, die nicht verwendet werden | Informativ | Mittel |
| 94 | reentrancy-unlimited-gas | Reentrancy-Schwachstellen durch send und transfer | Informativ | Mittel |
| 95 | too-many-digits | Einhaltung bewährter Praktiken für numerische Notation | Informativ | Mittel |
| 96 | cache-array-length | Erkennt for-Schleifen, die das length-Mitglied eines Storage-Arrays in ihrer Schleifenbedingung verwenden und es nicht verändern. | Optimierung | Hoch |
| 97 | constable-states | State-Variablen, die als konstant deklariert werden könnten | Optimierung | Hoch |
| 98 | external-function | Öffentliche Funktion, die als external deklariert werden könnte | Optimierung | Hoch |
| 99 | immutable-states | State-Variablen, die als immutable deklariert werden könnten | Optimierung | Hoch |
| 100 | var-read-using-this | Vertrag liest seine eigene Variable mittels this | Optimierung | Hoch |
| Verlass auf SlithIR zum Aufbau eines Storage-Dependency-Graphen |
| 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 | Verwendung von Slither als Frontend zur Erstellung eines Verfeinerungstypsystems | 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 | Verwendung von Slither zur Extraktion von Tokenmerkmalen (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 | Verwendung von Slither zur Extraktion des CFG und des Call-Graphen | 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 | Verwendung von Slither zur Extraktion des CFG und der Datenabhängigkeiten | 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 | Erweiterung der Datenabhängigkeiten von 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 | Verwendung von Slither zur Extraktion des 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 | Verwendung von Slither zur Extraktion der Code-Merkmale (CFG, Funktion, Parametertypen, ..) | 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 | Verwendung von Slither zum Aufbau von Zustandszugriffsgraphen | Xiaodong Qi, Jiao Jiao, Yi Li | International Conference on Distributed Computing Systems (ICDCS), 2023 | - |
| Bad Apples: Understanding the Centralized Security Risks in Decentralized Ecosystems | Implementierung einer internen Analyse auf Basis von Slither | Kailun Yan , Jilian Zhang , Xiangyu Liu , Wenrui Diao , Shanqing Guo | ACM Web Conference April 2023 | - |
| Identifying Vulnerabilities in Smart Contracts using Interval Analysis | Erstellung von 4 Detektoren auf Basis von Slither | Ştefan-Claudiu Susan, Andrei Arusoaie | FROM 2023 | - |
| Storage State Analysis and Extraction of Ethereum Blockchain Smart Contracts (no PDF in open access) | Verlass auf Slithers CFG und AST | Maha Ayub , Tania Saleem , Muhammad Janjua , Talha Ahmad | TOSEM 2023 | SmartMuv |