
Auteur: Jagjit Singh, Cointelegraph;
1. Vulnérabilités potentielles dans les contrats intelligents
Bien que les contrats intelligents soient révolutionnaires, ils ne sont pas à l’abri des défauts que les parties malveillantes peuvent exploiter.
Une vérification inadéquate des entrées est une faiblesse commune, permettant à un attaquant d’influencer l’exécution d’un contrat en fournissant une entrée inattendue.De plus, une mauvaise application de la logique métier peut créer un comportement inattendu ou des lacunes logiques dans le contrat, ce qui entraîne des vulnérabilités.De plus, les appels externes dangereux (tels que les appels impliquant des interfaces avec des sources de données externes ou d’autres contrats) peuvent créer des vulnérabilités si elles sont traitées mal.
Une attaque de rentrée est une faiblesse qui se produit lorsqu’un contrat appelle un autre contrat de l’extérieur avant de terminer son propre changement d’État.Cela permet au contrat appelé de rentrer dans le contrat d’appel et peut effectuer à nouveau certaines de ses opérations.Cela peut conduire à un comportement inattendu et permettre à un attaquant de modifier l’état du contrat, qui peut drainer les fonds ou avoir d’autres effets négatifs.
Compte tenu de la possibilité de telles attaques, les développeurs devraient également faire preuve de prudence lors de l’utilisation de contrats externes ou de sources de données pour s’assurer que les appels externes sont correctement traités pour éviter un comportement et des vulnérabilités inattendus.Ils peuvent aider à protéger les contrats intelligents contre les menaces en constante évolution en gardant un œil attentif sur des programmes de sécurité tels que les tests de contrat intelligents.
2. Qu’est-ce qu’une attaque de rentrée dans un contrat intelligent?
Dans un contrat intelligent, une attaque de rentrée se produit lorsqu’un contrat appelle un autre contrat ou fonction de l’extérieur avant de terminer son propre changement d’État.
Cela permet au contrat appelé de rentrer dans le contrat d’appel et peut effectuer à nouveau une partie de ses opérations, ce qui peut conduire à un comportement malveillant imprévu et fréquent.Par exemple, contractez un contrat d’appels B pour envoyer des fonds, puis modifier son propre statut.
Le code de contrat B peut contenir une fonction de rappel qui lui permet de réintégrer le contrat A et peut réexécuter la fonction de transfert avant le contrat A terminer son changement d’état.Cela permettra à l’attaquant d’obtenir des fonds à partir du contrat plusieurs fois avant de terminer la transaction initiale.
L’organisation autonome décentralisée de 2016 (DAO) pirater sur la blockchain Ethereum est un autre exemple bien connu.L’attaquant a profité des défauts de rentrée dans le code du contrat intelligent pour supprimer récursivement les fonds du DAO, ce qui a finalement conduit aux millions de dollars volés en Ethereum (ETH).
En outre, plusieurs protocoles de financement décentralisés (DEFI), notamment uniswap, lindf.me, burgerswap, chirurgnb, financement crème et protocole de sirène ont subi des pertes financières importantes en raison de vulnérabilités de réentrabilité.Ces violations ont entraîné des pertes de 3,5 millions de dollars à 25 millions de dollars, mettant en évidence la menace continue posée par des vulnérabilités réentrantes dans le secteur Defi.
3. Comment réintégrer le travail des attaques
Les attaques de retour utilisent l’exécution séquentielle des fonctions de contrat intelligentes et des appels externes pour former une boucle où un attaquant peut exécuter des fonctions spécifiques plusieurs fois avant l’achèvement, ce qui peut conduire à un comportement malveillant et à un retrait non autorisé de fonds.
Le contrat de l’attaquant « escroc » le rappel du contrat de la victime au contrat de l’attaquant avant que la victime ne termine la modification du statut.Cette action peut entraîner des retraits répétés ou une autre négligence.
L’image ci-dessus montre une attaque de rentrée contre les contrats intelligents.Le contrat de l’attaquant appelle la fonction « retrait () » de la victime, qui envoie Ethereum avant de mettre à jour le solde.La fonction de secours de l’attaquant est ensuite licenciée et appelle à nouveau RETRAT () pour épuiser les fonds du contrat de la victime.Cette attaque exploite la situation où la victime n’a pas mis à jour le solde avant d’envoyer les fonds.
Utilisons un exemple simplifié pour décomposer le fonctionnement des attaques de rentrée:
Contrat intelligent avec la fonction « retrait »
Supposons qu’il existe un contrat intelligent du portefeuille numérique qui permet aux utilisateurs de retirer des fonds.En plus de suivre les soldes des utilisateurs, le contrat a également une fonction de retrait pour faciliter le retrait des fonds.La fonction de retrait permet généralement aux utilisateurs de retirer leurs jetons ou d’Ethereum des contrats intelligents à leur portefeuille personnel.
Interaction utilisateur et exécution de la fonction
L’utilisateur demande le retrait du portefeuille par lui-même.Ils utilisent la fonction de retrait pour saisir le montant de retrait requis.
La fonction de retrait vérifiera si l’intermédiaire de l’utilisateur a suffisamment de fonds pour se retirer.Si les exigences sont satisfaites, il transfère les fonds requis à l’adresse sélectionnée par l’utilisateur.
Appel externe
C’est là que les faiblesses apparaissent.Le contrat lance un appel externe à un autre contrat ou compte avant que le retrait ne soit reflété dans le solde de l’utilisateur.
Appel récursif
Si le code du contrat externe contient une fonction qui peut rappeler à nouveau le contrat d’origine (comme une autre fonction de retrait), une boucle récursive est créée.Cela permet de réviser la méthode de retrait avant sa fin.
Rentrée et utilisation
L’attaquant utilise ensuite un contrat malveillant pour exploiter cette boucle.Le contrat de l’attaquant appelle rapidement la fonction de retrait du portefeuille avant que le solde ne soit mis à jour pendant le contrat du portefeuille appelle le contrat externe.
Fonction de secours
Dans certains cas, la fonction de secours d’un contrat intelligent (une fonctionnalité unique qui est lancée lorsqu’un contrat reçoit un appel sans données ou Ethereum) peut être utilisé par l’attaquant.Les attaques de rentrée peuvent être effectuées en appelant à plusieurs reprises la fonction de secours tandis que les fonds sont toujours en cours de traitement.
Manipulation et retrait récurrent
Le contrat de l’attaquant peut réutiliser la fonction de retrait dans la même transaction, car le contrat de portefeuille retarde la mise à jour du solde jusqu’à ce qu’un appel externe soit reçu.Cela facilite donc le retrait des fonds sans autorisation, permettant aux attaquants de voler des fonds au-delà de leurs droits légaux.Cela a ensuite provoqué d’énormes pertes économiques pour les utilisateurs du contrat de portefeuille.
4. Les conséquences de la réintégration des attaques
Les attaques de retour peuvent avoir un impact grave sur les utilisateurs de contrats intelligents car ils ont le potentiel de provoquer des pertes financières importantes.
L’une des conséquences les plus directes d’une attaque de rentrée est le retrait non autorisé ou la manipulation des espèces économisées dans un contrat intelligent sensible.L’attaquant a exploité la vulnérabilité pour retirer à plusieurs reprises les fonds du contrat, épuisant le solde du contrat et provoquant potentiellement des pertes financières importantes aux utilisateurs qui investissent ou stockent les actifs dans le contrat affecté.
De plus, les attaques de rentrée peuvent affaiblir la confiance des utilisateurs dans la sécurité et l’intégrité des contrats intelligents et des technologies de blockchain.Les vulnérabilités de la réintégration peuvent avoir des effets catastrophiques, comme en témoignent des événements de haut niveau tels que l’incident de piratage de DAO sur la blockchain Ethereum en 2016, ce qui a provoqué d’énormes pertes économiques et endommagé la réputation de la communauté.
En plus des conséquences financières à court terme, les attaques de rentrée peuvent avoir des effets à long terme tels que les préoccupations réglementaires et juridiques, la baisse de la confiance des investisseurs et les dommages à la réputation des plateformes et des projets blockchain.La perception de la vulnérabilité peut conduire les utilisateurs à être prudents lorsqu’ils interagissent avec les contrats intelligents ou investissent dans des applications décentralisées (DAPP), entravant ainsi l’adoption et l’expansion de la technologie de la blockchain.
5. Comment atténuer les attaques de rentrée
La mise en œuvre des meilleures pratiques dans la création et l’audit de contrats intelligents est nécessaire pour atténuer la menace de rentrée.
Cela comprend l’utilisation d’une base de code bien connue avec un enregistrement sécurisé, ce qui est une façon d’y parvenir.Ces bibliothèques ont été largement testées et évaluées par les pairs, ce qui réduit les chances d’introduire des vulnérabilités.
Les développeurs devraient également utiliser des contrôles de sécurité tels que les conceptions de « interaction d’effet de contrôle » pour minimiser les risques d’attaques de rentrée en garantissant que les modifications de l’état se produisent atomiquement.Si disponible, vous pouvez utiliser un cadre de développement de contrats intelligent réentrant et sécurisé pour ajouter une défense supplémentaire à de telles vulnérabilités.
Il est peu probable que les développeurs ajoutent manuellement la protection de la sécurité, car ces cadres incluent souvent des méthodes intégrées et des protections spécialement conçues pour éviter les attaques de rentrée.Cependant, comme la sécurité de la blockchain évolue toujours, les développeurs doivent continuer à rechercher de nouvelles menaces et faiblesses.