L'analyse de la composition logicielle ( ACL ) est une pratique dans les domaines des technologies de l'information et du génie logiciel pour analyser les applications logicielles personnalisées afin de détecter les logiciels libres intégrés et de déterminer s'ils sont à jour, contiennent des failles de sécurité ou ont des exigences de licence.
Arrière-plan
Il est courant en génie logiciel de développer des logiciels à l'aide de différents composants. L'utilisation de composants logiciels permet de segmenter la complexité des éléments importants en morceaux de code plus petits et d'accroître la flexibilité en facilitant la réutilisation des composants pour répondre à de nouveaux besoins. Cette pratique s'est largement répandue depuis la fin des années 1990 avec la popularisation des logiciels libres (OSS), contribuant ainsi à accélérer le processus de développement logiciel et à réduire les délais de mise sur le marché.
Cependant, l’utilisation de logiciels libres introduit de nombreux risques pour les applications logicielles développées. Ces risques peuvent être organisés en 5 catégories :
- Gestion des versions des logiciels libres : risques liés aux changements introduits par les nouvelles versions
- Sécurité : risques liés aux vulnérabilités des composants - Vulnérabilités et expositions communes (ou CVE)
- Licence : risques liés aux exigences légales en matière de propriété intellectuelle (PI)
- Développement : risques de compatibilité entre le code source existant et les logiciels libres
- Support : risque de documentation insuffisante et de composants logiciels obsolètes
Peu après la création de l' Open Source Initiative en février 1998, les risques associés à l'OSS ont été soulevés et les organisations ont essayé de gérer cela en utilisant des feuilles de calcul et des documents pour suivre tous les composants open source utilisés par leurs développeurs.
Pour les organisations utilisant intensivement des composants open source, il était nécessaire d'automatiser l'analyse et la gestion des risques liés à l'open source. Ceci a donné naissance à une nouvelle catégorie de logiciels : l'analyse de la composition logicielle (SCA). SCA aide les organisations à gérer ces risques. SCA s'efforce de détecter tous les composants tiers utilisés dans une application logicielle afin de réduire les risques associés aux failles de sécurité, aux exigences en matière de licences de propriété intellectuelle et à l'obsolescence des composants.
Principe de fonctionnement
Les produits SCA fonctionnent généralement comme suit :
- Un moteur analyse le code source du logiciel et les artefacts associés utilisés pour compiler une application logicielle.
- Le moteur identifie les composants OSS et leurs versions et stocke généralement ces informations dans une base de données, créant ainsi un catalogue des logiciels OSS utilisés dans l'application analysée.
- Ce catalogue est ensuite comparé à des bases de données référençant les vulnérabilités de sécurité connues pour chaque composant, les exigences de licence pour son utilisation et ses versions antérieures. Pour la détection des vulnérabilités de sécurité, cette comparaison est généralement effectuée avec les vulnérabilités de sécurité connues (CVE) répertoriées dans la National Vulnerability Database (NVD). Certains produits utilisent une base de données propriétaire supplémentaire de vulnérabilités. Pour la conformité en matière de propriété intellectuelle et de légalité , les produits SCA extraient et évaluent le type de licence utilisé pour le composant OSS. Les versions des composants sont extraites de dépôts open source populaires tels que GitHub , Maven , PyPI , NuGet et bien d'autres.
- Les systèmes SCA modernes intègrent des techniques d'analyse avancées pour améliorer la précision et réduire les faux positifs. Parmi les contributions notables figure l'analyse des méthodes vulnérables , qui détermine si les méthodes vulnérables identifiées dans les dépendances sont effectivement accessibles depuis le code de l'application. Cette approche, initiée par faux positifs et des faux négatifs dans les projets réels.
- La curation des vulnérabilités basée sur l'apprentissage automatique automatise le processus de création et de maintenance des bases de données de vulnérabilités en prédisant la pertinence des données issues de diverses sources, telles que les systèmes de suivi des bogues, les commits et les listes de diffusion. Ces systèmes utilisent des techniques d'auto-apprentissage pour améliorer itérativement la qualité des modèles et intègrent des indicateurs de stabilité de déploiement afin d'évaluer les nouveaux modèles avant leur mise en production.
- Les techniques de traitement automatique du langage naturel pour l'identification automatisée des vulnérabilités analysent les messages de commit et les rapports de bogues afin d'identifier les problèmes de sécurité qui n'ont peut-être pas été divulgués publiquement. Cette approche utilise des classificateurs d'apprentissage automatique entraînés sur des caractéristiques textuelles extraites des artefacts de développement pour découvrir des vulnérabilités jusqu'alors inconnues dans les bibliothèques open source.
- Les résultats sont ensuite mis à la disposition des utilisateurs finaux sous différents formats numériques. Leur contenu et leur format dépendent du produit SCA et peuvent inclure des conseils pour évaluer et interpréter le risque, ainsi que des recommandations, notamment concernant les exigences légales des composants open source, telles que les licences copyleft fortes ou faibles . Le résultat peut également contenir une nomenclature logicielle (SBOM) détaillant tous les composants open source et leurs attributs associés utilisés dans une application logicielle
Techniques avancées
Depuis le début des années 2010, les chercheurs ont développé plusieurs techniques avancées pour améliorer la précision et l'efficacité des outils SCA :
Analyse des méthodes vulnérables
L'analyse des méthodes vulnérables permet de déterminer si une vulnérabilité dans une bibliothèque tierce représente un risque réel pour une application. Plutôt que de simplement détecter la présence de bibliothèques vulnérables, cette technique analyse si les méthodes vulnérables spécifiques au sein de ces bibliothèques sont accessibles depuis les chemins d'exécution de l'application. Cette méthode a été inventée et implémentée pour la première fois chez SourceClear sous la direction d' Apprentissage automatique pour les bases de données de vulnérabilités