Simple Science

La science de pointe expliquée simplement

# Informatique# Cryptographie et sécurité# Technologies émergentes# Génie logiciel

Naviguer dans les risques des contrats intelligents proxy

Les contrats proxy sur Ethereum offrent des avantages mais présentent des problèmes de sécurité importants.

Cheng-Kang Chen, Wen-Yi Chu, Muoi Tran, Laurent Vanbever, Hsu-Chun Hsiao

― 8 min lire


Risques des contratsRisques des contratsproxy exposésdes risques de sécurité sérieux.Les contrats proxy sur Ethereum posent
Table des matières

Dans le monde des cryptomonnaies, Ethereum se démarque comme une plateforme populaire qui supporte diverses applications en ligne. Une des caractéristiques les plus importantes d'Ethereum, c'est sa capacité à exécuter des contrats intelligents. Ces contrats sont des programmes auto-exécutables qui réalisent automatiquement des tâches quand certaines conditions sont remplies. Cependant, il existe un modèle de conception appelé modèle proxy qui permet aux développeurs de créer des contrats qui peuvent être mis à jour sans perdre leur état. Bien que ça ait l'air bénéfique, ça vient aussi avec des risques, surtout en matière de sécurité.

C'est quoi les contrats intelligents proxy ?

Les contrats intelligents proxy sont des contrats qui séparent la logique du programme des données qu'ils stockent. Ça veut dire que le code réel qui effectue les actions peut être changé sans modifier les données stockées dans le contrat. En utilisant un proxy, les développeurs peuvent mettre à jour la partie logique tout en conservant la même adresse et le même état, ce qui est attirant pour les projets en cours qui ont besoin de mises à jour.

Mais ce design a ses inconvénients. Deux types de problèmes significatifs peuvent surgir de l'utilisation de contrats proxy : les collisions de fonctions et les collisions de stockage.

Collisions de fonctions

Les collisions de fonctions se produisent quand deux fonctions partagent le même nom ou la même signature dans le proxy et dans les contrats logiques. Quand ça arrive, ça crée de la confusion. Le proxy peut essayer d'exécuter sa propre fonction au lieu de celle qui est prévue dans le contrat logique. Ça peut causer des problèmes opérationnels et être exploité par des attaquants.

Par exemple, imagine qu'un contrat proxy a une fonction pour que les utilisateurs retirent de l'argent. S'il y a une autre fonction dans le contrat logique avec le même nom, le proxy pourrait ne pas appeler la bonne, ce qui entraînerait des transferts de fonds non voulus. Des acteurs malveillants peuvent profiter de cette confusion pour voler des fonds.

Collisions de stockage

Les collisions de stockage se produisent quand deux contrats différents occupent accidentellement le même emplacement de stockage. Étant donné que le proxy et le contrat logique partagent le même espace de stockage, s'ils ne sont pas correctement gérés, ils peuvent finir par écraser les données de l'autre. Ce chevauchement peut conduire à de sérieuses vulnérabilités où les attaquants exploitent l'espace partagé pour changer des informations importantes, comme qui possède un contrat particulier.

Par exemple, si un contrat proxy stocke l'adresse d'un propriétaire et que le contrat logique essaie de stocker une valeur booléenne au même endroit, il pourrait écraser l'adresse du propriétaire avec de fausses informations. Ce type de problème peut mener à un accès non autorisé et à un contrôle sur le contrat.

L'importance de trouver des collisions

Étant donné les risques associés aux collisions de fonctions et de stockage, identifier de telles vulnérabilités est crucial pour protéger les utilisateurs et leurs actifs. De nombreux outils et méthodes existent à cet effet, mais ils ne couvrent souvent pas tous les contrats sur le réseau Ethereum. Beaucoup d'outils existants ne peuvent analyser que les contrats qui sont accessibles publiquement ou ceux qui ont été utilisés dans des transactions passées.

Cette limitation est préoccupante parce qu'une portion significative des contrats sur Ethereum n'a pas de code source ou d'historique de transactions disponibles. Donc, une approche complète pour identifier les collisions est nécessaire.

Le besoin d'un nouvel outil

Pour aborder ces problèmes, un nouvel outil automatisé a été développé pour identifier les contrats intelligents proxy et vérifier les vulnérabilités de collision. Cet outil utilise des techniques avancées pour évaluer les contrats qui manquent de code source et d'historique de transactions. Il analyse des millions de contrats intelligents de manière efficace et précise, offrant une couverture plus large que les outils existants.

Comment fonctionne l'outil

L'outil a un processus en deux étapes pour identifier les contrats proxy. D'abord, il démonte le bytecode d'un contrat intelligent pour rechercher des opcodes spécifiques indiquant si le contrat agit comme un proxy. Si un contrat a le bon opcode, il passe à la deuxième étape, où il simule l'exécution du contrat pour vérifier s'il se comporte comme un proxy.

Une fois qu'un contrat proxy est confirmé, l'outil recherche les contrats logiques associés et vérifie les collisions potentielles. Il utilise diverses techniques, comme l'exécution symbolique et le découpage de programme, pour vérifier efficacement les collisions de stockage.

Résultats de l'utilisation de l'outil

L'outil a analysé des millions de contrats actifs sur le réseau Ethereum, et il a découvert un nombre stupéfiant de contrats proxy et des vulnérabilités associées. L'analyse a révélé que plus de la moitié des contrats actifs sont des contrats proxy, et beaucoup d'entre eux sont effectivement sensibles aux collisions de fonctions et de stockage.

Statistiques sur les contrats proxy

D'après l'analyse, environ 19,5 millions de contrats proxy ont été identifiés, un pourcentage significatif de ceux-ci ne publiant pas leur code source. Cette statistique est alarmante car elle souligne un manque de transparence dans beaucoup de ces contrats. Environ 1,5 million de contrats proxy cachés ont été découverts, qui n'ont aucun code source ou données de transactions accessibles.

