Générations de graphes d’attaque pour l’analyse de risque

Encadrants : 

Occurrences : 

2019

Nombre d'étudiants minimum: 

2

Nombre d'étudiants maximum: 

4

Nombre d'instances : 

1

Il existe un modèle adapté à la modélisation du déroulement d’une attaque : le graphe d’attaque. Intuitivement, un graphe d’attaque représente les enchaînements d’action qu’un attaquant peut tenter et les dépendances de type pré-requis / conséquences pour chaque attaque élémentaire. Dans ce contexte, les nœuds représentent des événements indésirés (e.g. mot passe connu de l’attaquant …), l’intérêt d’un tel graphe est de déterminer si il est possible pour l’attaquant de déclencher un événement à partir d’un état initial donné. Cela se traduit en une problématique de parcours de graphe. Ces graphes peuvent être « augmentés » par des étiquettes modélisant des probabilités de franchissement des arcs. Ceci permet de définir le probabilité d’atteindre un nœud à partir d’un sous ensemble des nœuds du graphe. Ceci est souvent interprété comme une mesure du risque encouru.

En pratique, les graphes modélisant l’ensemble des attaques réalisables par un attaquant donné sont grands et doivent être générés à partir d’une description textuelle de l’architecture du système (liste de machines, leurs configurations logicielles, règles de « pare-feu » ….) Un outil réalise déjà une telle génération : mulval. Cependant l’architecture doit être décrite en « prolog ». Cela fait que cette description est peu pratique pour un ingénieur et source d’erreurs. Cette description en programme prolog permet d’interroger la description du système à haut niveau d’abstraction pour générer les arcs du graphes d’attaque. Nous proposons de définir un langage plus adapté à la description de la structure du système et d’assurer la génération du graphe d’attaque à partir de ce modèle.

Le projet consistera d’abord à fixer un langage de description minimaliste d’architecture réseau permettant de décrire de manière compacte l’exemple « 3host » présenté dans MulVAL. Vous devrez donc définir sa grammaire (format BNF), puis générer le « code prolog » correspondant à l’interprétation de l’architecture en termes de services présents sur les machines d’un sous réseau, de vulnérabilité et d’événements indésirables pouvant se produire …. Le code devra être réalisé en Java et s’intégrer dans l’environnement Xtext qui facilite l’analyse syntaxique d’une grammaire BNF et l’intégration du « compilateur » dans Eclipse (i.e. vous allez développer une extension d’Eclipse). Aucune connaissance particulière ne sera nécessaire en sécurité en revanche ce projet nécessite d’être à l’aise en Java et en algorithmique.

Tutoriaux et références