S'attaquer aux défauts connexes dans les logiciels open source
Améliorer la sécurité des logiciels en identifiant les défauts de codage récurrents dans les projets open-source.
― 8 min lire
Table des matières
Le logiciel open source (OSS) est super utilisé aujourd'hui, formant l'épine dorsale de nombreuses applications sur internet. Un aspect majeur de l'OSS est la chaîne d'approvisionnement du logiciel, où les développeurs réutilisent et partagent du code. Cette pratique peut entraîner des problèmes comme des défauts récurrents qui apparaissent dans plusieurs logiciels. Ces problèmes, appelés défauts cognats, ne sont souvent pas bien étudiés, mais ils posent des risques importants pour la sécurité des logiciels.
L'objectif d'adresser les défauts cognats est d'améliorer la fiabilité et la sécurité de l'OSS utilisé dans diverses applications. En général, des défis surgissent parce que les méthodes existantes pour analyser les logiciels passent souvent à côté de ces problèmes récurrents, ce qui fait que des Vulnérabilités sont manquées lors des revues.
Contexte
Dans l'écosystème OSS, divers développeurs s'appuient sur le travail des autres, créant une toile complexe de dépendances de code. La réutilisation de code peut parfois introduire des défauts qui n'ont pas été résolus dans le code d'origine, entraînant des problèmes similaires dans de nouveaux Projets. Ces vulnérabilités partagées sont souvent appelées défauts cognats.
Malgré la prévalence de ces problèmes, de nombreux développeurs ne peuvent pas être au courant de leur existence ou n'ont pas de méthodes efficaces pour les identifier. Les outils d'analyse de logiciel traditionnels se concentrent généralement sur la détection des défauts connus mais peuvent manquer des connexions plus profondes entre des problèmes similaires dans différents projets.
Le problème des défauts cognats
Les défauts cognats peuvent être définis comme des défauts qui surgissent à cause d'erreurs de codage similaires à travers différents codebases. Cela peut arriver pour plusieurs raisons :
- Réutilisation de code : Les développeurs peuvent copier le code d'un projet à un autre, emportant involontairement des erreurs.
- Forking de projets : Quand les développeurs forkent un OSS existant pour créer leurs propres versions, ils pourraient introduire de nouvelles fonctionnalités sans réviser complètement le code d'origine.
- Manque de suivi : Sans un suivi adéquat des bugs et des correctifs, les mêmes vulnérabilités peuvent réapparaître sous différentes formes.
Ces problèmes soulignent le besoin de méthodes de détection efficaces pour identifier et traiter les défauts cognats avant qu'ils ne provoquent de graves violations de sécurité.
Objectifs de la recherche
L'objectif principal de cette recherche est de développer des méthodes qui identifient automatiquement les défauts cognats dans l'OSS. Cela implique la création de règles spécifiques pour l'Analyse Statique basées sur des vulnérabilités déjà identifiées. En procédant ainsi, cela aide à détecter des défauts similaires qui pourraient ne pas être immédiatement évidents.
Détecter les défauts cognats peut être divisé en plusieurs tâches :
- Pour l'OSS original, identifier les défauts qui se reproduisent en raison des mêmes erreurs de codage.
- Pour les projets basés sur l'OSS original, confirmer si des défauts connus existent toujours et comment ils ont pu évoluer.
- Pour tous les projets, vérifier s'ils contiennent des défauts similaires à ceux connus dans d'autres OSS.
Solution proposée
La solution proposée consiste à créer un outil qui examine les différences entre le code avant et après l'application de correctifs. En analysant ces changements, il peut générer des règles qui aident à identifier des défauts similaires dans d'autres codebases communes. Cette méthode repose largement sur l'examen de la structure et du flux de données dans le code.
Étapes clés de la méthode
- Collecte de données sur les vulnérabilités : Des données historiques sur les vulnérabilités existantes sont rassemblées, y compris les correctifs appliqués.
- Création d'arbres de syntaxe abstraite (AST) : Le code est transformé en un format visuel qui met en évidence sa structure, facilitant l'analyse.
- Comparaison des AST : Les différences entre les AST du code corrigé et non corrigé sont étudiées pour identifier quels changements ont été effectués et comment ils se rapportent aux défauts.
- Génération de règles : Sur la base des différences observées, des règles sont élaborées pour aider à reconnaître des modèles similaires dans d'autres codebases.
- Test et perfectionnement des règles : Les règles générées sont testées pour s'assurer qu'elles identifient avec précision les défauts et sont affinées si nécessaire.
Développement de l'outil
La recherche a conduit au développement d'un outil prototype qui met en œuvre la méthode ci-dessus. Cet outil est conçu pour analyser des projets basés sur C/C++, qui sont souvent truffés de défauts cognats en raison de leur complexité et de leur historique.
Les projets cibles ont été sélectionnés en fonction de leur utilisation répandue et des données historiques disponibles sur leurs vulnérabilités. L'outil a été utilisé pour évaluer l'efficacité des règles générées contre des OSS réels.
Résultats de l'évaluation
L'outil a été évalué en analysant huit projets OSS populaires qui ont un historique de vulnérabilités. L'objectif principal était de comprendre à quel point les règles générées pouvaient détecter des vulnérabilités connues et des défauts cognats.
Résultats
- Précision de détection : L'outil a atteint un taux élevé de détection des vulnérabilités connues avec une meilleure précision par rapport aux outils d'analyse statique traditionnels.
- Nouvelles vulnérabilités : Plusieurs vulnérabilités auparavant inconnues ont été identifiées dans les projets en amont, affirmant l'efficacité de l'outil.
- Impact sur les projets en aval : L'analyse a également révélé que les projets en aval étaient affectés par des vulnérabilités présentes dans leurs homologues en amont.
Cela démontre l'importance d'avoir des méthodes de détection efficaces pour assurer la sécurité à travers toute la chaîne d'approvisionnement du logiciel.
Défis rencontrés
Lors du développement de ce système, divers défis ont été rencontrés, notamment :
- Complexité du code : La complexité et la diversité des pratiques de codage peuvent rendre difficile l'identification de modèles à travers différents projets.
- Performance : Les méthodes employées peuvent être intensives sur le plan computationnel, nécessitant une puissance de traitement significative.
- Faux positifs : La possibilité d'identifier incorrectement des défauts qui ne sont pas réellement présents peut entraîner des efforts gâchés en matière de remédiation.
Directions futures
Pour améliorer davantage la détection des défauts cognats, plusieurs directions futures pourraient être explorées :
- Extension du support linguistique : Bien que l'outil actuel se concentre sur le C/C++, des adaptations pourraient permettre un support pour d'autres langages de programmation.
- Amélioration de la génération de règles : Améliorer la méthodologie pour la génération automatique de règles pourrait mener à une meilleure identification des vulnérabilités.
- Collaboration avec la communauté OSS : S'engager avec la communauté open-source peut aider à rassembler plus de données sur les vulnérabilités et à accroître la sensibilisation aux défauts cognats.
Conclusion
Les défauts cognats présentent des risques importants pour la sécurité des logiciels développés dans l'écosystème OSS. En mettant en œuvre une méthode qui génère automatiquement des règles de détection basées sur des vulnérabilités historiques, il est possible d'identifier et de traiter ces défauts plus efficacement. Le succès de l'outil prototype démontre la faisabilité de cette approche et son impact potentiel sur la sécurisation des projets OSS.
En résumé, cette recherche met en lumière les complexités d'identification des défauts cognats et propose des solutions pratiques pour améliorer la sécurité logicielle dans le domaine open-source. Le développement continu et le perfectionnement des outils et des méthodologies seront cruciaux pour suivre le rythme de l'évolution du paysage du développement logiciel et des défis de sécurité.
Titre: Patch2QL: Discover Cognate Defects in Open Source Software Supply Chain With Auto-generated Static Analysis Rules
Résumé: In the open source software (OSS) ecosystem, there exists a complex software supply chain, where developers upstream and downstream widely borrow and reuse code. This results in the widespread occurrence of recurring defects, missing fixes, and propagation issues. These are collectively referred to as cognate defects, and their scale and threats have not received extensive attention and systematic research. Software composition analysis and code clone detection methods are unable to cover the various variant issues in the supply chain scenario, while code static analysis, or static application security testing (SAST) techniques struggle to target specific defects. In this paper, we propose a novel technique for detecting cognate defects in OSS through the automatic generation of SAST rules. Specifically, it extracts key syntax and semantic information from pre- and post-patch versions of code through structural comparison and control flow to data flow analysis, and generates rules that matches these key elements. We have implemented a prototype tool called Patch2QL and applied it to fundamental OSS in C/C++. In experiments, we discovered 7 new vulnerabilities with medium to critical severity in the most popular upstream software, as well as numerous potential security issues. When analyzing downstream projects in the supply chain, we found a significant number of representative cognate defects, clarifying the threat posed by this issue. Additionally, compared to general-purpose SAST and signature-based mechanisms, the generated rules perform better at discover all variants of cognate defects.
Auteurs: Fuwei Wang, Yongzhi Liu, Zhiqiang Dong
Dernière mise à jour: 2024-01-29 00:00:00
Langue: English
Source URL: https://arxiv.org/abs/2401.12443
Source PDF: https://arxiv.org/pdf/2401.12443
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.