IMA3/IMA4 2020/2022 P6 : Différence entre versions

De Wiki de Projets IMA
(Partie réseau)
(Avancé du projet)
Ligne 151 : Ligne 151 :
  
  
==Avancé du projet==
+
=Avancé du projet=
 
===Séance 1===
 
===Séance 1===
  

Version du 6 janvier 2022 à 00:38

Présentation

Contexte

De nos jours, de plus en plus d’appareils électroniques ont besoin d’une connexion internet pour fonctionner. En outre, la majeure partie de nos données sont conservées sur le cloud et transitent par le biais d’internet. Il est donc nécessaire pour des grandes entreprises ou même des particuliers de pouvoir sécuriser ces données et ces appareils. Le réseau doit être protégé de toutes attaques malveillantes. Une manière de sécuriser le réseau est de détecter qui peut être un utilisateur malveillant, c'est que nous allons faire dans ce projet.

Description

Pour identifier les utilisateurs suspects voir malveillant, nous allons écouter le réseau et au travers des différents paquets échangés essayer de détecter les tentatives de connexions suspectes. La récupération des données du paquet suspect nous permet d'identifier la machine et permettrait d'isoler ou de bannir cette utilisateur du réseau mais ce n'est pas dans le cadre du projet. Pour écouter le réseau nous utilisons Wireshark, l'écoute génère un fichier avec l'extension .pcap que nous allons traiter en Python. Le fichier est .pcap est la liste des paquets écoutés. Avec python, nous allons analyser ces listes de paquets avec TensorFlow un outil open source d'apprentissage automatique et la bibliothèque Keras permettant d'interagir avec les algorithmes de langages d'apprentissage profond. L'objectif est d'analyser les différents paquets pour en identifier les comportements suspects. Cependant, nous devons définir ce qu'est un comportement suspect en analysant les différents protocoles wifi.

Etat de l'art

Partie Réseau

La partie du réseau que nous allons étudier/analyser est la Wi-Fi. Nous nous pencherons donc sur la composition des trames Wi-Fi qui se basent sur le standard IEE 802.11.

Trame 802.11

                                        Trame 802.11.png

Voici la description d'une trame Wi-Fi, ce qui nous intéresse dans notre projet ce sont les données MAC. Le préambule ainsi que l'en-tête PLCP sont présents pour permettre une connexion ainsi qu'une synchronisation avec les points d'accès (couche physique/niveau 1).

Explication des différents champs

-Contrôle de trame (2 octets) : donne des informations sur la nature de la trame

-Durée (2 octets) : donne la durée de la séquence en ms

-Adresse 1,2 et 3 (3*6 octets) : Tout dépend du mode de fonctionnement (ad-hoc ou infrastructure). Le plus souvent ce sera en mode infrastructure avec l'adresse 1 qui désigne l'adresse MAC du point d'accès, l'adresse 2 désignant la station source et l'adresse 3 désignant la station destination.

-Contrôle séquence (2 octets) : composé d'un numéro de séquence attribué à chaque trame sur 12 bits ainsi que numéro de fragment sur 4 bits si la trame est fragmentée.

-Corps de la trame(0 à 2312 octets) : trames de niveaux supérieurs qui sont encapsulés dans la trame 802.11

-CRC (4 octets) : somme de contrôle

Mode moniteur

Maintenant que nous comprenons le contenu d'un paquet Wi-Fi, nous souhaitons capturer tous ces paquets afin de les étudier. Il faut savoir qu'il existe plusieurs mode de fonctionnement d'une carte réseau. Le plus courant est le mode infrastructure qui va permettre de communiquer avec les autres appareils. Il existe aussi le mode moniteur qui nous permet d'écouter le trafic réseau et de capturer les paquets. Le mode moniteur permet l'écoute et l'analyse passive des données circulant sur le réseau. Dans notre projet, nous utiliserons ce mode de fonctionnement pour sniffer les trames 802.11 à l'aide d'un logiciel de sniffing. Cependant, une fois dans ce mode, il nous est impossible de communiquer avec d'autres appareil au travers de ce réseau puisque l'appareil n'est pas connecté à un point d'accès (elle n'a pas d'adresse IP définie).

Capture Réseau

Aujourd'hui, beaucoup d'utilitaire sont développés afin de capturer des paquets réseau et les analyser. Les logiciels vont analyser les paquets afin de décrypter et ressortir les infos qu'ils transportent. Les logiciels comme Kismet et Wireshark permettent à un utilisateur de faire de la surveillance réseau manuellement. L'utilitaire Aircrack quant à lui permet de cracker des clés Wi-Fi en s'appuyant sur le mode moniteur de la carte réseau. Nous nous appuierons donc sur ces logiciels afin de réaliser notre projet. Les fichiers de capture de paquets sont sous l'extension pcap et sont lisibles par des analyseurs de réseau.

Réalisation du projet

Nous avons décidé de décomposer notre projet en deux grandes parties :

-la capture réseau et la récupération des différentes données à étudier.

