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 :
- Examinez 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).
- Examinez 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 ? Examinez votre code de mise à niveau pour y déceler des 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. - 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. - Intégrez-vous des jetons tiers ? Examinez notre liste de contrôle d'intégration de jetons avant de dépendre de contrats externes.
Inspectez visuellement les fonctions de sécurité critiques de votre code :
- Examinez l'imprimante inheritance-graph (opens in a new tab) de Slither. Évitez les surcharges involontaires et les problèmes de linéarisation C3.
- Examinez l'imprimante function-summary (opens in a new tab) de Slither. Il 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. 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.
- 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 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 permanence Ethereum (opens in a new tab) ont lieu 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 mise à jour de la page : 7 février 2025