Packet forging
Un article de SeRoM - Wiki.
Sommaire |
[modifier] Définition
Le Packet Forging (ou la forge de paquet en français) désigne l'action de générer ces propres paquets réseau (TCP). Par générer les paquets j'entends le créer en définissant nous même la valeur des champs du protocole.
[modifier] Prérequis
Pour que cette manip' ai un sens, il y a bien certains prérequis:
- Comprendre le modèle en couche.
- Comprendre les échanges protocolaires réseau.
- Connaitre la structure des datagrammes des différants protocoles.
[modifier] Intérêt
L'interêt de générer ces paquets soi-même est de pouvoir perturber le déroulement standart des échanges réseaux. Ainsi, on peut détourner l'utilisation des protocoles, exploiter leurs failles, et conceptualiser des attaques.
[modifier] Exemples réalisables
- IP Spoofing
- Ping Flood
- SYN Flood
[modifier] Réalisation avec Scapy
[modifier] Présentation Scapy
Scapy est une amélioration du language de programmation Python. Il reprend le language et la console de python. Mais en plus, il incorpore une suite d'outils permettant de créer les paquets, les envoyer et les recevoir.
[modifier] Les Bases
Étant donné que cela reste du Python, le fonctionnement générale est celui de Python. Que ce soit pour l'usage de variable, l'indentation, les mots clés, ... Mais en plus de cela:
- Pour afficher la liste des commandes globales de Scapy.
lsc()
- Pour afficher la liste de tous les protocoles implémentés par Scapy.
ls()
- Pour afficher la liste de tous les champs d'un protocole.
ls(<PROTOCOLE>)
- Pour construire un paquet et définir les champs:
varPkt-1 = <PROTOCOLE>() varPkt-1.champ = <valeur> // Ou bien varPkt-2 = <PROTOCOLE>(champ="<valeur>")
- Pour encapsuler un paquet dans un autre:
varPkt = varPkt-ProtoInf / varPkt-ProtoSup
- Pour envoie le paquet
send(var-pkt) # Envoie sur la couche 3 sendp(var-pkt) # Envoie sur la couche 2
- Pour envoie et attendre la réponce d'un paquet
sr(var-pkt) # Sur la couche 3 srp(var-pkt) # Sur la couche 2
- Pour sniffer des paquets sur l'interface réseau
var-pkt = sniff(filter="<PROTOCOLE>", count="<Nb_Packet_A_Sniffer>")
[modifier] Exemple de réalisation (Ping)
//creation d'un nouveau paquet
pkgIP = IP()
//version du protocole IP
pkgIP.version = 4
//TimeToLeave: Nombre de saut max
pkgIP.ttl = 64
//Protocole transporté (1ICMP; 4IP(encaps); 6 = TCP; ...)
pkgIP.proto = 1
//Adresse source
pkgIP.src = "192.168.1.5"
//adresse de destination
pkgIP.dst = "192.168.1.1"
pkgICMP = ICMP(type = "8")
// Envoi du paquet ICMP encapsulé sur le Pquet IP
sr(pkgIP / pkgICMP)

