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 vous recommandons de suivre lors de la rédaction de vos contrats intelligents.
Recherchez les vulnérabilités connues :
- Vérifiez vos contrats avec Slither(opens in a new tab). Cet outil intègre plus de 40 détecteurs pour les vulnérabilités connues. Exécutez-le à chaque enregistrement d'un nouveau code et assurez-vous que son rapport soit positif (ou utilisez le mode triage pour mettre sous silence certains problèmes).
- Vérifiez vos contrats avec Crytic(opens in a new tab). Il vérifie 50 vulnérabilités que Slither ne détecte pas. Cryptic peut également aider votre équipe à rester le maître du jeu en faisant apparaître facilement les problèmes de sécurité dans les Pull Requests sur GitHub.
Considérez les caractéristiques spéciales de votre contrat :
- Vos contrats sont-ils évolutifs ? Vérifiez votre code de mise à niveau pour les défauts 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. - Est-ce que vos contrats doivent se conformer aux ERC? Vérifiez-les avec
slither-check-erc
(opens in a new tab). Cet outil identifie instantanément les écarts de six spécifications courantes. - Avez-vous des tests unitaires dans Truffe ? Enrichissez-les avec
slither-prop
(opens in a new tab). Il génère automatiquement une suite de propriétés de sécurité robustes pour les fonctionnalités de l'ERC20 en fonction de votre code spécifique. - 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 fonctions de sécurité critiques de votre code :
- Examinez l'afficheur inheritance-graph(opens in a new tab) de Slither. Évitez les surcharges involontaires et les problèmes de linéarisation C3.
- Examinez l'afficheur résumé de fonction(opens in a new tab) de Slither. Il signale la visibilité des fonctions et les contrôles d'accès.
- Examinez l'afficheur variables et accès(opens in a new tab) de Slither. Il signale les contrôles d'accès aux variables d'état.
Documentez les propriétés critiques de sécurité 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épart, mais c'est l'activité la plus importante pour obtenir un bon résultat. C'est également un prérequis à l'utilisation des techniques avancées de ce tutoriel.
- Definissez les propriétés de sécurité en Solidity, pour les utiliser avec Echidna(opens in a new tab) et Manticore(opens in a new tab). Concentrez-vous sur votre automate, 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 des variables, les contrôles d'accès et d'autres problèmes structurels.
- Exécutez vos tests de propriété sur chaque commit avec Crytic(opens in a new tab). Crytic peut consommer et évaluer les tests de propriétés de sécurité pour que tout le monde dans votre équipe puisse facilement voir qu'ils passent sur GitHub. Les tests en échec peuvent bloquer les commits.
Enfin, soyez attentifs 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 mises en file d'attente dans le pool
- Vol de priorité des transactions
- Opérations cryptographiques
- Interactions risquées avec les composants DeFi externes
Demandez de l'aide
Les heures de bureau d'Ethereum(opens in a new tab) se déroulent tous les mardis après-midi. Ces sessions en tête à tête sont l'occasion de nous poser toutes vos questions sur la sécurité, de dépannage à l'aide de nos outils et d'obtenir des commentaires d'experts sur votre approche actuelle. Nous vous aiderons à travailler à travers 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.
Dernière modification: @sumitvekariya(opens in a new tab), 29 août 2024