Qu’est-ce qu’une vulnérabilité logicielle?
Comprendre les vulnérabilités logicielles est essentiel pour gérer les menaces de sécurité modernes. Que votre entreprise dépende de logiciels créés par des tiers, de logiciels conçus par vos propres développeurs ou d’une combinaison des deux, la capacité à détecter et à gérer les vulnérabilités logicielles est absolument essentielle pour assurer la sécurité des logiciels et corriger les failles de sécurité le plus tôt possible.
Cet article explique ce que sont les vulnérabilités logicielles, comment elles fonctionnent et quelles sont les meilleures pratiques pour s’en protéger.
Qu’est-ce qu’une vulnérabilité logicielle ?
Une vulnérabilité logicielle est un défaut dans un logiciel qui pourrait permettre à un pirate de prendre le contrôle d’un système.
Comme nous l’expliquons plus en détail ci-dessous, les défauts à l’origine des vulnérabilités logicielles peuvent résulter de failles dans la conception du logiciel, de problèmes dans le code source du logiciel, d’une mauvaise gestion des données ou des paramètres de contrôle d’accès au sein de l’application, ou de tout autre type de problème que les attaquants pourraient potentiellement exploiter.
Que peut faire un attaquant avec une vulnérabilité logicielle ?
Un attaquant peut exploiter une vulnérabilité logicielle pour voler ou manipuler des données sensibles, relier un système à un botnet, installer une porte dérobée (en anglais, backdoor) ou implanter d’autres types de logiciels malveillants. En outre, après avoir pénétré dans un hôte réseau, l’attaquant peut utiliser cet hôte pour pénétrer dans d’autres hôtes du même réseau.
Les exploits spécifiques qu’un attaquant peut exécuter varient d’une vulnérabilité à l’autre. Toutes les vulnérabilités ne permettent pas aux attaquants de causer les mêmes types de dommages, et toutes les vulnérabilités ne créent pas des risques aussi graves.
Cependant, toutes les vulnérabilités présentent au moins un certain niveau de risque pour les applications qu’elles affectent, ainsi que pour les environnements qui hébergent ces applications et toutes les ressources qui s’intègrent à ces applications.
Comment les vulnérabilités sont-elles exploitées ?
Pour tirer parti d’une vulnérabilité informatique, un attaquant doit d’abord la découvrir. Les attaquants peuvent le faire de différentes manières. Une technique courante pour trouver des vulnérabilités consiste à utiliser un logiciel de balayage de ports, comme l’outil open source nmap, qui peut collecter des informations sur les services en cours d’exécution sur un serveur ou un ordinateur, et même sur le système d’exploitation spécifique qui est installé. Grâce à ces informations, l’attaquant peut déterminer si les services ou le système d’exploitation sont sujets à des vulnérabilités connues.
Ensuite, l’attaquant doit concevoir une méthode pour exploiter la vulnérabilité. Là encore, les méthodes varient considérablement, mais elles peuvent impliquer des techniques telles que l’injection d’un code malveillant dans une application ou le contournement des contrôles d’accès. Certaines vulnérabilités peuvent être exploitées à distance, ce qui signifie que les attaquants peuvent tirer parti de la faiblesse de la sécurité sur le réseau. D’autres nécessitent un accès physique direct à l’infrastructure qui héberge le logiciel vulnérable.
Si la faille de sécurité est exploitée avec succès, l’attaquant aura la possibilité d’effectuer des actions malveillantes au sein de l’application compromise ou de son système hôte. Selon la nature de la vulnérabilité, ces actions peuvent consister à exfiltrer des données sensibles, à exécuter des commandes malveillantes, à implanter des logiciels malveillants ou à perturber des services critiques afin de causer des problèmes à l’entreprise.
Quelles sont les causes des vulnérabilités logicielles ?
Comme nous l’avons vu plus haut, les causes potentielles d’une vulnérabilité logicielle sont nombreuses. Certaines applications sont vulnérables en raison de défauts de conception généraux, comme une architecture qui implique le transfert de données sensibles sur des réseaux non sécurisés. Dans d’autres cas, les vulnérabilités résultent d’erreurs de codage spécifiques qui introduisent des vulnérabilités telles que les suivantes :
- Buffer overflows (fr. dépassements de tampon) : ils permettent à quelqu’un d’introduire dans un champ de saisie plus de données que ce que le champ est censé permettre. Un attaquant peut tirer parti de cette situation en plaçant des commandes malveillantes dans la partie de dépassement du champ de données, qui s’exécutent alors.
- Injection SQL : cela pourrait permettre à un attaquant d’injecter des commandes malveillantes dans la base de données d’une application web. L’attaquant peut le faire en entrant des commandes en langage de requête structuré (SQL) spécialement conçues dans un champ de données d’un formulaire d’application web ou dans l’URL de l’application web. Si l’attaque réussit, l’attaquant non autorisé et non authentifié sera en mesure d’extraire ou de manipuler des données de la base de données.
- Bibliothèques tierces : de nombreux programmeurs utilisent des bibliothèques de code tierces, plutôt que d’essayer d’écrire tous les logiciels à partir de zéro. Cela peut être un véritable gain de temps, mais cela peut aussi être dangereux si la bibliothèque présente des vulnérabilités. Avant d’utiliser l’une de ces bibliothèques, les développeurs doivent vérifier qu’elles ne présentent pas de vulnérabilités.
- Interfaces de programmation d’applications (API) : une API, qui permet aux logiciels de communiquer entre eux, peut également introduire une vulnérabilité logicielle. De nombreuses API ne sont pas configurées avec des politiques de sécurité strictes, ce qui pourrait permettre à un attaquant non authentifié de s’introduire dans un système.
Le respect des meilleures pratiques lors de la conception des applications et de l’écriture du code sont des méthodes efficaces pour réduire le risque de vulnérabilité. Des outils tels que les scanners d’analyse de la composition des logiciels peuvent également aider à identifier certaines des failles à l’origine des vulnérabilités. En outre, des pratiques telles que la sécurité shift left, qui aident les développeurs à donner la priorité à la sécurité dès le début du cycle de livraison des logiciels (SDLC), sont utiles pour minimiser le risque d’introduire des vulnérabilités dans le code source.
Néanmoins, étant donné la complexité de la plupart des applications, il est pratiquement impossible de garantir que les problèmes à l’origine des vulnérabilités ne sont pas présents dans une application. Vous ne devez donc jamais supposer qu’une application est exempte de vulnérabilité. Vous devez prendre des mesures pour détecter les vulnérabilités et y remédier, quel que soit le degré de confiance que vous avez dans la sécurité du développement de votre logiciel.
Vulnérabilités des logiciels et logiciels open source
Les vulnérabilités logicielles peuvent affecter à la fois les logiciels propriétaires (c’est-à-dire les logiciels dont le code source n’est accessible qu’à l’entreprise qui les développe) et les logiciels open source (dont le code source est accessible au grand public).
Cependant, les vulnérabilités qui affectent les logiciels open source présentent un risque supplémentaire à certains égards. L’une des principales raisons est que, comme tout le monde peut consulter le code source ouvert, il est plus facile dans certains cas pour les attaquants d’identifier des failles dans le code source qu’ils peuvent exploiter. Les logiciels propriétaires ne sont pas soumis à ce risque, car dans la plupart des cas, les attaquants ne peuvent pas consulter le code source (bien qu’ils puissent déployer d’autres techniques pour tenter de détecter les vulnérabilités).
L’autre raison principale est que les logiciels open source peuvent généralement être réutilisés librement et que les entreprises s’appuient régulièrement sur les logiciels open source. Ils peuvent déployer des applications open source en gros, copier des parties d’une base de code open source dans leur propre application ou inclure des bibliothèques open source dans les dépendances de leurs applications. Ce faisant, ils créent le risque que des vulnérabilités affectant le code source ouvert puissent avoir un impact sur leur entreprise.
Cela ne veut pas dire que vous ne devriez pas utiliser des logiciels open source, qui offrent de nombreux avantages dans de nombreux cas. En revanche, cela signifie qu’il est essentiel de savoir de quel code source ouvert votre entreprise dépend et si des vulnérabilités affectent ce code.
Comment gérer les vulnérabilités logicielles : analyse de vulnérabilité et Cie
La meilleure façon de traiter une vulnérabilité logicielle est de l’empêcher de se produire. Les développeurs de logiciels doivent apprendre les pratiques de codage sécurisées et les tests de sécurité automatiques doivent être intégrés dans l’ensemble du processus de développement des logiciels.
Mais là encore, il est impossible de garantir que le code dont dépend votre entreprise n’est pas sujet à des vulnérabilités. C’est pourquoi il est important de tirer parti de l’analyse des vulnérabilités. L’analyse des vulnérabilités est le processus qui consiste à analyser automatiquement le code source et/ou les fichiers binaires d’une application pour y déceler les vulnérabilités connues. Si les scanners détectent un composant d’application connu pour être vulnérable, ils alertent les développeurs afin qu’ils corrigent le problème.
Les scanners de vulnérabilité ne détectent pas toujours toutes les vulnérabilités potentielles ; en particulier, ils peuvent ne pas être en mesure de détecter des vulnérabilités qui n’ont pas encore été identifiées ou divulguées publiquement. Cependant, ils protègent contre la grande majorité des vulnérabilités.
Une fois les vulnérabilités détectées, vous devez évaluer la gravité de chacune d’entre elles. Selon l’ampleur des dommages qu’une vulnérabilité peut causer et la facilité avec laquelle elle peut être exploitée, elle peut être plus ou moins grave que d’autres vulnérabilités.
Enfin, formulez et exécutez un plan pour atténuer la vulnérabilité. Le processus d’atténuation varie en fonction de la nature de la vulnérabilité, mais dans de nombreux cas, la correction de la vulnérabilité implique la mise à jour du code source, la mise en œuvre d’un patch ou la mise à jour vers une version plus récente du composant d’application vulnérable. Si aucun correctif n’est disponible et que vous ne pouvez pas le mettre en œuvre vous-même, vous pouvez prendre des mesures pour empêcher l’exploitation de la vulnérabilité, par exemple en mettant à jour la configuration de l’application de manière à ce que les conditions requises pour l’exploitation ne soient pas réunies.