-le développement de l'algorithme de machine learning qui va analyser les données par lui même afin de détecter les potentielles menaces.

Partie réseau

Wireshark

Nous souhaitons récupérer les données importantes des trames Wi-Fi afin de les analyser par la suite à l'aide de notre algorithme de machine learning. Pour cela nous allons réaliser cette partie en deux temps. Premièrement, la capture des paquets. Puis l'extraction des données en vue de l'analyse.

Pour réaliser la capture des paquets, nous pouvions utiliser plusieurs utilitaires tels que Wireshark, dumpcap, tcpdump et Aircrack.

Lors du premier semestre, nous nous étions penchés sur l'utilisation d'Aircrack. Cependant, ce choix ne s'est pas révélé être le bon puisque nous avons constaté que les paquets étaient certes capturés mais les informations importantes qui permettraient une analyse et ne détection des menaces n'étaient pas récupérées. Nous avons donc dû changer de logiciel de sniffing lors de ce second semestre afin de capturer des paquets en entier.

Nous nous sommes donc penchés sur la suite Wireshark. Wireshark sniffe, capture les paquets et les analyse également. Le logiciel Wireshark est utilisable avec une interface graphique. Ce qui ne nous arrange pas puisque nous voulons automatiser la capture/pré-analyse. Nous passerons donc par la commande "dumpcap" qui est la version en lignes de commande de Wireshark.


Liste des commandes utilisées :

-f

Permet de capturer seulement certain types de paquets. Par exemple -f arp permet de capturer seulement les paquets ARP

-I

Met la carte en mode routeur et nous permet de capturer tous les paquets 802.11 circulant sur le réseau

-P

Permet d'obtenir un fichier d'extension pcap à la place d'un fichier pcapng.

-a duration:time

arrête la capture après un temps "time" en secondes. exemple dumpcap -a duration:30 fait une capture de paquets pendant 30 secondes.


Nous sommes donc arrivés à une capture par le biais de la commande suivante :

dumpcap -I -P -a duration:60 -f "type mgt or type ctl or type data"

Cette commande nous permet de capturer tous les paquets 802.11 en passant notre carte en mode moniteur pendant une durée de 60 secondes. Le filtre -f permet d'ignorer les paquets malformés ou corrompus. En pré-analysant les différents trames Wifi, nous serons capable de récupérer les informations nécessaires.

Nous voulions ensuite passer sur un analyseur de trame pour récupérer les données. Nous avons essayé d'utiliser la librairie scapy une librairie python pour ressortir les informations des paquets mais cela ne s'est pas révélé concluant. Les informations récupérées n'étant pas les bonnes.

En observant les données demandées pour l'algorithme de Machine Learning, nous nous sommes rendu compte que l'analyse ne devait pas se faire paquets par paquets mais plutôt statistiquement, c'est à dire en observant les connexions entre deux adresses, leur nombre,....

Nous avons donc décidé de nous tourner vers l'utilitaire tshark qui nous permet de préanalyser les fichiers de capture d'extension pcap. Nous allons pouvoir sortir les données sous forme de tableaux exploitables par l'algorithme.


Format de la commande :

tshark -r fichieràlire -T fields -e nomduchampàrécupérer > fichier.csv

Argus

Partie Machine learning

Etude de cas 1 : Classement d'images

Etude de cas 2 : Une détection d'intrusion

Notre projet consiste à surveiller le réseau et les utilisateurs de ce réseau. La question qui se pose est alors la suivante : comment surveiller et analyser les milliers de données qui transitent sur ce réseau tous les jours ? Comment reconnaître un comportement malveillant ? C'est alors là que le machine learning devient intéressant. En effet,la détection d'un comportement malveillant revient à chercher une aiguille dans une botte de foin. Mais les algorithmes de Machine Learning permettent de traiter efficacement d'immenses quantités de données.

Réseaux de neurones convolutionnels

Les algorithmes de Machine Learning reposent sur des réseaux de neurones convultionnels (CNN). Ces derniers sont composés de couches de neurones où chaque neurone est relié à tous les neurones de la couche précédente. En python, avec la commande "model.add" nous pouvons ajouter les couches nécessaires à notre réseau en décrivant chaque couche avec différents paramètres.

Pour notre projet, nous allons devoir utiliser le Deep Learning. Le Deep Learning est une forme spécifique de Machine Learning où des couches cachées sont présentes entre les différentes couches de neurones. Il est préférable d'utiliser le Deep Leraning pour deux raisons :

   - Notre algorithme se forme tout seul, nous avons juste à lui fournir des données pour s'entraîner
   - Le Deep Learning est plus efficace que le Machine Learning grâce à ses réseaux de neurones profonds

Paramètres permettant la détection d'intrusions

