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.
| Date | 30 juil. 2018 |
|---|
| langue originale | Français |
|---|
| Établissement diplômant | - École de technologie supérieure
|
|---|
| Superviseur | Jean-Marc Robert (Directeur(-trice)) |
|---|
- vulnérabilité de sécurité
- analyse statique de code
- apprentissage machine
- faux positifs
Hubert, N. (Auteur(e)),
Robert (Directeur(-trice)),
30 juil. 2018Thèses et mémoires: Mémoire de maîtrise › Maîtrise en ingénierie: Génie