Checklist de segurança para smart contracts
Processo de desenvolvimento do 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:
- Reveja seus contratos com o 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).
- Reveja seus contratos com o 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? Verifique se há defeitos em seu código de capacidade de atualização com o
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 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 tokens antes de confiar em contratos externos.
Visualmente inspecione recursos críticos de segurança com seu código:
- Analise o printer inheritance-graph(opens in a new tab) do Slither. Evite problemas de linearização de sombras e C3 involuntários.
- Analise o printer inheritance-graph(opens in a new tab) do Slither. Reporta a visibilidade da função e os controles de acesso.
- Analise o printer 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 com as propriedades de segurança de documentos 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 no Solidity, para usar 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 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
Pedir ajuda
Horário de escritório Ethereum(opens in a new tab) executa todas as terças da 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 edição: @sumitvekariya(opens in a new tab), 29 de agosto de 2024