Packet forging

De SeRoM - Wiki
Aller à : navigation, rechercher

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.

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.

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.

Exemples réalisables

Réalisation avec Scapy

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.

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>")

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é (1­ICMP; 4­IP(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)