Prise en main de Scapy
Les fonctionnalités de Scapy
Scapy est un logiciel écrit en Python permettant d’interagir facilement avec le réseau. Par interaction avec le réseau, il faut comprendre avoir accès aux données qui sont transmises sur le réseau (on appelle cela le sniffing), mais aussi la possibilité de créer et d’envoyer des données sur celui-ci (on appelle cela le crafting). Cela vous permettra d’analyser le trafic réseau entre votre poste et une cible afin de voir comment celle-ci réagit si elle reçoit des informations erronées par exemple.
Installation de Scapy
Tout comme pour PyCharm, la procédure d’installation de Scapy sera détaillée selon le système d’exploitation cible. Scapy fonctionne mieux sous un environnement Linux que Windows. Certains bogues peuvent survenir, néanmoins les fonctionnalités de base ne devraient pas poser de problème.
1. Sous Windows 7
Scapy a plusieurs dépendances qu’il faut installer avant toute chose.
Chacun des fichiers suivants devra être téléchargé et exécuté :
-
WinPcap : http://www.winpcap.org/install/bin/WinPcap_4_1_3.exe
Cochez la case Automatically start the WinPcap driver at boot time.
-
PyPcap pour Python 2.7 : https://code.google.com/p/pypcap/issues/detail?id=36
Cliquez sur Download à la fin du premier message pour obtenir le fichier.
-
Libdnet pour Python 2.7 : http://dirk-loss.de/scapy/dnet-1.12.win32-py2.7.exe
Une fois ces dépendances installées, l’installation de Scapy peut commencer.
Rendez-vous sur http://www.secdev.org/projects/scapy/ et cliquez sur Scapy’s latest release (executable zip) pour télécharger l’archive.
Décompressez l’archive sur votre bureau et ouvrez un interpréteur de commandes.
Rendez-vous dans le dossier contenant les fichiers et lancez l’installation en tapant la commande suivante :
cd c:\Users\nomDeLUtilisateur\Bureau\Nom-du-dossier...
Sniffing de paquets
L’une des principales utilisations de Scapy est le sniffing de paquets. Un paquet est simplement un ensemble de données envoyé sur le réseau.
1. Qu’est-ce que le sniffing ?
Le sniffing est une technique qui consiste à se mettre en écoute sur le réseau afin de voir quels sont les échanges de données. Un sniffing réalisé au bon endroit peut permettre de récupérer des informations telles que des mots de passe, des noms de réseaux Wi-Fi voire dans certains cas des adresses e-mail.
Couplé à une autre technique appelée Man in the Middle (voir chapitre Les différentes menaces possibles - section Man inthe Middle), le sniffing gagne en intérêt car il permet d’avoir accès au trafic réseau d’un poste qui ne nous appartient pas.
2. Mise en place d’un sniffing
Avant de mettre en place un sniffing, il faut être conscient de ce que l’on cherche. Dans le cadre d’un système industriel, il est intéressant de rechercher les protocoles de communication qu’il utilise. Identifier ce qu’on cherche permet de réduire le nombre de paquets à traiter. L’utilisation de filtres permet de ne pas s’embêter avec des paquets non désirés.
a. La fonction sniff()
La mise en place d’un sniffing via Scapy résulte d’un appel à la fonction sniff().
Cette fonction prend plusieurs arguments dont le nom de l’interface réseau, le nombre de paquets à sniffer, les différents filtres et surtout le nom de la fonction qui sera exécutée à chaque fois qu’un paquet sera reçu.
Ouvrez un nouveau projet et copiez-y ce code :
from scapy.all import *
def traitementPaquet(paquetRecu):
print "Nouveau paquet recu"
sniff(prn=traitementPaquet)
La première ligne importe le code de Scapy dans votre projet.
traitementPaquet() est la fonction qui sera appelée à chaque fois qu’un paquet sera reçu. Ce paquet est passé en argument à la fonction, c’est pourquoi il est impératif que la fonction soit écrite de telle sorte qu’elle attende un argument, même si vous ne l’utilisez pas comme c’est le cas ici....
Injection de paquets
1. Qu’est-ce que l’injection de paquets ?
L’injection de paquets est le fait d’envoyer des données sur le réseau. Grâce à Scapy, il est possible d’envoyer des paquets volontairement mal formés afin de tester les réactions des équipements.
2. Pourquoi injecter des paquets ?
Les buts sont multiples : tester des équipements, scanner le réseau, voire détourner du trafic réseau afin de capturer des paquets qui ne nous sont pas destinés.
3. Création d’un paquet couche par couche
Scapy permet de créer très simplement des paquets en spécifiant pour chaque protocole les informations qu’on souhaite.
Pour ce faire, il suffit de renseigner les protocoles un par un en les séparant par le caractère de la division. Le protocole le plus à gauche doit être celui de la couche la plus basse.
Par exemple, pour créer un paquet IP à destination de 192.168.1.1, la syntaxe est :
monPaquet=IP(dst="192.168.1.1")
Pour un paquet TCP à destination de 192.168.1.1 sur le port 80 ayant le flag SYN :
monPaquet=IP(dst="192.168.1.1")/TCP(dport=80, flags="S")
Si un paquet doit contenir des données brutes, elles doivent être ajoutées à la fin :
monPaquet=IP(dst="192.168.1.1")/ICMP/Raw(load="Bonjour")
Pour vérifier que le paquet est conforme aux attentes, il suffit d’appeler :
monPaquet.show2()...