Impact des mises à jour du compilateur Solidity sur la sécurité des contrats intelligents
Examiner comment les mises à jour de Solidity affectent les vulnérabilités des contrats intelligents Ethereum.
― 8 min lire
Table des matières
Les Contrats intelligents sur Ethereum sont devenus super populaires pour faire tourner des applications décentralisées. Mais ces contrats peuvent avoir des failles de sécurité graves qui peuvent entraîner des pertes financières. En réponse, le compilateur Solidity, qui est utilisé pour écrire et déployer ces contrats, a subi plusieurs mises à jour pour corriger des vulnérabilités. Pourtant, on ne sait pas trop à quel point ces mises à jour ont été efficaces pour réduire les risques de sécurité. Cet article examine comment les mises à jour du compilateur Solidity impactent les vulnérabilités des contrats intelligents Ethereum.
C'est quoi les contrats intelligents ?
Les contrats intelligents sont des contrats auto-exécutables avec les termes de l'accord directement écrits dans le code. Ils fonctionnent sur la blockchain Ethereum, qui est un système décentralisé et transparent. Comme le code est stocké sur la blockchain, il est visible par tous, ce qui permet d'examiner et de tester pour des vulnérabilités de sécurité.
Une fois qu'un contrat intelligent est déployé, il ne peut pas être modifié. Cette immutabilité est une arme à double tranchant : elle garantit que le contrat fonctionnera comme prévu, mais ça veut aussi dire que les défauts ou vulnérabilités dans le code restent définitivement, sauf si des actions spécifiques sont prises pour les corriger.
Le rôle du compilateur Solidity
Le compilateur Solidity est un acteur clé dans le développement des contrats intelligents Ethereum. Il prend le code de haut niveau écrit dans le langage de programmation Solidity et le transforme en bytecode qui peut être exécuté sur la Machine Virtuelle Ethereum (EVM). En plus de compiler le code, le compilateur Solidity a été mis à jour périodiquement pour régler des vulnérabilités connues.
Malgré ces mises à jour, le langage Solidity est relativement nouveau et n’a pas été standardisé de manière exhaustive, laissant place à des problèmes potentiels. Donc, comprendre comment les mises à jour du compilateur affectent la sécurité des contrats intelligents est crucial.
Importance de traiter les vulnérabilités
Les problèmes de sécurité dans les contrats intelligents peuvent entraîner des pertes financières importantes. Des incidents très médiatisés, comme le célèbre piratage du portefeuille Parity, ont montré comment des vulnérabilités peuvent être exploitées pour voler des millions en cryptomonnaie. Les développeurs doivent porter une attention particulière à la sécurité de leurs contrats pour éviter de telles catastrophes.
Pour s'attaquer à ces préoccupations, des chercheurs et des développeurs ont créé des outils pour analyser les vulnérabilités dans les contrats intelligents. Ces outils visent à identifier les risques de sécurité potentiels avant que les contrats ne soient déployés. Cependant, il y a eu peu de recherche spécifiquement axée sur la façon dont les mises à jour du compilateur Solidity affectent ces vulnérabilités.
Aperçu de l'étude
Pour éclairer ce sujet, nous avons réalisé une étude empirique examinant les vulnérabilités dans les contrats intelligents écrits avec différentes versions du compilateur Solidity. Nous avons analysé plus de 500 000 contrats déployés jusqu'au 31 août 2022, en nous concentrant sur trois vulnérabilités de haute gravité : Argent Verrouillé, Utilisation de tx.origin, et Appel Non Vérifié.
En analysant ces contrats, nous avons tenté de déterminer comment les taux d'apparition de ces vulnérabilités ont changé avec les diverses mises à jour du compilateur.
Méthodologie
Collecte de données
Nous avons utilisé Etherscan, un explorateur de blocs pour Ethereum, pour collecter des données sur les contrats intelligents déployés. En utilisant leur API, nous avons rassemblé des infos sur les contrats créés jusqu'à une date spécifiée et analysé leurs codes sources pour détecter des vulnérabilités.
Outil d'analyse des vulnérabilités
Pour notre analyse, nous avons utilisé SmartCheck, un outil conçu pour identifier les vulnérabilités dans les contrats Solidity. Il scanne le code et détecte des modèles de vulnérabilités connus. Bien que SmartCheck soit efficace, il peut aussi produire des faux positifs, ce qui signifie que certains contrats peuvent être signalés comme vulnérables alors qu'ils ne le sont pas.
Vulnérabilités analysées
L'étude s'est concentrée sur les vulnérabilités suivantes :
Argent Verrouillé : Cela se produit lorsque de l'Ether est envoyé à un contrat intelligent qui n'a pas de fonction pour retirer ou renvoyer cet Ether. Cela entraîne des fonds bloqués, causant des pertes financières.
Utilisation de tx.origin : Cette vulnérabilité survient lorsque la variable globale tx.origin est utilisée pour l'authentification. Si les développeurs utilisent cette variable au lieu de msg.sender, un tiers non autorisé pourrait accéder aux fonds.
Appel Non Vérifié : Cela se produit lorsqu'un contrat appelle un autre contrat mais ne vérifie pas si le contrat appelé a été exécuté avec succès. Cela pourrait entraîner une perte d'Ether si la transaction échoue.
Résultats de l'étude
Taux d'apparition des vulnérabilités
Après avoir analysé les contrats, nous avons remarqué plusieurs tendances clés :
Argent Verrouillé : Après la sortie de la version 0.6 du compilateur Solidity, le taux d'apparition des vulnérabilités liées à l'argent verrouillé a chuté de manière significative.
Utilisation de tx.origin : Le taux d'apparition de cette vulnérabilité est resté constamment bas à travers les versions, ce qui indique que les développeurs ont bien évité son utilisation.
Appel Non Vérifié : Bien qu'une diminution ait été observée après la version 0.8, le taux d'apparition est resté relativement élevé à cause de facteurs contribuant comme des faux positifs et des clones de code.
Impact des mises à jour du compilateur
Nos résultats montrent que les mises à jour majeures du compilateur Solidity ont eu un effet positif sur la réduction de certaines vulnérabilités :
- Les mises à jour de la version 0.5 à la version 0.6 ont conduit à une diminution notable de la vulnérabilité d'Argent Verrouillé.
- Le faible taux d'apparition de l'utilisation de tx.origin suggère que les développeurs ont reconnu les risques associés et ont limité son utilisation, peu importe les mises à jour du compilateur.
- La vulnérabilité d’Appel Non Vérifié a vu son taux d’apparition diminuer après l'introduction de la version 0.8, mais son taux est resté élevé à cause de clones de code existants encore utilisés.
Examen des clones de code
Pendant l'étude, nous avons découvert que beaucoup de contrats sont en fait des copies de contrats existants, que nous avons appelées "clones de code". Ces clones portent souvent les mêmes vulnérabilités que les contrats originaux. En examinant les clones de code, nous avons constaté que s'attaquer à ces copies pourrait encore réduire les taux d'apparition des vulnérabilités.
Nous avons effectué une analyse préliminaire et confirmé qu'une partie significative des vulnérabilités détectées provenait de ces contrats clonés. En retirant ces clones de l'analyse, nous avons observé que les taux de vulnérabilités diminuaient considérablement.
Considération des anciennes versions du compilateur
Un aspect intéressant que nous avons exploré était la prévalence des anciennes versions du compilateur parmi les contrats déployés. Beaucoup de développeurs continuent d'utiliser des versions obsolètes, qui peuvent contenir des vulnérabilités non corrigées. Cela souligne l'importance de mettre à jour vers la dernière version du compilateur.
En analysant les contrats construits avec des versions plus anciennes, nous avons noté que le taux de contrats originaux était plus élevé par rapport aux contrats clonés. Les anciennes versions créent des problèmes de compatibilité et empêchent les développeurs de profiter des améliorations de sécurité dans les nouvelles mises à jour.
Conclusion
Pour résumer, notre étude confirme que les mises à jour du compilateur jouent un rôle crucial dans la réduction des vulnérabilités des contrats intelligents Ethereum. Les taux d’apparition des vulnérabilités d’Argent Verrouillé, d’Utilisation de tx.origin, et d’Appel Non Vérifié ont montré des changements notables avec les différentes versions du compilateur.
La présence de clones de code contribue également au paysage des vulnérabilités, ce qui indique qu'il est vital de s'attaquer à ces problèmes pour améliorer la sécurité globale. Par conséquent, les développeurs devraient prioriser la mise à jour de leurs versions de compilateur et faire attention à la réutilisation du code sans vérifications adéquates pour les vulnérabilités.
Cette étude sert d'appel à l'action pour une recherche continue sur la sécurité des contrats intelligents et l'efficacité des outils d'analyse des vulnérabilités. Avec le développement rapide de la technologie blockchain, il est important de continuer à enquêter sur des moyens de rendre les contrats intelligents Ethereum plus sûrs pour tous les utilisateurs.
Titre: An Empirical Study of Impact of Solidity Compiler Updates on Vulnerabilities in Ethereum Smart Contracts
Résumé: Vulnerabilities of Ethereum smart contracts often cause serious financial damage. Whereas the Solidity compiler has been updated to prevent vulnerabilities, its effectiveness has not been revealed so far, to the best of our knowledge. In this paper, we shed light on the impact of compiler versions of vulnerabilities of Ethereum smart contracts. To this end, we collected 503,572 contracts with Solidity source codes in the Ethereum blockchain and then analyzed their vulnerabilities. For three vulnerabilities with high severity, i.e., Locked Money, Using tx.origin, and Unchecked Call, we show that their appearance rates are decreased by virtue of major updates of the Solidity compiler. We then found the following four key insights. First, after the release of version 0.6, the appearance rate for Locked Money has decreased. Second, regardless of compiler updates, the appearance rate for Using tx.origin is significantly low. Third, although the appearance rate for Unchecked Call has decreased in version 0.8, it still remains high due to various factors, including code clones. Fourth, through analysis of code clones, our promising results show that the appearance rate for Unchecked Call can be further decreased by removing the code clones.
Auteurs: Chihiro Kado, Naoto Yanai, Jason Paul Cruz, Kyosuke Yamashita, Shingo Okamura
Dernière mise à jour: 2023-06-07 00:00:00
Langue: English
Source URL: https://arxiv.org/abs/2306.04250
Source PDF: https://arxiv.org/pdf/2306.04250
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.
Liens de référence
- https://github.com/s-tikhomirov/solidity-latex-highlighting/
- https://dl.acm.org/ccs.cfm
- https://rekt.news
- https://techcrunch.com/2017/11/07/a-major-vulnerability-has-frozen-
- https://techcrunch.com/2017/11/07/a-major-vulnerability-has-frozen-hundred
- https://github.com/smartdec/smartcheck/tree/master/rule_descriptions
- https://www.w3.org/TR/xpath20/
- https://github.com/smartdec/smartcheck
- https://docs.soliditylang.org/en/latest/smtchecker.html?highlight=reentrancy#external-calls-and-reentrancy
- https://www.comae.com/posts/the-280m-ethereums-parity-bug./
- https://vessenes.com/tx-origin-and-ethereum-oh-my/
- https://dev.to/kamilpolak/hack-solidity-unchecked-call-return-value-7og
- https://etherscan.io/
- https://github.com/ConsenSys/mythril/issues/1722
- https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable/blob/master/contracts/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol
- https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable
- https://github.com/vyperlang/vyper
- https://github.com/c-kado/Ethereum_empirical