Checklist de segurança para smart contracts
Lista de verificação de desenvolvimento de contrato inteligente
Aqui temos um processo de alto nível que recomendamos seguir enquanto você escreve seus contratos inteligentes.
Verificar problemas de segurança conhecidos:
- Revise seus contratos com Slither (opens in a new tab). Tem mais de 40 detectores internos para vulnerabilidades comuns. Execute em cada check-in com um novo código e certifique-se de que ele recebe um relatório limpo (ou use o modo de triagem para silenciar certos problemas).
- Revise seus contratos com Crytic (opens in a new tab). Ele verifica 50 problemas que o Slither não tem. O Crytic também pode ajudar sua equipe a se manter atualizada, resolvendo problemas de segurança facilmente nas solicitações de pull no GitHub.
Considere as características especiais do seu contrato:
- Os seus contratos são atualizáveis? Revise seu código de capacidade de atualização em busca de falhas com
slither-check-upgradeability(opens in a new tab) ou Crytic (opens in a new tab). Documentamos 17 situações em que as atualizações podem correr mal. - Seus contratos pretendem estar em conformidade com os ERCs? Verifique-os com
slither-check-erc(opens in a new tab). Esta ferramenta identifica instantaneamente desvios de seis especificações comuns. - Você faz integrações com tokens de outras empresas? Revise nossa lista de verificação de integração de token antes de depender de contratos externos.
Visualmente inspecione recursos críticos de segurança com seu código:
- Revise o impressor inheritance-graph (opens in a new tab) do Slither. Evite problemas de linearização de sombras e C3 involuntários.
- Revise o impressor function-summary (opens in a new tab) do Slither. Reporta a visibilidade da função e os controles de acesso.
- Revise o impressor vars-and-auth (opens in a new tab) do Slither. Ele relata os controles de acesso às variáveis de estado.
Propriedades de segurança críticas do documento e use geradores de testes automatizados para avaliá-las:
- Aprenda a documentar as propriedades de segurança para o seu código. É difícil no início, mas é a atividade mais importante para alcançar um bom resultado. Também é um pré-requisito para usar qualquer uma das técnicas avançadas neste tutorial.
- Defina as propriedades de segurança em Solidity para uso com Echidna (opens in a new tab) e Manticore (opens in a new tab). Concentre-se na sua máquina do estado, controles de acesso, operações aritméticas, interações externas e padrões de conformidade.
- Defina as propriedades de segurança com a API Python do Slither. Concentre-se na herança, nas dependências variáveis, nos controles de acesso e em outras questões estruturais.
- Execute seus testes de propriedade em cada commit com Crytic (opens in a new tab). Critica pode consumir e avaliar testes de propriedade de segurança para que todos na sua equipe possam facilmente ver que eles passam no GitHub. Os testes que falharam podem bloquear os commits.
Finalmente, esteja atento a questões que as ferramentas automatizadas não conseguem facilmente encontrar:
- Falta de privacidade: todos os outros podem ver suas transações enquanto são enfileiradas no pool
- Transações principais em execução
- Operações criptográficas
- Interações arriscadas com componentes externos de DeFi
Peça ajuda
Os horários de expediente do Ethereum (opens in a new tab) acontecem toda terça-feira à tarde. Essas sessões presenciais de uma hora são uma oportunidade para você nos fazer quaisquer perguntas que sobre segurança, solucionar problemas usando nossas ferramentas e obter comentários de especialistas sobre sua abordagem atual. Vamos ajudá-lo a trabalhar neste guia.
Junte-se ao nosso Slack: Empire Hacking (opens in a new tab). Sempre estaremos disponíveis nos canais #crytic e #ethereum caso tenha alguma dúvida.
Última atualização da página: 7 de fevereiro de 2025