Gestion des vulnérabilités logicielles: Un guide pas à pas

Les vulnérabilités logicielles sont des problèmes dans les logiciels que les attaquants peuvent exploiter pour prendre le contrôle d’une application, voler des données, perturber le service aux utilisateurs ou causer d’autres dommages. En raison de la complexité des applications et des environnements dans lesquels elles fonctionnent, il est pratiquement impossible d’empêcher les vulnérabilités d’exister dans les logiciels. La meilleure défense contre les vulnérabilités consiste à déployer des outils capables de les détecter et d’y remédier dès leur apparition.

Il existe de nombreux types de vulnérabilités logicielles, notamment des défauts de codage, des dépendances vulnérables ou des composants tiers et des erreurs de configuration. Les vulnérabilités logicielles se présentant sous de nombreuses formes, il n’existe pas de méthode simple pour y remédier. Au contraire, comme l’explique cet article, les organisations ont besoin d’une approche bien planifiée et multidimensionnelle pour gérer les vulnérabilités logicielles.

Principaux types de vulnérabilités logicielles

La première étape de la gestion de vulnérabilités logicielles (Software Vulnerability Management) consiste à comprendre leur origine et leur aspect. Les types de vulnérabilités les plus courants sont les suivants :

  • Défauts de codage : Des problèmes dans la manière dont les développeurs écrivent leur code source peuvent favoriser les attaques. Par exemple, l’absence de validation correcte des données peut permettre à des attaquants d’injecter un code malveillant dans une application afin d’accéder à des données sensibles ou de prendre le contrôle de l’application.
  • Composants vulnérables : Les composants tiers qui sont introduits dans une application, tels que les bibliothèques ou les modules open source, peuvent contenir des failles qui permettent des violations.
  • Défauts de configuration : Des erreurs dans la configuration des applications ou de leurs environnements hôtes peuvent mener à des attaques. Par exemple, des contrôles d’accès trop permissifs peuvent permettre à un utilisateur d’accéder à des données dans une application qu’il ne devrait pas pouvoir consulter.

Le risque posé par les vulnérabilités logicielles peut varier en fonction de la nature de la vulnérabilité et de l’application ou des données qu’elle affecte. Par exemple, une vulnérabilité qui peut être exploitée à distance (par opposition à un accès physique à un environnement local) est généralement considérée comme présentant un niveau de risque élevé. Une vulnérabilité qui ne peut être exploitée que dans certaines conditions représente un risque moins élevé qu’une vulnérabilité qui peut être exploitée dans n’importe quel environnement. Enfin, le risque d’une vulnérabilité permettant une attaque par déni de service est bien plus important lorsque des systèmes critiques sont menacés (par exemple un appareil médical IoT) que lorsqu’il s’agit d’une application logicielle non critique.

Procédure de gestion des vulnérabilités

La protection contre les vulnérabilités logicielles nécessite une approche progressive qui vous permet de trouver, d’évaluer et de corriger les vulnérabilités à tous les niveaux de votre pile logicielle. Idéalement, ce processus est automatisé à l’aide d’outils qui recherchent, évaluent et aident à remédier aux vulnérabilités avant et après le déploiement du logiciel dans la production.

Étape 1 : Identifier les composants logiciels

À l’aide d’outils d’analyse de composition logicielle, analysez votre logiciel afin de déterminer les composants qu’il contient. Une analyse complète est importante, car vos applications peuvent contenir des dépendances, telles que des modules open source, qui ne sont pas documentées et que vous n’auriez pas découvertes autrement.

Pour identifier le plus grand nombre possible de risques potentiels, vous devez analyser à la fois le code source de l’application (s’il est disponible) et les fichiers binaires de l’application, tels que les images de conteneurs ou les fichiers exécutables.

Vous devez également effectuer des analyses à plusieurs stades du cycle de développement de l’application. Commencez par analyser le code source. Ensuite, analysez les fichiers binaires de l’application après l’avoir compilée, mais avant de la déployer. Enfin, envisagez d’analyser les applications en production afin de fournir une troisième couche de défense contre les risques potentiels. Les plateformes logicielles CI/CD peuvent vous aider à mettre en place une analyse automatisée à chaque étape du processus de livraison des logiciels.

Étape 2 : Associer les composants aux vulnérabilités

Après avoir identifié les composants logiciels, analysez les bases de données de vulnérabilités pour déterminer quels composants présentent des vulnérabilités connues et si ces vulnérabilités affectent la version spécifique du composant logiciel que vous utilisez.

Vous pouvez simplifier ce processus de manière significative en utilisant un scanner de vulnérabilité tel que JFrog Xray qui effectue un scan profond et itératif afin de détecter les vulnérabilités dans toutes les couches d’une application et de ses dépendances.

Xray vulnerability scanning

Analyse des vulnérabilités avec JFrog Xray.

Étape 3 : Effectuer des tests statiques de sécurité des applications

Les tests statiques de sécurité des applications (SAST) vous permettent de détecter les vulnérabilités dans le code source que vous avez développé en interne (également connu sous le nom de code source de première partie). En analysant le code source de votre organisation, vous pouvez identifier les vulnérabilités potentielles que vos développeurs ont introduites par inadvertance dans une application.

Étape 4 : Effectuer des tests dynamiques de sécurité des applications

Si l’analyse du code source et des fichiers binaires des composants d’origine externe permet de détecter de nombreuses vulnérabilités, certains risques – en particulier ceux qui proviennent d’un code personnalisé et propriétaire qui n’est pas répertorié dans les bases de données de vulnérabilités – sont susceptibles de ne pas être détectés à l’aide de ces approches. De nombreux scanners de vulnérabilité se concentrent sur l’analyse de la composition logicielle (SCA) et n’identifient que les vulnérabilités qui ont déjà été identifiées et signalées dans le code source accessible au public ou dans les dépendances des applications.

Pour détecter d’autres types de risques, vous devez également effectuer des tests dynamiques de sécurité des applications (DAST). Les outils DAST exécutent des tests destinés à identifier des vulnérabilités en matière de sécurité ou des faiblesses en interagissant avec des applications en cours d’exécution. Par exemple, un outil DAST peut injecter des commandes malveillantes dans une application afin d’évaluer si l’application les bloque.

Étape 5 : Configurations de l’environnement d’analyse

Comme indiqué plus haut, certaines vulnérabilités logicielles ne proviennent pas des applications, mais de la manière dont les applications (ou les environnements qui les hébergent) sont configurées. Vous pouvez détecter ces vulnérabilités à l’aide d’outils d’audit de configuration, qui analysent automatiquement les configurations des applications et vous signalent les paramètres qui ne semblent pas sûrs.

Par exemple, un auditeur de configuration peut signaler une configuration de pare-feu qui permet à n’importe qui sur Internet d’accéder à une application qui ne devrait être exposée qu’à un réseau privé.

En savoir plus sur les vulnérabilités de type « zero-day »

Log4shell Zero-Day Vulnerability – également connue sous le nom de Log4j Vulnerability
SpringShell Zero-Day Vulnerability