Différents paramètres sélectionnés au préalable permettent de surveiller le réseau. Ces paramètres constituent une couche d'entrée du réseau de neurones. La couche de sortie nous donne la classification des comportements malveillants. Les paramètres extraits du réseau sont les suivants :

 - la durée totale de l'enregistrement
 - le nombre de paquets envoyés de la destination à la source
 - le nombre d'octets envoyés de la source à la destination
 - le nombre d'octets envoyés de la destination à la source
 - le nombre de paquets par seconde 
 - Time To Live (TTL) de la source à la destination
 - TTL de la destination à la source
 - Nombre de bits par seconde pour la source
 - Nombre de bits par seconde pour la destination
 - Moyenne de la taille des paquets de flux transmis par l'adresse IP source
 - Moyenne de la taille des paquets de flux transmis par l'adresse IP destination

Travailler avec ces 16 paramètres différents nous permet de détecter 9 types d'attaque différents : fuzzers, analysis, backdoors, DoS, exploits, generic, shellcode, worms et reconnaissance.

Réalisation de l'algorithme

Pour créer l'algorithme de Deep Learning maintenant bien défini, il est conseillé d'utiliser Python. Ainsi, il est possible d'utiliser deux bibliothèques écrites en Python particulièrement utiles pour créer notre algorithme : Tensorflow et Keras.

Tensorflow est un outil open source d'apprentissage automoatique. C'est un outil très utilisé dans le domaine de l'intelligence artificielle et plus particulièrement de l'apprentissage machine.

Keras est quant à lui permet d'interagir avec les algorithmes de réseaux de neurones profonds et d'apprentissage automatique comme Tensorflow cité précedemment.

La combinaison de ces deux bilbiothèques permet de créer notre algorithme de Deep Learning.

Fonctionnement de l'algorithme

Un premier programme training-set permet de créer le modèle séquentiel avec plusieurs entrées et une seule sortie. L'utilisation de Convolution (Conv2D) et ReLU permettent des réduire la taille des données (filtre). L'utilisation de MaxPooling permet elle d'échantillonner les données pour diminuer leur dimension. Nous diminuons ainsi les données jusqu'à obtenir une seule sortie.

UNE PARTIE PROCESS PERMET DE TRAITER LES DONNES DE TRAINING ET DE TEST

Nous pouvons ensuite générer notre modèle séquentiel et l'entraîner avec nos données pour avoir un programme opérationnel. Une fois opérationnel, nous pouvons enregistrer ce modèle en format Keras H5 ou sous forme d'un fichier JSON.


Avancé du projet

Séance 1

Lors de cette séance nous avons du redéfinir les objectifs de notre projet pour repartir sur de bonnes bases. Les travaux que nous avons fait lors du semestre précédent sont à abandonner. Nous devons comme expliquer précédemment récupérer les paquets avec un fichier .pcap et ensuite les analyser pour trouver les comportements suspects avec un différents outils comme Tensorflow. Nous allons devoir définir ce qui est un comportement suspect et ce qui ne l'est pas. Nous nous sommes répartis les tâches. Théo et Tristan vont travailler sur l'analyse des données en Python et Simon et Valentin vont travailler sur la récupération des données grâce à Wireshark et ses différents fonctionnalités.

Séance 2

Lors de cette séance, nous devons continuer notre formation sur les différents outils pour l'analyse des données et nous devons continuer à améliorer la récupération des données en réfléchissant sur quelles données des vont nous être utiles pour déterminer le comportement des utilisateurs. Valentin et Simon se sont concentrés sur la capture de paquets avec l'utilitaire dumpcap. Ils ont notamment pu capturer des paquets de protocole Wi-Fi.

Séance 3

Le but de cette séance pour Valentin et Simon est de comprendre la structure d'un paquet Wi-Fi afin de déduire certains comportements suspects. Ils continuent aussi leurs recherches sur l'analyse automatique des paquets afin qu'ils soient traités par la suite par l'algorithme de machine learning. Du côté de Tristan et Théo, on se forme au machine learning (suivi des tutoriels de base de tri d'image...) et on essaie de voir quelles données traiter et comment les traiter pour réaliser notre projet.

Séance 4

Nous avons trouvé plusieurs bonnes documentations sur le Net Monitoring par Machine Learning (ou même Deep Learning). Nous essayons de mettre en place les techniques apprises, c'est ici que nous rencontrons plusieurs difficultés.Concernant la partie de capture et d'analyse des paquets, nous avons continué nos recherches afin d'obtenir les informations importantes du fichier pcap. Nous nous penchons donc vers l'utilisation de scapy.

Séance 5

Nous continuons nos recherches pour récupérer les informations du fichier pcap. A l'aide de scapy, nous avons réussi à ressortir des données importantes des paquets (addresse de destination, type de paquet,..). Un problème s'oppose à nous : les paquets malformés. Nous devons trouver un moyen d'ignorer ces paquets dans notre analyse afin d'avoir un paquet de données cohérent.

Séance 6

Au vu des données souhaitées par Théo et Tristan, nous passons sur l'utilisation de tshark pour l'analyse des paquets. En effet, tshark va nous permettre d'obtenir des données statistiques sur les discussions entre deux adresses. Nous utiliserons ainsi dumpcap pour la capture et tshark pour l'analyse des données capturées. L'utilisation de scapy devient donc inutile si nous réussissons à extraire les données avec tshark.