Slither: A Cornucópia de um Auditor
Saudações, queridos leitores! Hoje gostaríamos de iniciar uma série de artigos sobre o que chamamos de metodologia de auditoria. Em primeiro lugar, queremos dizer que nesta série vamos nos concentrar apenas nos aspectos que podem ser realmente úteis para auditoria e hacking de bug bounty e que não são descritos em nenhum lugar.
Podemos dizer com segurança que essas dicas podem ser lidas publicamente em alguns lugares, e nosso blog é um desses lugares! Siga -nos agora mesmo para não perder o novo artigo e vamos começar!
Em seu trabalho, os auditores usam diferentes ferramentas e métodos – existem muitos deles. Basta olhar para esta seleção e separadamente para esta ferramenta ultra-específica ; não há dúvida de que existem muitos deles. De acordo com esta pesquisa , um maior grau de colaboração (por exemplo, para esforços de manutenção) é observado entre os usuários nas ferramentas do que nos repositórios do aplicativo, mas existem algumas ferramentas que são uma espécie de padrão-ouro — vamos discuti-las primeiro — ou seja, sobre Slither, SmartCheck e discutir separadamente fuzzing com Echidna.
Primeiramente, algumas palavras sobre nossa ferramenta, o SmartCheck — que pode servir de reforço ao que falaremos a seguir. Mesmo em sua forma bruta, mostra bons resultados, e o segundo lugar no artigo do ToB não é ruim para uma ferramenta que paramos de oferecer suporte há três anos. Faremos uma comparação de desempenho separada das duas ferramentas no futuro. No entanto, vamos passar para Slither.
Contamos com o Slither — uma ferramenta de análise estática da Trail of Bits para manter a qualidade de nossas auditorias. Considerando a facilidade de uso, é uma boa ideia experimentá-lo.
Além de suas excelentes capacidades de análise, também inclui um monte de impressoras que resumem diferentes aspectos do contrato de forma digerível. Pode-se usá-los para construir rapidamente um modelo de contrato mental antes de mergulhar profundamente no código.
Usando impressoras, pode-se obter um resumo do contrato, verificar a herança e o layout de armazenamento do contrato e ver os modificadores utilizados e as verificações implementadas. Além disso, algumas impressoras podem imprimir no formato *.dot, para que você possa ver o gráfico corretamente. No entanto, várias impressoras perdem seu valor para projetos mais complexos, pois sua saída se torna incontrolável.
Outra coisa interessante é que ele possui uma API Python que permite a instrumentação do mecanismo de análise estática. Isso significa que o mecanismo pode ser usado para derivar informações específicas de contratos automaticamente e, em geral, pode ser usado para atender às necessidades do usuário. Você também pode explorar abordagens de aprendizado de máquina (ML) para melhorar automaticamente o desempenho do Slither via Slither-simil !
É por isso que obtemos seus resultados em todos os projetos. Voltando ao que estávamos falando - queremos tornar este artigo útil principalmente para quem deseja iniciar uma jornada na segurança do Web3.o, então abaixo você verá uma espécie de lista de dicas com as quais você pode obter resultados surpreendentes em seu negócio!
❕ Importante:
- Muito poucos desenvolvedores seguem rigorosamente os padrões de segurança de acordo com este estudo , e isso não pode deixar de ser alarmante.
- É por isso que você nunca deve esquecer a segurança ao preparar seu local de trabalho - nossos funcionários cumprem claramente as regras (2) (3) e, portanto, nenhum acidente ocorre.
- O Slither não oferece suporte a alguns recursos do Solidity usados com menos frequência e pode falhar mesmo em um contrato de alta qualidade. Recomendamos ajustar as linhas problemáticas até que a ferramenta funcione corretamente. Observe que isso pode afetar a saída se os números das linhas mudarem. Em nossa experiência, Slither fornece valor suficiente para aceitar essas restrições de estilo de código.
1. Make sure there is a python version 3.6+
python3 --version
2. Install Slither via pip:
pip3 install slither-analyzer
3. Make sure you are using the latest version of Slither before you run it. You can check the slither repository on github for release versions.
slither --version
- github.com/crytic/slither#how-to-install
set up a new environment: python3 -m venv /path/to/venv
activate the environment: source /path/to/venv/bin/activate
Normalmente, executamos o Slither em todos os arquivos do projeto (exceto dependências npm) e salvamos os resultados em json, que é então convertido em uma tabela csv. Para fazer isso na raiz do projeto, execute:
slither . –-filter-path “node_modules” --json result.json
Other examples:
- slither .
- slither path/to/my_contract.sol
- slither . --exclude-informational
- O Slither não é executado em um arquivo separado que tenha importações de ambiente de desenvolvimento (por exemplo, trufas, importações de módulo npm de capacete de segurança ou importações de brownie pm). Nesse caso, você precisa resolver manualmente as dependências — você precisa corrigir as importações para caminhos absolutos ou relativos no arquivo de destino.
- No caso das dependências do pacote brownie, vale a pena instalar o mesmo módulo via npm e resolver as dependências conforme descrito acima. Não use o clone brownie pm, pois às vezes não inclui alguns arquivos.
- Você pode adicionar um arquivo slither.config.json para filtrar arquivos ou excluir determinados detectores. Consulte a documentação do Slither para obter uma lista de detectores ou assista a este bom e velho vídeo e a este tutorial.
- Executar em cada arquivo separadamente. Muito provavelmente, o problema não estará em todos os arquivos.
- Encontre um problema semelhante em problemas de deslizamento e aplique uma solução, se houver. “Upvote” é um problema (você pode colocar um emoji nele) se não for resolvido, para chamar a atenção dos desenvolvedores.
Os plug-ins são um dos aspectos mais importantes da configuração e execução adequadas do Slither porque aumentam significativamente a funcionalidade. Além disso, lembre-se de que é a maneira mais conveniente de adicionar seus próprios detectores. Abaixo estão as noções básicas de como trabalhar com eles. Tente entender a analogia do trabalho e construa sua própria metodologia com base nisso.
A) Guia do plug-in de verificações de capacidade de atualização :
B) Verifique o guia do plug-in ERC :
Execute se quiser verificar se o contrato está em conformidade com um dos EIP especificados:
- EIP20
- EIP223
- EIP777
- EIP721
- EIP165
- EIP1155
- EIP1820
- Se “ Contrato não encontrado: nome. ” — você precisa renomear o contrato para que o nome no projeto seja exclusivo.
- Você pode adicionar um arquivo slither.config.json para filtrar arquivos ou excluir determinados detectores. Consulte a documentação do slither para obter uma lista de detectores.
slither-read-storagerecupera slots de armazenamento do código-fonte usando informações da análise de tipo subjacente do Slither (por exemplo, se uma matriz é fixa ou dinâmica) para informar os cálculos de slot. A ferramenta pode recuperar o(s) slot(s) de armazenamento de uma única variável ou de contratos inteiros, e os valores de armazenamento podem ser recuperados fornecendo um Ethereum RPC.
Confira:
- blog.trailofbits.com/2022/07/28/shedding-smart-contract-storage-with-slither
- 0xalpharush.github.io/slithering-through-the-dark-forest
Exemplo de comando:
slither-read-storage Privacy.sol 0xFdaF948A66903a0050ed051508c7C26D137E76C4 --variable-name data --rpc-url https://rinkeby.infura.io/v3/{project-id}
IV. Conclusão
Concluindo, gostaríamos de dizer que esperamos que este artigo tenha sido informativo e útil para você! Em artigos futuros, escreveremos sobre como nossos favoritos SmartCheck e Slither diferem - as diferenças são bastante significativas!
A coisa mais importante que queríamos dizer e mostrar é que um instrumento novo não significa bom e um instrumento antigo não significa mau. É saber usar e estar disposto a buscar algo novo. Espero que tenhamos interessado nisso.
Que instrumentos devemos rever? Sobre o que você estaria interessado em ler? Por favor, deixe seus comentários, ficaremos felizes em respondê-los, e as melhores respostas e perguntas podem ser incluídas no próximo artigo!
A propósito, há algumas vagas agora, portanto, se o seu projeto precisar de uma auditoria - sinta-se à vontade para nos escrever , visite nossa página de relatórios públicos aqui .





































![O que é uma lista vinculada, afinal? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)