Rejoignez-Nous sur

La mentalité de sécurité des contrats intelligents

0*uiUAd0Md0ACq7XhL

News

La mentalité de sécurité des contrats intelligents

4 principes de sécurité que chaque développeur Ethereum doit connaître, ainsi que des compromis fondamentaux.

ConsenSys

Bien que l'industrie soit en train de mûrir, le développement de contrats intelligents est encore un domaine relativement nouveau et mûr. Par conséquent, vous devez vous attendre à des changements constants dans le paysage de la sécurité, à mesure que de nouveaux bogues et risques de sécurité sont découverts et que de nouvelles meilleures pratiques sont développées. Apprendre et suivre les meilleures pratiques n'est que le début du travail de sécurité que vous devrez faire en tant que développeur de contrat intelligent.

La programmation de contrats intelligents nécessite une mentalité d'ingénierie différente de celle à laquelle vous êtes habitué. Le coût de l'échec peut être élevé et le changement peut être difficile, ce qui le rend à certains égards plus semblable à la programmation matérielle ou à la programmation des services financiers qu'au développement Web ou mobile. Il ne suffit donc pas de se défendre contre des vulnérabilités connues. Au lieu de cela, vous devrez apprendre une nouvelle philosophie de développement.

Tout contrat non trivial comportera des erreurs. Votre code doit donc pouvoir répondre avec élégance aux bogues et aux vulnérabilités.

  • Mettez le contrat en pause lorsque les choses tournent mal («disjoncteur»).
  • Gérez le montant d'argent à risque (limitation de taux, utilisation maximale).
  • Avoir un chemin de mise à niveau efficace pour les corrections de bugs et les améliorations.

Il est toujours préférable d'attraper les bogues avant une version de production complète.

  • Testez les contrats à fond et ajoutez des tests chaque fois que de nouveaux vecteurs d'attaque sont découverts.
  • Fournir primes de bogue à partir des versions alpha testnet.
  • Déploiement par phases, avec une utilisation et des tests croissants dans chaque phase.

La complexité augmente la probabilité d'erreurs.

  • Assurez-vous que la logique du contrat est simple.
  • Modularisez le code pour réduire les contrats et les fonctions.
  • Utilisez des outils ou du code déjà écrits dans la mesure du possible (par exemple, ne lancez pas votre propre générateur de nombres aléatoires).
  • Préférez la clarté à la performance autant que possible.
  • N'utilisez la blockchain que pour les parties de votre système qui nécessitent une décentralisation.

Gardez une trace des nouveaux développements en matière de sécurité.

  • Vérifiez vos contrats pour tout nouveau bogue dès qu'il est découvert.
  • Mettez à niveau vers la dernière version de n'importe quel outil ou bibliothèque dès que possible.
  • Adoptez de nouvelles techniques de sécurité qui vous semblent utiles.

Bien qu'une grande partie de votre expérience en programmation soit pertinente pour la programmation Ethereum, il y a quelques pièges à connaître.

  • Soyez extrêmement prudent sur les appels de contrats externes, qui peuvent exécuter du code malveillant et modifier le flux de contrôle.
  • Comprenez que vos fonctions publiques sont publiques et peuvent être appelées par malveillance et dans n'importe quel ordre. Les données privées des contrats intelligents sont également visibles par tous.
  • Gardez à l'esprit les coûts du gaz et la limite de bloc de gaz.
  • Sachez que les horodatages sont imprécis sur une blockchain: les mineurs peuvent influencer le temps d'exécution d'une transaction en quelques secondes.
  • L'aléatoire n'est pas trivial sur la blockchain, la plupart des approches de génération de nombres aléatoires sont jouables sur une blockchain.

Il y a plusieurs compromis fondamentaux à considérer lors de l'évaluation de la structure et de la sécurité d'un système de contrat intelligent. La recommandation générale pour tout système de contrat intelligent est d'identifier le bon équilibre pour ces compromis fondamentaux.

