WEB3DEV

Cover image for Notas do Auditor: Semantic Grep & Solidity 2.0
Isabela Curado Nehme
Isabela Curado Nehme

Posted on

Notas do Auditor: Semantic Grep & Solidity 2.0

28 de julho de 2023

https://miro.medium.com/v2/resize:fit:720/format:webp/1*RmboF2jC7NL6mP6u2GA7Hg.png

Imagem: Canva X Photomosh

Hoje, gostaríamos de continuar uma série de artigos nos quais examinaremos novas ferramentas promissoras e aprenderemos como usá-las, bem como suas vantagens e desvantagens. Entendemos e respeitamos seu tempo limitado, por isso criamos um artigo de pesquisa específico, sem nada supérfluo, só para você!

Autores: Nikita Kirillov, officercia.eth

Esta série cobrirá apenas aspectos de auditoria, recompensa de bugs (bug bounty) e hacking ético (white-hacking) que não são abordados em nenhum outro lugar. Além disso, examinaremos as regras do SemGrep para contratos inteligentes com base em explorações DeFi e as compararemos com nosso próprio conjunto de detectores Slither personalizados, Slitherin!

https://blog.pessimistic.io/slitherin-timeline-4e1289c4bf58

Em primeiro lugar, queremos expressar nossa sincera gratidão às pessoas que criaram a ferramenta SemGrep, a todos que a apoiam, à Decurity e aos autores de todos os materiais de referência! E estará disponível para vocês hoje, queridos leitores!

O SemGrep é uma ferramenta de análise estática leve para uma variedade de linguagens de programação. Ele pode detectar variantes de bug usando padrões que se assemelham ao código-fonte. Estaremos falando sobre o conjunto personalizado de regras do SemGrep da Decurity para contratos inteligentes baseados em explorações DeFi.

Terminamos nossa própria pesquisa há alguns meses. De muitas maneiras, este artigo contará com informações do artigo anterior, portanto, leia-o, se ainda não o fez:

https://blog.pessimistic.io/auditors-notes-semantic-grep-solidity-7e2bd05dba00

Dito isso, acreditamos que ninguém duvida que a base de qualquer implementação segura é uma abordagem única para escrever código. Como resultado, este artigo se concentrará apenas nos aspectos que podem ser extremamente úteis para tornar seu código seguro e protegido. Você também descobrirá uma parte bônus na conclusão deste artigo com uma grande quantidade de ótimas dicas, sugerimos fortemente que você o leia de forma independente para uma compreensão mais clara!

Portanto, abaixo você verá não um artigo típico, mas uma sistematização de conhecimento (SoK), na qual contarei com autores que eu mesmo confio neste assunto e, claro, nossos auditores da pessimistic.io.

A propósito, há algumas vagas disponíveis 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!

Semgrep para Análise de Contratos Inteligentes

A ideia de comparar as duas ferramentas não surgiu por acaso. Em um bate-papo dedicado ao desenvolvimento de Slitherin, Sam Bacha, da Manifold Finance, nos perguntou qual ferramenta é melhor. Depois disso, nos sentimos compelidos a tocar no assunto!

Portanto, neste artigo, vamos analisar apenas os aspectos mais importantes do uso do seguinte repositório:

https://github.com/Decurity/semgrep-smart-contracts

Assim, você terá que lidar com 48 regras, que dividimos grosseiramente em 3 tipos e 2 subtipos:

  • 3 Tipos: segurança, otimização de gás, melhores práticas;
  • 2 Subtipos: existem as gerais que se encaixam em qualquer base de código. Existem também algumas específicas inspiradas em ataques a protocolos;
  • Vantagens: serem atualizadas com frequência;

Como instalar/iniciar:

Observe que:

  • Os contratos devem compilar;
  • Os arquivos em .gitignore e .semgrepignore não são analisados ​​por padrão;
  • No Linux, execute com Sudo;

Aqui é onde o SemGrep pode ajudar:

  • Ele executa uma pesquisa Grep (escrevendo padrões personalizados);
  • Em essência, é semelhante à ferramenta que discutimos acima — SolGrep. A grosso modo, é o mesmo que o SolGrep, só que com padrões de criação de regras prontos (integrados).

Para iniciantes, é recomendado começar com a plataforma SemGrep Cloud, pois ela fornece uma interface visual, um projeto de demonstração, fluxos de trabalho de triagem e exploração de resultados e torna a configuração em CI/CD rápida. Nenhum código foi carregado na nuvem; as verificações ainda estão sendo feitas localmente. Você também pode usar a CLI sem fazer login e navegar na saída do terminal para executar pesquisas pontuais.

https://appsec.guide/docs/static-analysis/semgrep/advanced/

Seguindo nossa pesquisa anterior, parece que podemos usá-lo para o seguinte:

  • Para escrever vários detectores (detectores que não podem ser implementados usando uma ferramenta Slither);
  • Para realizar uma pesquisa aprofundada de construções sintáticas (você pode usar isso ao realizar uma inspeção inicial do projeto. Por exemplo, para determinar rapidamente quantas funções externas, bibliotecas e assim por diante, são usadas em um determinado projeto).

