Hubert, Nathan (2018). Analyse statique de code : Réduction des fausses alertes par apprentissage machine. Mémoire de maîtrise électronique, Montréal, École de technologie supérieure.
Prévisualisation |
PDF
Télécharger (4MB) | Prévisualisation |
Prévisualisation |
PDF
Télécharger (563kB) | Prévisualisation |
Résumé
Les vulnérabilités de sécurité présentes dans les applications Web sont extrêmement dangereuses, à l’heure où n’importe quel attaquant ayant un minimum de connaissances et d’outils peut exploiter avec succès l’une d’entre elles. Les conséquences d’un tel exploit peuvent être très graves : vol de données sensibles, déni de service du site, etc. Il est donc fondamental pour un développeur de détecter ces failles avant la mise en production. Pour ce faire, de nombreuses méthodes existent, l’analyse statique étant probablement la plus utilisée. Le principe est de parcourir le code sans l’exécuter, afin de trouver des modèles caractéristiques de vulnérabilités : cette méthode, en plus d’être très peu coûteuse en temps et ressources, est très efficace. Cependant, elle génère en général de nombreuses fausses alertes, appelées faux positifs : il en résulte que le développeur, recevant le rapport d’analyse, doit faire manuellement le tri entre ces alertes, ce qui peut être extrêmement coûteux en temps et donc mener à des erreurs.
Ce mémoire a pour but de pallier ce problème en ajoutant la notion d’apprentissage machine : automatiser le tri des vulnérabilités permettrait au développeur de gagner un temps considérable, tout en limitant le risque d’erreurs. Notre étude est basée ici sur l’outil Find Security Bugs, un analyseur statique de code Java. Dans un premier temps, nous avons sélectionné des caractéristiques représentant avec précision chaque alerte, afin que l’algorithme d’apprentissage automatique puisse différencier une vraie vulnérabilité d’un faux positif. Par la suite, à partir du rapport d’alertes de l’outil, ainsi que d’une representation graphique des variables en jeu, nous avons pu extraire ces caractéristiques pour chaque vulnérabilité potentielle, et entraîner différents algorithmes afin d’éliminer le maximum de fausses alertes.
Notre solution a été testée sur la suite Juliet, contenant de nombreuses vulnérabilités déjà étiquetées. Les résultats ont été très satisfaisants : plus de 85% des fausses alertes ont pu être détectées par l’apprentissage machine. Nous avons également mis en évidence qu’il n’existe pas réellement d’algorithme plus performant que les autres dans notre contexte, mais que ceux-ci peuvent être utilisés conjointement pour optimiser les résultats. Enfin, notre solution est flexible, et s’intègre parfaitement avec Find Security Bugs, sans ajout de complexité : le développeur est libre de l’utiliser comme il l’entend.
Titre traduit
Static code analysis : reduction of false alerts using machine learning
Résumé traduit
Security vulnerabilities in web applications are extremely dangerous, especially nowadays, when anyone with a bit of knowledge and the right tools can successfully exploit them. This can have bad consequences: theft of sensitive data, denial of service, etc. Therefore, it is crucial for a developer to detect these vulnerabilities before committing changes. Among the methods used to do that, static code analysis is the most common. The concept is to analyze the code without executing it, in order to find specific vulnerability patterns: overall, this process is very effective and efficient. However, this method generates a lot of false reports, called false positives: the developer has no other choice but to manually sort these alerts, which can be very time-consuming, and thus lead to errors.
The goal here is to overcome this problem by using machine learning technic: by automating the sorting of reports, the developer will save a considerable amount of time, and the risk of errors will be reduced. Our study is based on Find Security Bugs, a static analyzer for Java code. First, we selected some features that represent precisely each alert, so that the machine learning algorithm can make a difference between true vulnerabilities and false positives. Then, we extracted those features from the analyzer’s reports and a graphic representation of the code, and we trained different algorithms to eliminate false positives.
We tested our solution on the Juliet test suite, which contains a lot of already labeled vulnerabilities. The results were good: more than 85% of false reports were detected by the machine learning algorithms. We also showed that there is not an optimal algorithm in our context, but it is possible to combine some of them to optimize the results. Finally, our solution is flexible, and integrates seamlessly with Find Security Bugs, without additional complexity: the developer is free to use it the way he wants.
Type de document: | Mémoire ou thèse (Mémoire de maîtrise électronique) |
---|---|
Renseignements supplémentaires: | "Mémoire présenté à l'École de technologie supérieure comme exigence partielle à l'obtention de la maîtrise avec mémoire en génie des technologies de l'information". Comprend des références bibliographiques (pages 83-86). |
Mots-clés libres: | vulnérabilité de sécurité, analyse statique de code, apprentissage machine, faux positifs |
Directeur de mémoire/thèse: | Directeur de mémoire/thèse Robert, Jean-Marc |
Programme: | Maîtrise en ingénierie > Génie |
Date de dépôt: | 04 avr. 2019 19:15 |
Dernière modification: | 04 avr. 2019 19:15 |
URI: | https://espace.etsmtl.ca/id/eprint/2256 |
Gestion Actions (Identification requise)
Dernière vérification avant le dépôt |