Évitement efficace des vulnérabilités dans le code de contrat intelligent auto-complété en utilisant un décodage contraint par les vulnérabilités

La complétion automatique du code permet aux développeurs d’accélérer considérablement la rédaction du code. Les avancées récentes des modèles linguistiques à grande échelle (LLM) basés sur l’architecture transformer ont été appliquées à la synthèse de code. Toutefois, des études montrent que de nombreux codes ainsi générés contiennent des vulnérabilités. Nous proposons une nouvelle approche de décodage contrainte par les vulnérabilités afin de réduire la quantité de code vulnérable produit par ces modèles. En utilisant un petit jeu de données étiqueté comprenant des lignes de code vulnérables, nous fine-tunons un LLM afin qu’il inclue des étiquettes de vulnérabilité lors de la génération du code, agissant ainsi comme un classificateur intégré. Ensuite, pendant le processus de décodage, nous empêchons le modèle de générer ces étiquettes, afin d’éviter la production de code vulnérable. Pour évaluer cette méthode, nous avons choisi comme étude de cas la complétion automatique des contrats intelligents (SC) sur la blockchain Ethereum, en raison des exigences strictes en matière de sécurité des SC. Nous avons d’abord fine-tuné le modèle GPT-J de 6 milliards de paramètres à l’aide de 186 397 contrats intelligents Ethereum, après suppression des doublons issus d’un ensemble initial de 2 217 692 SC. Ce fine-tuning a nécessité plus d’une semaine d’exécution sur dix GPU. Les résultats ont montré que notre modèle fine-tuné pouvait générer des SC avec un score moyen BLEU (BiLingual Evaluation Understudy) de 0,557. Toutefois, de nombreux codes dans les SC complétés automatiquement étaient vulnérables. En utilisant le code précédent la ligne vulnérable dans 176 SC présentant différents types de vulnérabilités pour effectuer la complétion automatique, nous avons constaté que plus de 70 % des codes complétés étaient instables. Nous avons donc procédé à un nouveau fine-tuning du modèle sur 941 autres SC vulnérables présentant les mêmes types de vulnérabilités, puis appliqué le décodage contraint par les vulnérabilités. Ce second fine-tuning n’a pris qu’une heure avec quatre GPU. Nous avons ensuite réexécuté la complétion automatique sur les 176 SC et constaté que notre approche parvenait à identifier 62 % du code susceptible d’être vulnérable, tout en évitant la génération de 67 % de ces lignes, ce qui démontre que l’approche est efficace et performante pour prévenir les vulnérabilités dans le code généré automatiquement.