Un système de contrat intelligent idéal à partir d'un biais d'ingénierie logicielle est modulaire, réutilise le code au lieu de le dupliquer et prend en charge les composants évolutifs. Un système de contrat intelligent idéal issu d'une architecture sécurisée peut partager cet état d'esprit, en particulier dans le cas de systèmes de contrat intelligent plus complexes.

Cependant, il existe des exceptions importantes où les meilleures pratiques en matière de sécurité et d'ingénierie logicielle peuvent ne pas être alignées. Dans chaque cas, le bon équilibre est obtenu en identifiant la combinaison optimale de propriétés le long des dimensions du système de contrat telles que:

  • Rigide vs évolutif
  • Monolithique vs modulaire
  • Duplication vs réutilisation

Bien que plusieurs ressources, dont celle-ci, mettent l'accent sur les caractéristiques de malléabilité telles que les modèles tuables, évolutifs ou modifiables, il existe un compromis fondamental entre malléabilité et sécurité.

Les modèles de malléabilité ajoutent par définition de la complexité et des surfaces d'attaque potentielles. La simplicité est particulièrement efficace sur la complexité dans les cas où le système de contrat intelligent exécute un ensemble très limité de fonctionnalités pendant une période de temps prédéfinie, par exemple, un système de contrat de vente de jetons à durée limitée et sans gouvernance.

Un contrat autonome monolithique conserve toutes les connaissances identifiables et lisibles localement. Bien qu'il existe peu de systèmes de contrats intelligents tenus en haute estime qui existent en tant que monolithes, il y a un argument à faire pour l'extrême localité des données et des flux, par exemple, dans le cas de l'optimisation de l'efficacité de l'examen du code.

Comme pour les autres compromis considérés ici, les meilleures pratiques de sécurité s'éloignent des meilleures pratiques de génie logiciel dans les contrats simples de courte durée et s'orientent vers les meilleures pratiques de génie logiciel dans le cas de systèmes de contrats perpétuels plus complexes.

Un système de contrat intelligent du point de vue de l'ingénierie logicielle souhaite maximiser la réutilisation lorsque cela est raisonnable. Il existe de nombreuses façons de réutiliser le code de contrat dans Solidity. Utilisation de contrats éprouvés précédemment déployés que vous possédez est généralement le moyen le plus sûr pour réutiliser le code.

La duplication est fréquemment invoquée dans les cas où les contrats auto-détenus précédemment déployés ne sont pas disponibles. Des efforts tels que Bibliothèque Solidity d'OpenZeppelin chercher à fournir des modèles tels que le code sécurisé puisse être réutilisé sans duplication. Toute analyse de la sécurité des contrats doit inclure tout code réutilisé qui n'a pas précédemment établi un niveau de confiance proportionné aux fonds à risque dans le système de contrat intelligent cible.

Construire et lancer des applications sur Ethereum est sans doute la frontière la plus excitante pour les ingénieurs logiciels aujourd'hui, mais cela nécessite une modélisation continue des menaces, un audit de sécurité et une planification de la réponse aux incidents.

le ConsenSys Diligence est là pour vous aider à rester vigilant et à renforcer la confiance dans vos déploiements.

Nos critiques d'une journée vous aident à intégrer la sécurité dans votre code de chaîne de blocs dès le début afin que vous puissiez économiser du temps et de l'argent à long terme.



Traduction de l’article de ConsenSys :
Article Original

BlockBlog

Le Meilleur de l'Actualité Blockchain Francophone & Internationale | News, Guides, Avis & Tutoriels pour s'informer et démarrer facilement avec Bitcoin, les Crypto-Monnaies et le Blockchain. En Savoir Plus sur L'Équipe BlockBlog

Commenter cet Article

Commenter cet Article

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Plus dans News

Les Plus Populaires

Acheter des Bitcoin

Acheter des Alt-Coins

Sécuriser vos Cryptos

Vêtements et Produits Dérivés

Top