Liste de contrôle de sécurité des contrats intelligents
Liste de contrôle pour le développement de contrats intelligents
Voici un processus de haut niveau que nous recommandons de suivre lors de la rédaction de vos contrats intelligents.
Vérifiez les problèmes de sécurité connus :
- Révisez vos contrats avec Slither (opens in a new tab). Il possède plus de 40 détecteurs intégrés pour les vulnérabilités courantes. Exécutez-le à chaque validation de nouveau code et assurez-vous d'obtenir un rapport vierge (ou utilisez le mode triage pour ignorer certains problèmes).
- Révisez vos contrats avec Crytic (opens in a new tab). Il vérifie 50 problèmes que Slither ne détecte pas. Crytic peut également aider votre équipe à rester synchronisée, en mettant facilement en évidence les problèmes de sécurité dans les Pull Requests sur GitHub.
Prenez en compte les fonctionnalités spécifiques de votre contrat :
- Vos contrats sont-ils évolutifs ? Révisez votre code de mise à niveau pour détecter les failles avec
slither-check-upgradeability(opens in a new tab) ou Crytic (opens in a new tab). Nous avons documenté 17 façons dont les mises à niveau peuvent mal tourner. - Vos contrats prétendent-ils être conformes aux normes ERC ? Vérifiez-les avec
slither-check-erc(opens in a new tab). Cet outil identifie instantanément les écarts par rapport à six spécifications courantes. - Intégrez-vous des jetons tiers ? Consultez notre liste de contrôle d'intégration de jetons avant de vous fier à des contrats externes.
Inspectez visuellement les fonctionnalités de sécurité critiques de votre code :
- Examinez l'imprimante inheritance-graph (opens in a new tab) de Slither. Évitez les problèmes de masquage (shadowing) par inadvertance et de linéarisation C3.
- Examinez l'imprimante function-summary (opens in a new tab) de Slither. Elle signale la visibilité des fonctions et les contrôles d'accès.
- Examinez l'imprimante vars-and-auth (opens in a new tab) de Slither. Elle signale les contrôles d'accès sur les variables d'état.
Documentez les propriétés de sécurité critiques et utilisez des générateurs de tests automatisés pour les évaluer :
- Apprenez à documenter les propriétés de sécurité de votre code. C'est difficile au début, mais c'est l'activité la plus importante pour obtenir un bon résultat. C'est également une condition préalable à l'utilisation de l'une des techniques avancées de ce tutoriel.
- Définissez les propriétés de sécurité dans Solidity, pour les utiliser avec Echidna (opens in a new tab) et Manticore (opens in a new tab). Concentrez-vous sur votre machine d'état, les contrôles d'accès, les opérations arithmétiques, les interactions externes et la conformité aux normes.
- Définissez les propriétés de sécurité avec l'API Python de Slither. Concentrez-vous sur l'héritage, les dépendances de variables, les contrôles d'accès et d'autres problèmes structurels.
- Exécutez vos tests de propriétés à chaque commit avec Crytic (opens in a new tab). Crytic peut consommer et évaluer les tests de propriétés de sécurité afin que tous les membres de votre équipe puissent facilement voir qu'ils réussissent sur GitHub. Les tests qui échouent peuvent bloquer les commits.
Enfin, soyez attentif aux problèmes que les outils automatisés ne peuvent pas facilement trouver :
- Manque de confidentialité : tout le monde peut voir vos transactions pendant qu'elles sont en attente dans le pool
- Transactions de type front-running
- Opérations cryptographiques
- Interactions risquées avec des composants externes de la finance décentralisée (DeFi)
Demander de l'aide
Les heures de permanence d'Ethereum (opens in a new tab) ont lieu tous les mardis après-midi. Ces sessions individuelles d'une heure sont l'occasion de nous poser toutes vos questions sur la sécurité, de résoudre des problèmes à l'aide de nos outils et d'obtenir les commentaires d'experts sur votre approche actuelle. Nous vous aiderons à parcourir ce guide.
Rejoignez notre Slack : Empire Hacking (opens in a new tab). Nous sommes toujours disponibles dans les canaux #crytic et #ethereum si vous avez des questions.