Lista de verificação de segurança de contratos inteligentes
Lista de verificação de desenvolvimento de contratos inteligentes
Aqui está um processo de alto nível que recomendamos seguir enquanto você escreve seus contratos inteligentes.
Verifique se há problemas de segurança conhecidos:
- Revise seus contratos com o Slither (abre em uma nova aba). Ele tem mais de 40 detectores integrados para vulnerabilidades comuns. Execute-o em cada check-in com código novo e garanta que ele obtenha um relatório limpo (ou use o modo de triagem para silenciar certos problemas).
- Revise seus contratos com o Crytic (abre em uma nova aba). Ele verifica 50 problemas que o Slither não verifica. O Crytic também pode ajudar sua equipe a se manter alinhada, revelando facilmente problemas de segurança em Pull Requests no GitHub.
Considere os recursos especiais do seu contrato:
- Seus contratos são atualizáveis? Revise seu código de capacidade de atualização em busca de falhas com
slither-check-upgradeability(abre em uma nova aba) ou Crytic (abre em uma nova aba). Documentamos 17 maneiras pelas quais as atualizações podem dar errado. - Seus contratos pretendem estar em conformidade com os ERCs? Verifique-os com
slither-check-erc(abre em uma nova aba). Esta ferramenta identifica instantaneamente desvios de seis especificações comuns. - Você se integra a tokens de terceiros? Revise nossa lista de verificação de integração de tokens antes de confiar em contratos externos.
Inspecione visualmente os recursos críticos de segurança do seu código:
- Revise o impressor inheritance-graph (abre em uma nova aba) do Slither. Evite sombreamento inadvertido e problemas de linearização C3.
- Revise o impressor function-summary (abre em uma nova aba) do Slither. Ele relata a visibilidade da função e os controles de acesso.
- Revise o impressor vars-and-auth (abre em uma nova aba) do Slither. Ele relata controles de acesso em variáveis de estado.
Documente propriedades críticas de segurança e use geradores de testes automatizados para avaliá-las:
- Aprenda a documentar propriedades de segurança para o seu código. É difícil no começo, 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 propriedades de segurança em Solidity, para uso com o Echidna (abre em uma nova aba) e o Manticore (abre em uma nova aba). Concentre-se em sua máquina de estado, controles de acesso, operações aritméticas, interações externas e conformidade com padrões.
- Defina propriedades de segurança com a API Python do Slither. Concentre-se em herança, dependências de variáveis, controles de acesso e outros problemas estruturais.
- Execute seus testes de propriedade em cada commit com o Crytic (abre em uma nova aba). O Crytic pode consumir e avaliar testes de propriedades de segurança para que todos na sua equipe possam ver facilmente que eles passam no GitHub. Testes com falha podem bloquear commits.
Por fim, esteja atento a problemas que ferramentas automatizadas não conseguem encontrar facilmente:
- Falta de privacidade: todos os outros podem ver suas transações enquanto elas estão na fila do pool
- Transações de front-running
- Operações criptográficas
- Interações arriscadas com componentes externos de finanças descentralizadas (DeFi)
Peça ajuda
O horário de atendimento do Ethereum (abre em uma nova aba) ocorre todas as terças-feiras à tarde. Essas sessões individuais de 1 hora são uma oportunidade para nos fazer qualquer pergunta que você tenha sobre segurança, solucionar problemas usando nossas ferramentas e obter feedback de especialistas sobre sua abordagem atual. Nós o ajudaremos a trabalhar com este guia.
Junte-se ao nosso Slack: Empire Hacking (abre em uma nova aba). Estamos sempre disponíveis nos canais #crytic e #ethereum se você tiver alguma dúvida.