
slither v0.11.6
Analizzatore statico per Solidity e Vyper
Slither, l'analizzatore statico di smart contract
Unisciti a Empire Hacking Slack
- Discussioni e supporto
Slither è un framework di analisi statica per Solidity e Vyper scritto in Python3. Esegue una suite di rilevatori di vulnerabilità, stampa informazioni visive sui dettagli dei contratti e fornisce un'API per scrivere facilmente analisi personalizzate. Slither consente agli sviluppatori di trovare vulnerabilità, migliorare la comprensione del codice e prototipare rapidamente analisi personalizzate.
- Caratteristiche
- Utilizzo
- Come installare
- Rilevatori
- Stampanti
- Strumenti
- Documentazione API
- Ottenere aiuto
- FAQ
- Licenza
- Pubblicazioni
Caratteristiche
- Rileva codice Solidity vulnerabile con bassi falsi positivi (vedi l'elenco dei trofei)
- Identifica dove si verifica la condizione di errore nel codice sorgente
- Si integra facilmente con l'integrazione continua e le build di Hardhat/Foundry
- Le 'stampanti' integrate riportano rapidamente informazioni cruciali sui contratti
- API per i rilevatori per scrivere analisi personalizzate in Python
- Capacità di analizzare contratti scritti con Solidity >= 0.4
- La rappresentazione intermedia (SlithIR) consente analisi semplici e ad alta precisione
- Analizza correttamente il 99,9% di tutto il codice Solidity pubblico
- Tempo di esecuzione medio inferiore a 1 secondo per contratto
- Si integra con la scansione del codice di Github in CI
- Supporto per smart contract Vyper
Utilizzo
Esegui Slither su un'applicazione Hardhat/Foundry/Dapp/Brownie:```console slither .
Questa è l'opzione preferita se il tuo progetto ha dipendenze, poiché Slither si basa sul framework di compilazione sottostante per compilare il codice sorgente.
Tuttavia, puoi eseguire Slither su un file singolo che non importa dipendenze:```console
slither tests/uninitialized.sol
Come installare
Nota Slither richiede Python 3.10+. Se non intendi utilizzare uno dei framework di compilazione supportati, hai bisogno di solc, il compilatore Solidity; consigliamo di utilizzare solc-select per passare comodamente tra le versioni di solc.
Usando uv (Consigliato)
uv è un gestore di pacchetti Python veloce che è da 10 a 100 volte più rapido di 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
Per aggiornare:```console
uv tool upgrade slither-analyzer
Usare Pip```console
python3 -m pip install slither-analyzer
Per aggiornare:```console
python3 -m pip install --upgrade slither-analyzer
Usare Brew```console
brew install slither-analyzer
### Usare Git (Sviluppo)```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>
Il flag -e installa in modalità modificabile, il che significa che le modifiche al codice sorgente vengono immediatamente riflesse senza dover reinstallare.
Utilizzo di Docker
Utilizza l'immagine docker eth-security-toolbox. Include tutti i nostri strumenti di sicurezza e ogni versione principale di Solidity in una singola immagine. /home/share verrà montato su /share nel contenitore.```bash
docker pull trailofbits/eth-security-toolbox
Per condividere una directory nel contenitore:```bash
docker run -it -v /home/share:/share trailofbits/eth-security-toolbox
Integrazione
- Per l'integrazione con GitHub Action, utilizza slither-action.
- Per l'integrazione con pre-commit, utilizza (sostituisci
$GIT_TAGcon un tag reale) ```YAML- repo: https://github.com/crytic/slither
rev: $GIT_TAG
hooks:
- id: slither
- repo: https://github.com/crytic/slither
rev: $GIT_TAG
hooks:
- Per generare un report in Markdown, usa
slither [target] --checklist. - Per generare un Markdown con l'evidenziazione del codice sorgente di GitHub, usa
slither [target] --checklist --markdown-root https://github.com/ORG/REPO/blob/COMMIT/(sostituisciORG,REPO,COMMIT)
Rilevatori
Per maggiori informazioni, consulta
- La Documentazione dei Rilevatori per i dettagli su ogni rilevatore
- La Selezione dei Rilevatori per eseguire solo rilevatori selezionati. Per impostazione predefinita, vengono eseguiti tutti i rilevatori.
- La Modalità di Triage per filtrare i singoli risultati
Stampanti
Stampanti per Revisione Rapida
human-summary: Stampa un riepilogo leggibile dei contrattiinheritance-graph: Esporta il grafico di ereditarietà di ogni contratto in un file dotcontract-summary: Stampa un riepilogo dei contrattiloc: Conta il numero totale di righe di codice (LOC), righe di codice sorgente (SLOC) e righe di commento (CLOC) trovate nei file sorgente (SRC), dipendenze (DEP) e file di test (TEST).entry-points: Stampa tutte le funzioni di entry point che modificano lo stato e le loro variabili dei contratti
Stampanti per Revisione Approfondita* call-graph: Esporta il grafo delle chiamate dei contratti in un file dot
cfg: Esporta il CFG di ogni funzionefunction-summary: Stampa un riepilogo delle funzionivars-and-auth: Stampa le variabili di stato scritte e l'autorizzazione delle funzioninot-pausable: Stampa le funzioni che non usano il modificatorewhenNotPaused.
Per eseguire un printer, usa --print e un elenco separato da virgole di printer.
Consulta la documentazione dei printer per gli elenchi completi.
Strumenti
slither-check-upgradeability: Revisiona l'aggiornabilità basata sudelegatecallslither-prop: Generazione automatica di test unitari e proprietàslither-flat: Appiattisci un codebaseslither-check-erc: Verifica la conformità ERCslither-read-storage: Leggi i valori di storage dai contrattislither-interface: Genera un'interfaccia per un contratto
Consulta la documentazione degli strumenti per ulteriori strumenti.
Contattaci per ricevere assistenza nella creazione di strumenti personalizzati.
Documentazione API
La documentazione degli interni di Slither è disponibile qui.
Come ottenere aiuto
Sentiti libero di passare dal nostro canale Slack (#ethereum) per assistenza nell'uso o nell'estensione di Slither.
-
La documentazione dei printer descrive le informazioni che Slither è in grado di visualizzare per ogni contratto.
-
La documentazione dei detector descrive come scrivere una nuova analisi delle vulnerabilità.
-
La documentazione dell'API descrive i metodi e gli oggetti disponibili per analisi personalizzate.
-
La documentazione di SlithIR descrive la rappresentazione intermedia SlithIR.
FAQ
Come si escludono mock o test?
- Consulta la nostra documentazione sul filtraggio dei percorsi.
Come risolvo "file sconosciuto" o problemi di compilazione?
- Poiché slither richiede l'AST di solc, deve avere tutte le dipendenze disponibili.
Se un contratto ha dipendenze,
slither contract.solfallirà. Invece, usaslither .nella directory padre dicontracts/(dovresti vederecontracts/quando eseguils). Se hai una cartellanode_modules/, deve trovarsi nella stessa directory dicontracts/. Per verificare che questo problema sia relativo a slither, esegui il comando di compilazione per il framework che stai utilizzando, ad esempionpx hardhat compile. Deve funzionare con successo; altrimenti, il motore di compilazione di slither, crytic-compile, non può generare l'AST.
Licenza
Slither è concesso in licenza e distribuito sotto la licenza AGPLv3. Contattaci se cerchi un'eccezione ai termini.
Pubblicazioni
Pubblicazione di Trail of Bits
- Slither: A Static Analysis Framework For Smart Contracts, Josselin Feist, Gustavo Grieco, Alex Groce - WETSEB '19
Pubblicazioni esterne
| Titolo | Utilizzo | Autori | Sede | Codice |
|---|---|---|---|---|
| ReJection: A AST-Based Reentrancy Vulnerability Detection Method | Analisi basata su AST costruita sopra 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 | Sfrutta le dipendenze dei dati tramite Slither | William Zhang, Sebastian Banescu, Leodardo Pasos, Steven Stewart, Vijay Ganesh | ISSRE 2019 | MPro |
| ETHPLOIT: From Fuzzing to Efficient Exploit Generation against Smart Contracts | Sfrutta le dipendenze dei dati tramite Slither | Qingzhao Zhang, Yizhuo Wang, Juanru Li, Siqi Ma | SANER 20 | - |
| Verification of Ethereum Smart Contracts: A Model Checking Approach | Esecuzione simbolica costruita sopra il CFG di Slither | Tam Bang, Hoang H Nguyen, Dung Nguyen, Toan Trieu, Tho Quan | IJMLC 20 | - |
| Smart Contract Repair | Si basa sui detector di vulnerabilità di Slither | Xiao Liang Yu, Omar Al-Bataineh, David Lo, Abhik Roychoudhury | TOSEM 20 | SCRepair |
| Demystifying Loops in Smart Contracts | Sfrutta le dipendenze dei dati tramite Slither | Ben Mariano, Yanju Chen, Yu Feng, Shuvendu Lahiri, Isil Dillig | ASE 20 | - |
| Trace-Based Dynamic Gas Estimation of Loops in Smart Contracts | Usa il CFG di Slither per rilevare i loop | 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 | Si basa su SlithIR per costruire un grafo delle dipendenze di storage | 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 | Usa Slither come frontend per costruire un sistema di tipi per raffinamento | 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 | Usa Slither per estrarre le caratteristiche dei token (mintabile, pausabile, ..) | 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 | Usa Slither per estrarre il CFG e il grafo delle chiamate | 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 | Usa Slither per estrarre il CFG e le dipendenze dei dati | 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 | Estende le dipendenze dei dati di 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 | Usa Slither per estrarre il 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 | Usa Slither per estrarre le caratteristiche del codice (CFG, funzione, tipi di parametri, ..) | 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 | Usa Slither per costruire grafi degli accessi allo stato | Xiaodong Qi, Jiao Jiao, Yi Li | International Conference on Distributed Computing Systems (ICDCS), 2023 | - |
| Bad Apples: Understanding the Centralized Security Risks in Decentralized Ecosystems | Implementa un'analisi interna basata su Slither | Kailun Yan , Jilian Zhang , Xiangyu Liu , Wenrui Diao , Shanqing Guo | ACM Web Conference April 2023 | - |
| Identifying Vulnerabilities in Smart Contracts using Interval Analysis | Crea 4 detector basati su Slither | Ştefan-Claudiu Susan, Andrei Arusoaie | FROM 2023 | - |
| Storage State Analysis and Extraction of Ethereum Blockchain Smart Contracts (nessun PDF in accesso aperto) | Si basa sul CFG e sull'AST di Slither | Maha Ayub , Tania Saleem , Muhammad Janjua , Talha Ahmad | TOSEM 2023 | SmartMuv |
Se stai usando Slither in un lavoro accademico, considera di candidarti al Crytic $10k Research Prize.