Crédit :Markus Spiske sur Unsplash
Une équipe de chercheurs de la société de R&D Draper et de l'Université de Boston a développé un nouveau système de détection de vulnérabilité à grande échelle utilisant des algorithmes d'apprentissage automatique, ce qui pourrait aider à découvrir les vulnérabilités logicielles plus rapidement et plus efficacement.
Les pirates et les utilisateurs malveillants proposent constamment de nouvelles façons de compromettre les systèmes et applications informatiques, généralement en exploitant les vulnérabilités de la sécurité logicielle. Les vulnérabilités logicielles sont de petites erreurs commises par les programmeurs qui ont développé un système capable de se propager rapidement, notamment par le biais de logiciels open source ou par la réutilisation et l'adaptation de code.
Chaque année, des milliers de ces vulnérabilités sont signalées publiquement à la base de données Common Vulnerabilities and Exposures (CVE), tandis que de nombreux autres sont repérés et corrigés en interne par les développeurs. S'ils ne sont pas correctement traités, ces vulnérabilités peuvent être exploitées par des attaquants, souvent avec des effets dévastateurs, comme le prouvent de nombreux exploits récents de grande envergure, tels que le bogue Heartbleed et le cryptoworm ramsomware WannaCry.
Généralement, les outils existants d'analyse des programmes ne peuvent détecter qu'un nombre limité d'erreurs potentielles, qui reposent sur des règles prédéfinies. Cependant, l'utilisation généralisée de référentiels open source a ouvert de nouvelles possibilités pour le développement de techniques qui pourraient révéler des modèles de vulnérabilité de code.
Les chercheurs de Draper et de Boston ont développé un nouvel outil de détection de vulnérabilité qui utilise l'apprentissage automatique pour la détection automatisée des vulnérabilités dans le code source C/C++, qui a déjà donné des résultats prometteurs.
L'équipe a compilé un grand ensemble de données avec des millions de fonctions open source et l'a étiqueté à l'aide de trois outils d'analyse statiques (pré-exécution), à savoir Clang, Cppcheck et Flawfinder, qui sont conçus pour identifier les exploits potentiels. Leur ensemble de données comprenait des millions d'exemples de code C et C++ au niveau des fonctions tirés de la suite de tests SATEIV Juliet, Distribution Debian Linux, et les référentiels Git publics sur GitHub.
« En utilisant ces ensembles de données, nous avons développé un outil de détection de vulnérabilité rapide et évolutif basé sur un apprentissage approfondi de la représentation des fonctionnalités qui interprète directement le code source lexé, ", écrivent les chercheurs dans leur article.
Comme les langages de programmation sont à certains égards similaires aux langages humains, les chercheurs ont conçu une technique de détection de vulnérabilité qui utilise le traitement du langage naturel (NLP), une stratégie d'IA qui permet aux ordinateurs de comprendre et d'interpréter le langage humain.
« Nous exploitons des approches d'extraction de caractéristiques similaires à celles utilisées pour la classification des sentiments de phrases avec des réseaux de neurones convolutifs (CNN) et des réseaux de neurones récurrents (RNN) pour la classification des vulnérabilités des sources au niveau des fonctions, " expliquent les chercheurs dans leur article.
Ils ont combiné la PNL avec la forêt aléatoire (RM) ; un algorithme puissant qui crée un ensemble d'arbres de décision à partir de sous-ensembles sélectionnés au hasard de l'ensemble de données d'apprentissage, puis les fusionne, obtenir généralement des prédictions plus précises.
Les chercheurs ont testé leur outil à la fois sur de vrais progiciels et sur l'ensemble de données de référence NIST STATE IV.
"Nos résultats démontrent que l'apprentissage approfondi de la représentation des fonctionnalités sur le code source est une approche prometteuse pour la détection automatisée des vulnérabilités logicielles, " ont-ils écrit. " Nous avons appliqué une variété de techniques de ML inspirées des problèmes de classification dans le domaine du langage naturel, les affiner pour notre application, et obtenu les meilleurs résultats globaux en utilisant des fonctionnalités apprises via un réseau de neurones convolutifs et classées avec un algorithme d'arbre d'ensemble."
Jusque là, leurs travaux se sont concentrés sur le code C/C++, mais leur méthode pourrait également être appliquée à tout autre langage de programmation. Ils ont spécifiquement choisi de créer un lexer C/C++ personnalisé car cela produirait une représentation simple et générique du code source de la fonction, ce qui est idéal pour la formation en apprentissage automatique.
© 2018 Tech Xplore