Simplificatio de l'introduction.

This commit is contained in:
amokadem 2024-05-21 17:35:25 +02:00
parent 0ee16aa30c
commit 3a13916f63

View file

@ -2,44 +2,35 @@
categories: network
title: Howto Scapy
---
**Cette Page est en cours d'écriture, les information présentées ici sont potentiellement incomplètes et la structure de la page peut être amenée à changer.**
* Documentation : <https://scapy.readthedocs.io/en/latest/>
[Scapy](https://github.com/secdev/scapy) est un programme et une librairie de manipulation de paquets réseau visant à donner un contrôle total sur le matériel réseau d'une machine à son utilisateur. Scapy permet de forger, décoder des paquets reçus, émettre des paquets et capturer un segment de communication (format [PCAP](https://www.endace.com/learn/what-is-a-pcap-file)) ainsi que des procédures de prototypage de paquets simplifiées et naturelles grâce à l'autocomplétion intelligente mise à disposition.
De fait les taches telles que le scanning, l'écoute ou l'enregistrement de segments de communication proposées par plusieurs outils différents tels que *Nmap* pour le scanning ou *tcpdump* ou *Wireshark* pour l'écoute passive, sont rassemblées au sein d'un seul outil qui bénéficie également d'une capacité de programmabilité très élevée de pars sa nature.
[Scapy](https://github.com/secdev/scapy) est un programme et une librairie de manipulation de paquets écrite en Python. L'outil permet de forger, décoder des paquets reçus, émettre des paquets et capturer un segment de communication (format [PCAP](https://www.endace.com/learn/what-is-a-pcap-file)) ainsi que des procédures de prototypage de paquets simplifiées et naturelles grâce à lauto-complétion intelligente mise à disposition.
En effet Scapy est avant tout une librairie Python offrant aux utilisateur une interface accessible directement via linterpréteur, dès lors, nous comprenons que les capacités des outils précédemment cités peuvent être conjuguées afin de satisfaire bien plus finement aux besoin d'un utilisateur.
C'est avant tout une librairie Python offrant aux utilisateur une interface accessible directement via linterpréteur.
**Principe :** Forger, manipuler, écouter les flux de communication réseau.
**Principe :** Forger, manipuler, écouter les flux de communication réseau.
## Principe de fonctionnement et Concepts
Scapy se sert du mode **promiscuous** des interfaces et réintroduit intégralement une stack TCP/IP sur laquelle il possède les pleins pouvoirs. Cela simplifie notamment la traversée du niveau 2 (Modèle OSI) dans la stack TCP/IP noyau. L'interface étant configurée en **promiscuous** le kernel est alors supplanté par Scapy et le matériel à disposition.
Scapy est un programme permettant daccéder au plein potentiel de votre carte réseau, pour se faire, l'outil se sert du mode **promiscuous** des interfaces et réintroduit intégralement une stack TCP/IP sur laquelle le programme possède les pleins pouvoirs, cela simplifie notamment la traversée du niveau 2 (Modèle OSI) dans la stack TCP/IP noyau. L'interface étant configurée en **promiscuous** le kernel est alors supplanté par Scapy et la carte réseau est entièrement utilisable.
Pour exemple, nous pouvons grâce à cela librement modifier ladresse MAC source de nos paquets et les envoyer directement sur le réseau sans avoir à spécifier au kernel de ne pas réécrire le champs.
Cette structure nous permets de définir entièrement un environnement réseau spécifique. Scapy nous offre la possibilité de créer/renommer/ajouter des interfaces réseau, créer une table routage dédiée dépendante de celle du système "hôte", la gestion de certificats d'encryption et bien d'autres à travers l'objet ```conf```.
D'autre part cette structure nous permets également de définir entièrement un environnement réseau spécifique; en effet, Scapy nous offre la possibilité de créer/renommer/ajouter des interfaces réseau, créer une table routage dédiée dépendante de celle du système "hôte", la gestion de certificats d'encryption et bien d'autres à travers l'objet ```conf```.
Par ailleurs Scapy utilise les nivaux du modèle OSI afin de structurer les couches composant les objets descripteurs de paquets. Ainsi un objet de type PKT dans Scapy se compose généralement de plusieurs couches en fonction des choix de l'utilisateur et peut être vu comme un dictionnaire bidimensionnel : ```PKT['IP']['TCP']...```.
L'outil se base sur les nivaux du modèle OSI afin de structurer les couches composant les objets descripteurs de paquets. Ainsi un objet de type PKT dans Scapy se compose généralement de plusieurs couches en fonction des choix de l'utilisateur et peut être vu comme un dictionnaire bidimensionnel : ```PKT['IP']['TCP']...```.
### Structures et Modèle OSI
#### Couches
Les couches mises en place par Scapy dans sa représentation des paquets sont celles modèlisées par le modèle OSI, en effet, chaque interaction avec la librairie ou l'outil cible un couche particulières afin de pouvoir donner à l'utilisateur un controle total.
Les couches mises en place par Scapy dans sa représentation des paquets sont celles modélisées par le modèle OSI, en effet, chaque interaction avec la librairie ou l'outil cible un couche particulières afin de pouvoir donner à l'utilisateur un contrôle total.
Le principale impacte de cette structure en couche sur l'utilisation de scapy, est en réalité étalé sur deux aspects:
* Dans un premier temps cela permet de structurer notre objet et de compartimenter les données celon le modèle OSI, ce qui as pour but d'en augmenter la lisibilité et la facilité d'utilisation.
* Dans un premier temps cela permet de structurer notre objet et de compartimenter les données selon le modèle OSI, ce qui as pour but d'en augmenter la lisibilité et la facilité d'utilisation.
* Dans un secont temps, et en conséquence du choix précédemment exposé de mise en place d'une stack TCP/IP séparée, cela signifie que la couche Ethernet est un peu spéciale.
* Dans un second temps, et en conséquence du choix précédemment exposé de mise en place d'une stack TCP/IP séparée, cela signifie que la couche Ethernet est un peu spéciale.
**Scapy offre donc deux types de fonction inerragissant avec le réseau :**
**Scapy offre donc deux types de fonction interagissant avec le réseau :**
* Les fonctions de **niveau 3** et plus, utilisant la **stack TCP/IP du système par défaut** (ex : ```sr()```,```send()```).
* Les fonctions de **niveau 2** spécifiant l'utilisation de la **stack de Scapy** (```srp()```,```sendp()```).
@ -106,7 +97,7 @@ Python étant la base sur laquelle se construit Scapy, nous pouvons facilement e
### Intégration Python
Scapy est avant tout un module python, il est donc facilement possible d'integrer les fonctionnalités de Scapy à ses scripts python :
Scapy est avant tout un module python, il est donc facilement possible dintégrer les fonctionnalités de Scapy à ses scripts python :
~~~python
from scapy.all import *
@ -138,7 +129,7 @@ print reply.show()
### Création de paquets
La bibliothèque de Scapy mets en place plusieurs methodes et surchages d'opèrateurs nous permettant de *construire* un paquet "de bas en haut" suivant le modèle OSI.
La bibliothèque de Scapy mets en place plusieurs méthodes et surcharges dopérateurs nous permettant de *construire* un paquet "de bas en haut" suivant le modèle OSI.
En parallèle plusieurs classes dérivant du type ```PKT``` sont mises à disposition afin de représenter les protocoles et le processus d'encapsulation visuellement lors de la construction du paquet.
Pour clarifier, attribuons à une variable x, le contenu d'un paquet au niveau 3 pour le protocole IP :
@ -205,7 +196,7 @@ Construisons maintenant les autres "layers" entourant celui-ci :
~~~
Ici l'opérateur ```/``` est l'opérateur **d'encapsulation**, nous permettant de visualiser la structure du paquet et de la manipuler.
L'inverse se fait au travers de la fonction ```del()```, versatile, qui permet de supprimet un layer, et des champs.
L'inverse se fait au travers de la fonction ```del()```, versatile, qui permet de supprimer un layer, et des champs.
~~~python
#Suppression d'un layer