Por fim, algumas palavras sobre nossa ferramenta antiga (obsoleta), SmartCheck — que pode servir como um reforço do que acabamos de discutir. Mesmo na sua forma bruta, apresenta bons resultados e o segundo lugar no artigo da ToB, o que não é mau para uma ferramenta que deixamos de suportar há três anos. Deveria ser notado que esta é apenas mais uma ferramenta na nossa caixa de ferramentas de métodos de trabalho.

No entanto, vamos passar para o tópico de hoje e comparar as regras do SemGrep pela Decurity com nosso próprio conjunto de ferramentas de detectores personalizados — Slitherin. Recentemente, realizamos mais algumas pesquisas sobre esse assunto e chegamos a algumas conclusões interessantes. Por isso, nos próximos artigos, veremos isso também!

Semgrep VS Slitherin

Então, para o teste, pegamos as duas ferramentas e as testamos em cada um dos 22 contratos de teste do Slitherin. Em 22 contratos de teste do Slitherin, o conjunto de ferramentas do SemGrep mostrou 16 acertos em 22. As entradas foram principalmente relacionadas à otimização:

https://github.com/pessimistic-io/slitherin/tree/master/tests

No final, chegamos à conclusão de que não existem tantas regras sobrepostas com o Slither e o Slitherin e que a tecnologia de busca no SemGrep é completamente diferente. Portanto, para uma melhor análise, você deve usar as duas ferramentas, principalmente se levar em conta que é fácil e rápido — você pode aumentar significativamente seu nível de qualidade de auditoria!

É importante observar que 16 resultados positivos, neste caso, não significam que as 16 regras se sobrepõem — de forma alguma, encontramos apenas duas regras semelhantes. Com certeza vamos comparar 10.000 linhas de código do Solidity em nosso próximo artigo, porque isso exigirá muitos recursos e espaço no momento.

Você pode até querer escrever sua própria regra e, nesse caso, aqui está nosso conselho sobre como fazer isso rapidamente:

Para acrescentar, embora estejamos pessimistas sobre o uso de IA no desenvolvimento em todos os estágios (essas ferramentas não são 100% confiáveis), especialmente quando se trabalha com RegEx, o feedback inicial indica que isso pode facilitar significativamente a vida. Use esta dica para escrever suas próprias regras do SemGrep e detectores Slitherin!

A mensagem mais importante que queremos enviar a você hoje é a seguinte: ambas as ferramentas funcionam bem e permitem que você filtre bugs facilmente e personalize a pesquisa, mas são fundamentalmente diferentes em sua natureza e na maneira como o seu código é escrito. Em qualquer caso, recomendamos o uso de ambas as soluções!

Slitherin por Pessimistic.io

De qualquer forma, antes de tudo, recomendamos que você verifique nossa própria solução, uma vez que, nos últimos meses, desenvolvemos ativamente nossos próprios detectores Slither para ajudar na revisão de código e no processo de auditoria.

Mais recentemente, lançamos nossos próprios detectores e encorajamos você a usá-los para sua auditoria interna inicial, particularmente o detector de reentrância somente de leitura:

https://blog.pessimistic.io/read-only-reentrancy-in-depth-6ea7e9d78e85

Se você tiver mais dúvidas ou sugestões, entre em nosso servidor Discord ou no chat do Telegram. Esperamos vê-lo por lá, e pretendemos apoiar a comunidade e suas iniciativas.

Por favor, nos informe caso você tenha descoberto um problema/bug/vulnerabilidade por meio de nossos detectores Slither personalizados. Você pode entrar em contato conosco abrindo um PR/Issue ou diretamente, o que for mais conveniente para você!

Considerações Finais e Parte Bônus

O ponto principal que queremos deixar claro para você hoje é o seguinte: a natureza e o estilo do seu código são fundamentalmente diferentes, mas ambas as ferramentas funcionam bem e permitem que você filtre bugs rapidamente e personalize a pesquisa. Em todos os casos, aconselhamos o uso de ambas as soluções:

Esperamos que este artigo tenha sido informativo e útil para você! Obrigado por ler! A parte bônus de hoje incluirá um macete inesperado para os auditores:

Você sabia que pode utilizar o VSCode no seu iPad (de preferência com um Magic Keyboard) usando o aplicativo Blink? Se não, assista ao vídeo a seguir! Esperamos que esta dica seja útil em seu trabalho!

Que instrumentos devemos analisar a seguir? 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!

Não deixe de ler o resto da série:

https://blog.pessimistic.io/amm-automatic-market-makers-integration-tips-e42fe275e13c

A propósito, há algumas vagas disponíveis 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. Vamos entrar em contato: [email protected]!

Fique bem!

Esse artigo foi escrito por Officer’s Notes e traduzido por Isabela Curado Nehme. Seu original pode ser lido aqui.

Top comments (0)