
Analizzatore statico per Solidity e Vyper
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.
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
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.
uv è un gestore di pacchetti Python veloce che è da 10 a 100 volte più rapido di pip.```console
curl -LsSf https://astral.sh/uv/install.sh | sh
uv tool install slither-analyzer
uvx --from slither-analyzer slither
Per aggiornare:```console
uv tool upgrade slither-analyzer
python3 -m pip install slither-analyzer
Per aggiornare:```console
python3 -m pip install --upgrade slither-analyzer
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.
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
$GIT_TAG con un tag reale) ```YAML
slither [target] --checklist.slither [target] --checklist --markdown-root https://github.com/ORG/REPO/blob/COMMIT/ (sostituisci ORG, REPO, COMMIT)| Num | Rilevatore | Cosa rileva | Impatto | Confidenza |
|---|---|---|---|---|
| 1 | abiencoderv2-array | Array storage abiencoderv2 | Alto | Alta |
| 2 | arbitrary-send-erc20 | transferFrom usa un from arbitrario | Alto | Alta |
| 3 | array-by-reference | Modifica dell'array di storage per valore | Alto | Alta |
| 4 | encode-packed-collision | Collisione ABI encodePacked | Alto | Alta |
| 5 | incorrect-shift | L'ordine dei parametri in un'istruzione di shift non è corretto. | Alto | Alta |
| 6 | multiple-constructors | Schemi di costruttori multipli | Alto | Alta |
| 7 | name-reused | Nome del contratto riutilizzato | Alto | Alta |
| 8 | protected-vars | Variabili non protette rilevate | Alto | Alta |
| 9 | public-mappings-nested | Mapping pubblici con variabili annidate |
Per maggiori informazioni, consulta
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 contratticall-graph: Esporta il grafo delle chiamate dei contratti in un file dotcfg: 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 modificatore whenNotPaused.Per eseguire un printer, usa --print e un elenco separato da virgole di printer.
Consulta la documentazione dei printer per gli elenchi completi.
slither-check-upgradeability: Revisiona l'aggiornabilità basata su delegatecallslither-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 contrattoConsulta la documentazione degli strumenti per ulteriori strumenti.
Contattaci per ricevere assistenza nella creazione di strumenti personalizzati.
La documentazione degli interni di Slither è disponibile qui.
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.
Come si escludono mock o test?
Come risolvo "file sconosciuto" o problemi di compilazione?
slither contract.sol fallirà.
Invece, usa slither . nella directory padre di contracts/ (dovresti vedere contracts/ quando esegui ls).
Se hai una cartella node_modules/, deve trovarsi nella stessa directory di contracts/. Per verificare che questo problema sia relativo a slither,
esegui il comando di compilazione per il framework che stai utilizzando, ad esempio npx hardhat compile. Deve funzionare con successo;
altrimenti, il motore di compilazione di slither, crytic-compile, non può generare l'AST.Slither è concesso in licenza e distribuito sotto la licenza AGPLv3. Contattaci se cerchi un'eccezione ai termini.
| 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 |
Se stai usando Slither in un lavoro accademico, considera di candidarti al Crytic $10k Research Prize.
| Alto |
| Alta |
| 10 | rtlo | È utilizzato un carattere di controllo Right-To-Left Override | Alto | Alta |
| 11 | shadowing-state | Shadowing di variabili di stato | Alto | Alta |
| 12 | suicidal | Funzioni che permettono a chiunque di distruggere il contratto | Alto | Alta |
| 13 | uninitialized-state | Variabili di stato non inizializzate | Alto | Alta |
| 14 | uninitialized-storage | Variabili di storage non inizializzate | Alto | Alta |
| 15 | unprotected-upgrade | Contratto aggiornabile non protetto | Alto | Alta |
| 16 | arbitrary-send-erc20-permit | transferFrom usa from arbitrario con permit | Alto | Media |
| 17 | arbitrary-send-eth | Funzioni che inviano Ether a destinazioni arbitrarie | Alto | Media |
| 18 | controlled-array-length | Assegnazione contaminata della lunghezza dell'array | Alto | Media |
| 19 | controlled-delegatecall | Destinazione delegatecall controllata | Alto | Media |
| 20 | delegatecall-loop | Funzioni pagabili che utilizzano delegatecall all'interno di un ciclo | Alto | Media |
| 21 | incorrect-exp | Esponenziazione errata | Alto | Media |
| 22 | incorrect-return | Se un return viene utilizzato in modo errato nella modalità assembly. | Alto | Media |
| 23 | msg-value-loop | msg.value all'interno di un ciclo | Alto | Media |
| 24 | reentrancy-eth | Vulnerabilità di rientranza (furto di ether) | Alto | Media |
| 25 | reentrancy-balance | Vulnerabilità di rientranza che portano a controlli di saldo obsoleti | Alto | Media |
| 26 | return-leave | Se viene utilizzato un return invece di un leave. | Alto | Media |
| 27 | storage-array | Bug del compilatore per array di interi con segno in storage | Alto | Media |
| 28 | unchecked-transfer | Trasferimento di token non controllato | Alto | Media |
| 29 | weak-prng | PRNG debole | Alto | Media |
| 30 | domain-separator-collision | Rileva token ERC20 con una funzione la cui firma collide con DOMAIN_SEPARATOR() di EIP-2612 | Medio | Alta |
| 31 | enum-conversion | Rileva conversione pericolosa di enum | Medio | Alta |
| 32 | erc20-interface | Interfacce ERC20 errate | Medio | Alta |
| 33 | erc721-interface | Interfacce ERC721 errate | Medio | Alta |
| 34 | incorrect-equality | Uguaglianze strette pericolose | Medio | Alta |
| 35 | locked-ether | Contratti che bloccano ether | Medio | Alta |
| 36 | mapping-deletion | Eliminazione su mapping contenente una struttura | Medio | Alta |
| 37 | pyth-deprecated-functions | Rileva funzioni Pyth deprecate | Medio | Alta |
| 38 | pyth-unchecked-confidence | Rileva quando il livello di confidenza di un prezzo Pyth non viene controllato | Medio | Alta |
| 39 | pyth-unchecked-publishtime | Rileva quando il publishTime di un prezzo Pyth non viene controllato | Medio | Alta |
| 40 | shadowing-abstract | Shadowing di variabili di stato da contratti astratti | Medio | Alta |
| 41 | tautological-compare | Confrontare una variabile con sé stessa restituisce sempre vero o falso, a seconda del confronto | Medio | Alta |
| 42 | tautology | Tautologia o contraddizione | Medio | Alta |
| 43 | write-after-write | Scrittura inutilizzata | Medio | Alta |
| 44 | boolean-cst | Uso improprio di costante booleana | Medio | Media |
| 45 | chronicle-unchecked-price | Rileva quando il prezzo Chronicle non viene controllato. | Medio | Media |
| 46 | constant-function-asm | Funzioni costanti che utilizzano codice assembly | Medio | Media |
| 47 | constant-function-state | Funzioni costanti che modificano lo stato | Medio | Media |
| 48 | divide-before-multiply | Ordine impreciso delle operazioni aritmetiche | Medio | Media |
| 49 | gelato-unprotected-randomness | Chiamata a _requestRandomness all'interno di una funzione non protetta | Medio | Media |
| 50 | out-of-order-retryable | Transazioni riprovabili fuori ordine | Medio | Media |
| 51 | reentrancy-no-eth | Vulnerabilità di rientranza (senza furto di ether) | Medio | Media |
| 52 | reused-constructor | Costruttore base riutilizzato | Medio | Media |
| 53 | tx-origin | Uso pericoloso di tx.origin | Medio | Media |
| 54 | unchecked-lowlevel | Chiamate di basso livello non controllate | Medio | Media |
| 55 | unchecked-send | Send non controllato | Medio | Media |
| 56 | uninitialized-local | Variabili locali non inizializzate | Medio | Media |
| 57 | unused-return | Valori di ritorno inutilizzati | Medio | Media |
| 58 | chainlink-feed-registry | Rileva quando viene utilizzato il registro dei feed Chainlink | Basso | Alta |
| 59 | incorrect-modifier | Modificatori che possono restituire il valore predefinito | Basso | Alta |
| 60 | optimism-deprecation | Rileva quando viene utilizzato un predeploy o una funzione deprecati di Optimism. | Basso | Alta |
| 61 | shadowing-builtin | Shadowing di simboli built-in | Basso | Alta |
| 62 | shadowing-local | Shadowing di variabili locali | Basso | Alta |
| 63 | uninitialized-fptr-cst | Chiamate a puntatori di funzione non inizializzati nei costruttori | Basso | Alta |
| 64 | variable-scope | Variabili locali utilizzate prima della loro dichiarazione | Basso | Alta |
| 65 | void-cst | Costruttore chiamato non implementato | Basso | Alta |
| 66 | calls-loop | Chiamate multiple in un ciclo | Basso | Media |
| 67 | events-access | Eventi mancanti per il controllo degli accessi | Basso | Media |
| 68 | events-maths | Eventi mancanti per l'aritmetica | Basso | Media |
| 69 | incorrect-unary | Espressioni unarie pericolose | Basso | Media |
| 70 | missing-zero-check | Validazione dell'indirizzo zero mancante | Basso | Media |
| 71 | reentrancy-benign | Vulnerabilità di rientranza benigne | Basso | Media |
| 72 | reentrancy-events | Vulnerabilità di rientranza che portano a eventi fuori ordine | Basso | Media |
| 73 | return-bomb | Un chiamato di basso livello potrebbe consumare inaspettatamente tutto il gas del chiamante. | Basso | Media |
| 74 | timestamp | Uso pericoloso di block.timestamp | Basso | Media |
| 75 | assembly | Utilizzo di assembly | Informativo | Alta |
| 76 | assert-state-change | Modifica dello stato in assert | Informativo | Alta |
| 77 | boolean-equal | Confronto con costante booleana | Informativo | Alta |
| 78 | cyclomatic-complexity | Rileva funzioni con complessità ciclomatica alta (> 11) | Informativo | Alta |
| 79 | deprecated-standards | Standard Solidity deprecati | Informativo | Alta |
| 80 | erc20-indexed | Parametri di eventi ERC20 non indicizzati | Informativo | Alta |
| 81 | function-init-state | Funzione che inizializza variabili di stato | Informativo | Alta |
| 82 | incorrect-using-for | Rileva l'utilizzo dell'istruzione using-for quando nessuna funzione di una data libreria corrisponde a un dato tipo | Informativo | Alta |
| 83 | low-level-calls | Chiamate di basso livello | Informativo | Alta |
| 84 | missing-inheritance | Ereditarietà mancante | Informativo | Alta |
| 85 | naming-convention | Conformità alle convenzioni di denominazione di Solidity | Informativo | Alta |
| 86 | pragma | Se vengono utilizzate direttive pragma diverse | Informativo | Alta |
| 87 | redundant-statements | Istruzioni ridondanti | Informativo | Alta |
| 88 | solc-version | Versione di Solidity errata | Informativo | Alta |
| 89 | unimplemented-functions | Funzioni non implementate | Informativo | Alta |
| 90 | unindexed-event-address | Eventi con parametri di indirizzo ma nessun parametro indicizzato | Informativo | Alta |
| 91 | unused-state | Variabili di stato inutilizzate | Informativo | Alta |
| 92 | costly-loop | Operazioni costose in un ciclo | Informativo | Media |
| 93 | dead-code | Funzioni che non vengono utilizzate | Informativo | Media |
| 94 | reentrancy-unlimited-gas | Vulnerabilità di rientranza tramite send e transfer | Informativo | Media |
| 95 | too-many-digits | Conformità alle best practice per la notazione numerica | Informativo | Media |
| 96 | cache-array-length | Rileva cicli for che utilizzano il membro length di qualche array di storage nella condizione del ciclo e non lo modificano. | Ottimizzazione | Alta |
| 97 | constable-states | Variabili di stato che potrebbero essere dichiarate costanti | Ottimizzazione | Alta |
| 98 | external-function | Funzione pubblica che potrebbe essere dichiarata esterna | Ottimizzazione | Alta |
| 99 | immutable-states | Variabili di stato che potrebbero essere dichiarate immutabili | Ottimizzazione | Alta |
| 100 | var-read-using-this | Il contratto legge la propria variabile usando this | Ottimizzazione | Alta |
| 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 |