
Analisador Estático para Solidity e Vyper
Junte-se ao Slack do Empire Hacking
- Discussões e Suporte
Slither é um framework de análise estática para Solidity e Vyper escrito em Python3. Ele executa um conjunto de detectores de vulnerabilidades, exibe informações visuais sobre detalhes dos contratos e fornece uma API para escrever análises personalizadas facilmente. Slither permite que desenvolvedores encontrem vulnerabilidades, melhorem sua compreensão do código e criem protótipos rapidamente de análises personalizadas.
Execute o Slither em uma aplicação Hardhat/Foundry/Dapp/Brownie:```console slither .
Esta é a opção preferida se o seu projeto possui dependências, já que o Slither depende da estrutura de compilação subjacente para compilar o código-fonte.
No entanto, você pode executar o Slither em um único arquivo que não importa dependências:```console
slither tests/uninitialized.sol
Nota O Slither requer Python 3.10+. Se você não for usar um dos frameworks de compilação suportados, precisará do solc, o compilador Solidity; recomendamos usar o solc-select para alternar convenientemente entre versões do solc.
O uv é um gerenciador de pacotes Python rápido, 10 a 100 vezes mais rápido que o pip.```console
curl -LsSf https://astral.sh/uv/install.sh | sh
uv tool install slither-analyzer
uvx --from slither-analyzer slither
Para atualizar:```console
uv tool upgrade slither-analyzer
python3 -m pip install slither-analyzer
Para atualizar:```console
python3 -m pip install --upgrade slither-analyzer
brew install slither-analyzer
### Usando Git (Desenvolvimento)```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>
A flag -e instala em modo editável, o que significa que as alterações no código-fonte são refletidas imediatamente sem necessidade de reinstalação.
Use a imagem docker eth-security-toolbox. Ela inclui todas as nossas ferramentas de segurança e todas as principais versões do Solidity em uma única imagem. /home/share será montado em /share no contêiner.```bash
docker pull trailofbits/eth-security-toolbox
Para compartilhar um diretório no contêiner:```bash
docker run -it -v /home/share:/share trailofbits/eth-security-toolbox
$GIT_TAG pela tag real) ```YAML
slither [target] --checklist.slither [target] --checklist --markdown-root https://github.com/ORG/REPO/blob/COMMIT/ (substitua ORG, REPO, COMMIT)Para mais informações, veja
human-summary: Imprime um resumo legível por humanos dos contratosinheritance-graph: Exporta o gráfico de herança de cada contrato para um arquivo dotcontract-summary: Imprime um resumo dos contratosloc: Conta o número total de linhas de código (LOC), linhas de código fonte (SLOC) e linhas de código de comentário (CLOC) encontradas em arquivos fonte (SRC), dependências (DEP) e arquivos de teste (TEST).entry-points: Imprime todas as funções de ponto de entrada que alteram estado e suas variáveis dos contratoscall-graph: Exportar o grafo de chamadas dos contratos para um arquivo dotcfg: Exportar o CFG de cada funçãofunction-summary: Imprimir um resumo das funçõesvars-and-auth: Imprimir as variáveis de estado escritas e a autorização das funçõesnot-pausable: Imprimir funções que não usam o modificador whenNotPaused.Para executar um printer, use --print e uma lista separada por vírgulas de printers.
Consulte a Documentação do Printer para obter as listas completas.
slither-check-upgradeability: Revisar a atualizabilidade baseada em delegatecallslither-prop: Geração automática de testes unitários e propriedadesslither-flat: Achatar uma base de códigoslither-check-erc: Verificar a conformidade com os ERCsslither-read-storage: Ler valores de armazenamento de contratosslither-interface: Gerar uma interface para um contratoConsulte a Documentação de Ferramentas para ferramentas adicionais.
Entre em contato conosco para obter ajuda na construção de ferramentas personalizadas.
A documentação sobre os detalhes internos do Slither está disponível aqui.
Sinta-se à vontade para passar em nosso canal no Slack (#ethereum) para obter ajuda no uso ou na extensão do Slither.
A Documentação do Printer descreve as informações que o Slither é capaz de visualizar para cada contrato.
A Documentação do Detector descreve como escrever uma nova análise de vulnerabilidade.
A Documentação da API descreve os métodos e objetos disponíveis para análises personalizadas.
A Documentação do SlithIR descreve a representação intermediária SlithIR.
Como excluir mocks ou testes?
Como corrigir "arquivo desconhecido" ou problemas de compilação?
slither contract.sol falhará.
Em vez disso, use slither . no diretório pai de contracts/ (você deve ver contracts/ ao executar ls).
Se você tiver uma pasta node_modules/, ela deve estar no mesmo diretório que contracts/. Para verificar se esse problema está relacionado ao slither,
execute o comando de compilação do framework que você está usando, por exemplo, npx hardhat compile. Isso deve funcionar com sucesso;
caso contrário, o motor de compilação do slither, crytic-compile, não conseguirá gerar a AST.O Slither é licenciado e distribuído sob a licença AGPLv3. Entre em contato conosco se estiver procurando uma exceção aos termos.
Se você estiver usando o Slither em um trabalho acadêmico, considere se candidatar ao Prêmio de Pesquisa Crytic de $10k.
| Num | Detector | O que Detecta | Impacto | Confiança |
|---|
| Título | Uso | Autores | Evento | Código |
|---|
| ReJection: A AST-Based Reentrancy Vulnerability Detection Method | Análise baseada em AST construída sobre o 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 | Aproveitar a dependência de dados através do Slither | William Zhang, Sebastian Banescu, Leodardo Pasos, Steven Stewart, Vijay Ganesh | ISSRE 2019 | MPro |
| ETHPLOIT: From Fuzzing to Efficient Exploit Generation against Smart Contracts | Aproveitar a dependência de dados através do Slither | Qingzhao Zhang, Yizhuo Wang, Juanru Li, Siqi Ma | SANER 20 | - |
| Verification of Ethereum Smart Contracts: A Model Checking Approach | Execução simbólica construída sobre o CFG do Slither | Tam Bang, Hoang H Nguyen, Dung Nguyen, Toan Trieu, Tho Quan | IJMLC 20 | - |
| Smart Contract Repair | Utilizar os detectores de vulnerabilidades do Slither | Xiao Liang Yu, Omar Al-Bataineh, David Lo, Abhik Roychoudhury | TOSEM 20 | SCRepair |
| Demystifying Loops in Smart Contracts | Aproveitar a dependência de dados através do Slither | Ben Mariano, Yanju Chen, Yu Feng, Shuvendu Lahiri, Isil Dillig | ASE 20 | - |
| Trace-Based Dynamic Gas Estimation of Loops in Smart Contracts | Usar o CFG do Slither para detectar loops | 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 | Utilizar o SlithIR para construir um gráfico de dependência de armazenamento | 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 | Usar o Slither como frontend para construir um sistema de tipos de refinamento | 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 | Usar o Slither para extrair características dos 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 | Usar o Slither para extrair o CFG e o grafo de chamadas | 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 | Usar o Slither para extrair o CFG e dependências de dados | 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 | Estender as dependências de dados do 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 | Usar o Slither para extrair o 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 | Usar o Slither para extrair as características do código (CFG, função, tipos de parâmetros, ..) | 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 | Usar o Slither para construir gráficos de acesso a estado | Xiaodong Qi, Jiao Jiao, Yi Li | International Conference on Distributed Computing Systems (ICDCS), 2023 | - |
| Bad Apples: Understanding the Centralized Security Risks in Decentralized Ecosystems | Implementar uma análise interna sobre o Slither | Kailun Yan , Jilian Zhang , Xiangyu Liu , Wenrui Diao , Shanqing Guo | ACM Web Conference April 2023 | - |
| Identifying Vulnerabilities in Smart Contracts using Interval Analysis | Criar 4 detectores sobre o Slither | Ştefan-Claudiu Susan, Andrei Arusoaie | FROM 2023 | - |
| Storage State Analysis and Extraction of Ethereum Blockchain Smart Contracts (sem PDF em acesso aberto) | Utilizar o CFG e a AST do Slither | Maha Ayub , Tania Saleem , Muhammad Janjua , Talha Ahmad | TOSEM 2023 | SmartMuv |