Statistiques sur les vulnérabilités de collision

De plus, l'outil a détecté environ 1,5 million de cas de collisions de fonctions à travers les contrats proxy identifiés. Il est important de noter qu'une grande majorité de ces collisions provient de la duplication de contrats, où de nombreux contrats proxy partagent le même code. En outre, plusieurs instances de collisions de stockage exploitables ont également été identifiées, soulevant des préoccupations pour les entités qui gèrent ces contrats.

La croissance des contrats proxy

L'analyse a également observé une tendance de croissance évidente dans le nombre de contrats proxy déployés au fil des années. Avant 2020, environ 2 millions de contrats proxy avaient été introduits, mais d'ici 2023, les chiffres de déploiement ont explosé, avec des millions créés rien que dans les premiers mois de l'année. Cette tendance indique un fort déplacement vers l'utilisation de contrats proxy dans l'écosystème Ethereum.

Beaucoup de développeurs sont attirés par le modèle proxy à cause de la flexibilité qu'il offre pour les mises à jour et les fonctionnalités des contrats. Cependant, cette utilisation croissante signifie aussi plus de vulnérabilités potentielles qui doivent être surveillées et gérées efficacement.

Pratiques de sécurité pour les contrats proxy

Alors que l'utilisation des contrats proxy continue d'augmenter, mettre en œuvre des pratiques de sécurité robustes reste essentiel. Les développeurs sont invités à suivre les meilleures pratiques pour éviter les collisions de fonctions et de stockage. Cela inclut de clairement séparer les noms de fonctions, d'assurer des signatures uniques et de gérer soigneusement les mises en page de stockage.

L'introduction de nouveaux modèles de conception proxy, comme le Transparent Upgradeable Proxy, vise à minimiser la probabilité de collisions en mettant en œuvre une approche plus structurée pour les appels de fonction. En faisant la distinction entre les types d'appelants, ces designs aident à prévenir les exécutions de fonctions non intentionnelles, améliorant ainsi la sécurité des contrats.

Défis pour assurer la sécurité

Malgré les meilleurs efforts pour sécuriser les contrats proxy, plusieurs défis persistent. De nombreux développeurs ne passent pas suffisamment de temps à examiner leurs contrats ou comptent trop sur des outils externes pour l'analyse. Cette dépendance peut mener à des vulnérabilités qui passent entre les mailles du filet, surtout quand les outils de sécurité existants ne peuvent pas analyser les contrats à cause de l'absence de code source ou d'historique de transactions.

Alors que les acteurs malveillants deviennent de plus en plus sophistiqués, le besoin d'outils d'analyse complets devient de plus en plus urgent. Le développement continu et l'amélioration des Outils automatisés peuvent offrir une meilleure couverture, entraînant un environnement plus sûr pour tous les utilisateurs d'Ethereum.

Conclusion

Les contrats intelligents proxy sur Ethereum offrent flexibilité et capacité de mise à jour, mais ils introduisent aussi des risques de sécurité significatifs. Comprendre ces risques, notamment les collisions de fonctions et de stockage, est vital pour les développeurs et les utilisateurs.

L'émergence d'outils automatisés capables d'identifier ces vulnérabilités est un pas positif vers la sécurisation de l'écosystème Ethereum. Alors que la popularité des contrats proxy continue d'augmenter, une vigilance constante et des pratiques améliorées seront cruciales pour protéger les utilisateurs et leurs actifs contre les potentielles exploitations.

En étant proactifs et en mettant en œuvre des mesures de sécurité efficaces, les développeurs peuvent s'assurer que les avantages des contrats proxy l'emportent largement sur les risques impliqués.

Source originale

Titre: Proxion: Uncovering Hidden Proxy Smart Contracts for Finding Collision Vulnerabilities in Ethereum

Résumé: The proxy design pattern allows Ethereum smart contracts to be simultaneously immutable and upgradeable, in which an original contract is split into a proxy contract containing the data storage and a logic contract containing the implementation logic. This architecture is known to have security issues, namely function collisions and storage collisions between the proxy and logic contracts, and has been exploited in real-world incidents to steal users' millions of dollars worth of digital assets. In response to this concern, several previous works have sought to identify proxy contracts in Ethereum and detect their collisions. However, they all fell short due to their limited coverage, often restricting analysis to only contracts with available source code or past transactions. To bridge this gap, we present Proxion, an automated cross-contract analyzer that identifies all proxy smart contracts and their collisions in Ethereum. What sets Proxion apart is its ability to analyze hidden smart contracts that lack both source code and past transactions. Equipped with various techniques to enhance efficiency and accuracy, Proxion outperforms the state-of-the-art tools, notably identifying millions more proxy contracts and thousands of unreported collisions. We apply Proxion to analyze over 36 million alive contracts from 2015 to 2023, revealing that 54.2% of them are proxy contracts, and about 1.5 million contracts exhibit at least one collision issue.

Auteurs: Cheng-Kang Chen, Wen-Yi Chu, Muoi Tran, Laurent Vanbever, Hsu-Chun Hsiao

Dernière mise à jour: 2024-09-20 00:00:00

Langue: English

Source URL: https://arxiv.org/abs/2409.13563

Source PDF: https://arxiv.org/pdf/2409.13563

Licence: https://creativecommons.org/licenses/by/4.0/

Changements: Ce résumé a été créé avec l'aide de l'IA et peut contenir des inexactitudes. Pour obtenir des informations précises, veuillez vous référer aux documents sources originaux dont les liens figurent ici.

Merci à arxiv pour l'utilisation de son interopérabilité en libre accès.

Articles similaires